我正在尝试使用kubectl exec输入我的一个容器,但是我遇到了这个错误。
$ kubectl exec -it ubuntu -- bash
error: Unable to upgrade connection: {
"kind": "Status",
"apiVersion": "v1",
"metadata": {},
"status": "Failure",
"message": "x509: cannot validate certificate for <worker_node_ip> because it doesn't contain any IP SANs",
"code": 500
}
我已根据本指南https://coreos.com/kubernetes/docs/1.0.6/configure-kubectl.html
为我的CA证书和管理密钥等配置了kubectl我在API服务器的日志中也发现了同样的错误
E1125 17:33:16.308389 1 errors.go:62] apiserver received an error that is not an unversioned.Status: x509: cannot validate certificate for <worker_node_ip> because it doesn't contain any IP SANs
这是否意味着我在我的工作人员/主节点或我本地计算机上的kubectl上错误地配置了证书?
答案 0 :(得分:4)
如果您使用此命令创建证书:
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem
然后通过执行以下操作可以解决您的问题,因为'client'证书使用-extfile extfile.cnf:
echo subjectAltName = IP:worker_node_ip > extfile.cnf
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial \
-out server-cert.pem -extfile extfile.cnf
您可以指定任意数量的IP地址,例如IP:127.0.0.1,IP:127.0.1.1(非本地主机)。
答案 1 :(得分:3)
如果你将Kubernetes与Google容器群集一起使用,这可能会解决问题,因为它对我有用:
gcloud container clusters get-credentials <cluster-name> \
--project <project-name> --zone <zone>
答案 2 :(得分:0)
该消息来自主设备尝试连接到节点(流量流为kubectl -> master API -> kubelet -> container
)。启动主服务器时,您是否设置了--kubelet_certificate_authority
?如果是这样,主人希望能够验证kubelet的服务证书,这意味着它需要对主人用来连接它的主机名/ IP地址有效。