kubernetes + coreos集群 - 替换证书

Yar*_*atz 5 pki amazon-web-services coreos kubernetes kubectl

我有一个coreos kubernetes集群,我开始遵循这篇文章:

AWS上的kubernetes coreos集群

TLDR;

> kube-aws init
> kube-aws render
> kube-aws up
Run Code Online (Sandbox Code Playgroud)

一切都很好,我在AWS上有一个kubernetes coreos集群.在文章中有一个警告说:

生产注意:kube-aws生成的TLS密钥和证书不应用于部署生产Kubernetes集群.每个组件证书仅在90天内有效,而CA有效期为365天.如果部署生产Kubernetes集群,请首先考虑独立于此工具建立PKI.

所以我想替换默认证书,所以我遵循以下文章:

核心证书

TLDR;

  1. 创建了以下自签名证书:ca.pem,ca-key.pem
  2. 为控制器创建了证书:apiserver.pem,apiserver-key.pem
  3. 使用上面创建的证书替换控制器中的证书,然后重新启动控制器
  4. 创建了一个工作者证书并替换了工作者中的证书并重新启动它们
  5. 配置kubectl以使用我创建的新证书,并配置上下文和用户

我在kubectl和群集之间收到通信错误,抱怨证书

无法连接到服务器:x509:由未知权限签名的证书

我还尝试使用签名证书kubectl指向群集DNS,我为群集设置了DNS.

如何让kubectl与我的集群通信?

提前致谢

编辑:

我的〜/ .kube/config看起来像这样:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: /Users/Yariv/Development/workspace/bugeez/bugeez-kubernetes/credentials/ca2.pem
    server: https://kubernetes.bugeez.io
  name: bugeez
contexts:
- context:
    cluster: bugeez
    user: bugeez-admin
  name: bugeez-system
current-context: bugeez-system
kind: Config
preferences: {}
users:
- name: bugeez-admin
  user:
    client-certificate: /Users/Yariv/Development/workspace/bugeez/bugeez-kubernetes/credentials/admin2.pem
    client-key: /Users/Yariv/Development/workspace/bugeez/bugeez-kubernetes/credentials/admin-key2.pem
Run Code Online (Sandbox Code Playgroud)

编辑:

我的所有证书都是由ca2.pem签名的,我也通过运行来验证这个事实:

openssl verify -CAfile ca2.pem <certificate-name>
Run Code Online (Sandbox Code Playgroud)

编辑:

我认为错误的原因是:当我在控制器和工作人员中切换密钥时,似乎cloud-config正在用旧密钥覆盖我的新密钥.如何更换密钥并更改cloud-config以适应我的更改?

yge*_*her 3

对我有用的替代解决方案是启动一个新集群,并最初使用自定义证书,而无需依赖默认的临时凭据。

按照您使用的相同教程,我进行了以下更改:

> kube-aws init
> kube-aws render
Run Code Online (Sandbox Code Playgroud)

之前kube-aws up,我按照教程创建了证书。本教程的唯一问题是它旨在为现有集群创建新证书。因此,需要进行以下更改:

  • 此行:$ openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca"需要替换为:$ openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem

  • 在 openssl.cnf 文件中,删除定义主控主机和负载均衡器 IP 的行,因为我们还不知道它们是什么。最终的 openssl.cnf 应如下所示:

openssl.cnf

[req]
...
[req_distinguished_name]
[ v3_req ]
...
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = mydomain.net
IP.1 = ${K8S_SERVICE_IP} # 10.3.0.1
IP.2 = ${MASTER_IP} # 10.0.0.50
Run Code Online (Sandbox Code Playgroud)

我还为所有工作节点使用了相同的工作证书。

证书到位后,输入kube-aws up

我希望这可以帮助您起步