Kubernetes 集群 x509:证书问题

Mr.*_*jun 3 cluster-computing amazon-web-services x509 kubernetes kops

我使用官方 kubernetes github 分支上的本教程,使用kops在aws上设置Kubernetes集群。

集群在 AWS 上成功设置,但是当我尝试运行时

kubectl get nodes
Run Code Online (Sandbox Code Playgroud)

或者

kops validate cluster
Run Code Online (Sandbox Code Playgroud)

它说

[user@ip-70-0-0-7 ~]$ kubectl cluster-info
Unable to connect to the server: x509: certificate is valid for *.secure.hosting prod.com, not api.subdomain.mydomain.com
Run Code Online (Sandbox Code Playgroud)

这绝对是我的x509 证书的问题。只需轻轻推向正确的方向即可。感谢您的宝贵时间和帮助!

NOTE: I am running these commands from outside the cluster from a machine from where I did set up of cluster.

mda*_*iel 5

无法连接到服务器:x509:证书对 *.secure.hosting prod.com 有效,对 api.subdomain.mydomain.com 无效

我无法判断您列出的这些名称是示例,还是为kubectl您提供的实际值,但我将按照您所写的那样使用它们,只是为了让事情变得简单

如果您安装的 kubernetes 集群确实可以通过 访问api.secure.hostingprod.com,则更新您的$HOME/.kube/config内容以说明https://api.secure.hostingprod.com当前所说的位置https://api.subdomain.mydomain.com应该使事情恢复正常。

或者,如果api.secure.hosting prod.com不是您可以使用的实际域(例如,如果您的证书的主机名中确实有空格),那么您有几个选择。

最便宜但最不正确的方法可能是通过在文件中的条目下kubectl设置选项来告诉“我知道我在做什么,不要检查证书” :insecure-skip-tls-verifycluster$HOME/.kube/config

- cluster:
    insecure-skip-tls-verify: true
Run Code Online (Sandbox Code Playgroud)

更麻烦但也是最正确的方法是使用实​​际主机名(显然)重新颁发 API 服务器的证书api.subdomain.mydomain.com。如果您知道如何操作,最好的办法就是将“主题备用名称”(缩写为“SAN”)添加到证书中,以便集群内成员可以将其与IP 地址一起引用为https://kubernetes和/或分配给命名空间中的。您当前的证书很可能具有这些值,这将向您显示它们当前的值。如果您需要 openssl 位方面的帮助,CoreOS Kubernetes 有一个 shell 脚本https://kubernetes.default.svc.cluster.localServicekubernetes Servicedefaultopenssl x509 -in /path/to/your.crt -noout -text,该脚本可能按书面方式工作,或者如果没有其他内容提供非常具体的指导。

我确实认识到这需要很多文字,也需要很多工作,但是证书非常重要,因此尽可能正确地获得证书确实可以避免每个人的心痛。