这是我在测试环境中设置Kubernetes集群的第一次尝试。在准备过程中,我创建了3个运行Fedora Atomic的实例:

10.11.184.8: master/etcd
10.11.184.5: node01
10.11.184.6: node02


,然后使用Ansible的contrib / ansible剧本,将kubernetes部署到了实例中。每个主机都完成了“ 0”故障。

然后我连接到我的主服务器并开始检查它的状态:

[root@kubemaster ~]# kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok                   
controller-manager   Healthy   ok                   
etcd-0               Healthy   {"health": "true"}  


但是,我去检查我的节点,但它什么也没返回:

[root@kubemaster ~]# kubectl get nodes
No resources found.


我开始检查日志,并且发现下面的内容在所有三个方面重复一遍又一遍上面列出的IP:

http: TLS handshake error from 10.11.184.5:32788: remote error: tls: bad certificate


似乎该可播放的剧本确实生成了一些证书:

[root@kubemaster ~]# ll /etc/kubernetes/certs/
total 40
-r--r-----. 1 kube kube-cert 1220 Aug 15 19:11 ca.crt
-r--r-----. 1 kube kube-cert 4417 Aug 15 19:11 kubecfg.crt
-r--r-----. 1 kube kube-cert 1704 Aug 15 19:11 kubecfg.key
-rw-rw----. 1 root kube-cert 4417 Aug 15 19:11 kubelet.crt
-rw-rw----. 1 root kube-cert 1704 Aug 15 19:11 kubelet.key
-r--r-----. 1 kube kube-cert 4917 Aug 15 19:11 server.crt
-r--r-----. 1 kube kube-cert 1704 Aug 15 19:11 server.key


然后将kube-apiserver二进制文件作为参数传递给它们:

/usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd-servers=http://10.11.184.8:2379 --insecure-bind-address=127.0.0.1 --secure-port=443 --allow-privileged=true --service-cluster-ip-range=10.254.0.0/16 --admission control=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota --tls-cert-file=/etc/kubernetes/certs/server.crt --tls-private-key-file=/etc/kubernetes/certs/server.key --client-ca-file=/etc/kubernetes/certs/ca.crt --token-auth-file=/etc/kubernetes/tokens/known_tokens.csv --service-account-key-file=/etc/kubernetes/certs/server.crt --bind-address=0.0.0.0 --apiserver-count=1


如果我在一个节点上查看日志,则会看到很多类似这样的消息:

Failed to list *v1.Node: Get https://10.11.184.8:443/api/v1/nodes?fieldSelector=metadata.name%3D10.11.184.8:443/api/v1/nodes?fieldSelector=metadata.name%3D10.11.184.5&resourceVersion=0: x509: certificate is valid for 10.254.0.1, 192.168.0.11, 172.16.63.0, 172.16.63.1, not 10.11.184.8


我的证书可能生成不正确吗?我正在看这份文件。也许我应该尝试使用openssl或easyrsa手动创建证书?

#1 楼

在链接的文档中,该文档指出:


引用的文件必须包含一个或多个证书颁发机构,这些证书颁发机构可用来验证提供给API服务器的客户端证书。


这意味着您的客户端证书无效,原因是:


服务器不信任客户端的签名证书颁发机构
客户端不信任服务器的证书签名证书颁发机构
证书的DN与主机名不匹配

最可能的情况是1.服务器不信任客户端的签名证书颁发机构,因为服务器未验证客户端证书的DNS,错误指示这是客户端上没有的remote error。这很可能意味着客户端的证书是在客户端本身而不是在服务器上签名的。

您需要确保在客户端上生成证书,让服务器对其进行签名,然后再将其转移。证书返回给客户端。否则,您需要将服务器的CA证书添加到客户端的密钥库中。通过设置主机文件条目,可以确保您没有DNS / DN不匹配。