与 Kubectl 的连接不适用于 LoadBalancer

Connection with Kubectl does not work over LoadBalancer

我运行进入如下错误:

2021/04/20 20:02:06 http: proxy error: x509: certificate is valid for 10.233.0.1, 10.0.0.9, 10.0.0.6, 127.0.0.1, 10.0.0.8, (censored public ip), (censored public ip), (censored public ip), not (censored public ip of loadbalancer which points to all 3 master nodes)

当我尝试使用 kubectl 连接到一个指向 3 个主节点之一的负载均衡器时发生。

很明显是证书的问题。您需要生成一个包含您的 LoadBalancer IP 的新 apiserver 证书。

假设你使用 kubeadm 来 bootstrap 你的集群,这是你应该做的,看看:

$ kubeadm init phase certs apiserver --apiserver-advertise-address=<LB_IP>

[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local]
        and IPs [10.96.0.1 <LB_IP>]

来自 docs 关于此命令的作用:

Generate the certificate for serving the Kubernetes API, and save them into apiserver.cert and apiserver.key files.

Default SANs are kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, 10.96.0.1, 127.0.0.1

If both files already exist, kubeadm skips the generation step and existing files will be used.

请注意,如果文件已经存在,kubeadm 将跳过生成。备份已经存在的证书,删除原来的证书,然后 运行 kubeadm 生成一个新的对。


如果您使用其他方式 bootstrap k8s,那么您只能靠自己了。 您可能需要查看 how to generate api server certs the hard way.