我有一个coreos kubernetes集群,我开始遵循这篇文章:
kubernetes coreos cluster on AWS
TLDR;
> kube-aws init
> kube-aws render
> kube-aws up
一切都很顺利,我在AWS上有一个kubernetes coreos集群。 在文章中有一个警告说:
PRODUCTION注意:kube-aws生成的TLS密钥和证书 不应该用于部署生产Kubernetes集群。每 组件证书仅在90天内有效,而CA有效 365天。如果部署生产Kubernetes集群,请考虑 首先独立于此工具建立PKI。
所以我想替换默认证书,所以我遵循了以下文章:
TLDR;
我在kubectl和群集之间收到通信错误,抱怨证书
无法连接到服务器:x509:由unknown签名的证书 权威
我还尝试使用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
编辑:
我的所有证书都是由ca2.pem签名的,我也通过运行验证了这个事实:
openssl verify -CAfile ca2.pem <certificate-name>
编辑:
我认为错误的原因是: 当我在控制器和工作人员中切换密钥时,似乎cloud-config正在用旧密钥覆盖我的新密钥。如何更换密钥并更改cloud-config以适应我的更改?
答案 0 :(得分:3)
对我有用的替代解决方案是启动新群集,并最初使用自定义证书,而不依赖于默认的临时凭证。
遵循您使用的tutorial,我做了以下更改:
> kube-aws init
> kube-aws render
在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
我还为所有工作节点使用了相同的工作证书。
证书到位后,输入kube-aws up
。
我希望这可以帮助你实现目标
答案 1 :(得分:1)
如果密钥确实被旧版密码覆盖,则需要更新CloudFormation模板以使用包含新密钥的新用户数据。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks.html
答案 2 :(得分:0)
此错误消息基本上意味着服务器证书由root ca签名,HTTP客户端并不知道。这可能是由以下原因造成的:
apiserver.pem
)未经kubeconfig.yml
(在您的情况下为ca2.pem
)中获得的ca签名。您可以使用以下代码进行验证:openssl verify -CAfile ca2.pem apiserver.pem
。文件apiserver.pem
是通过--tls-cert-file
传递给apiserver的证书(请参阅http://kubernetes.io/docs/admin/kube-apiserver/)。--tls-cert-file
和--tls-private-key-file
标志时,则会创建自签名标记。apiserver.pem
不包含ca证书(请参阅http://kubernetes.io/docs/admin/kube-apiserver/中--tls-cert-file
标志的说明)。我不完全确定HTTPS服务器是否需要知道root ca,但这也可能导致问题。此错误消息也不清楚,无论这是客户端证书还是服务器证书的问题。这意味着客户端证书也必须由root ca。
签名--client-ca-file
标志设置。假设此文件也名为ca2.pem
,则可以使用以下命令验证客户端证书:openssl verify -CAfile ca2.pem admin2.pem