K8s多主节点集群初始化遇x509证书未知签发机构错误求助
解决Kubelet无法验证负载均衡器SSL证书的问题
问题核心
执行kubeadm init时,kubelet注册节点失败,报错x509: certificate signed by unknown authority,原因是kubelet默认只信任Kubernetes集群内部的CA证书池,而负载均衡器使用的Let's Encrypt公网证书不在该信任列表内。
解决步骤
1. 验证Nginx证书链完整性
你的Nginx配置已使用fullchain.pem(包含完整证书链),可先确认证书链是否正常:
sudo openssl s_client -connect my.domain.com:443 -showcerts
输出应呈现完整层级:服务器证书 → Let's Encrypt R3中间CA → ISRG Root X1根CA。
2. 配置Kubelet信任系统CA证书
Kubelet默认仅加载/etc/kubernetes/pki/ca.crt,需修改配置使其使用包含Let's Encrypt根CA的系统级证书:
- 编辑kubelet配置文件:
sudo nano /var/lib/kubelet/config.yaml
添加或修改字段:
rootCAFile: /etc/ssl/certs/ca-certificates.crt
- 重启kubelet服务:
sudo systemctl restart kubelet
3. 重新执行kubeadm init并指定外部CA
若上述步骤无效,需在初始化时明确指定负载均衡器证书的CA文件:
- 清理之前初始化的残留数据:
sudo kubeadm reset -f sudo rm -rf /etc/kubernetes /var/lib/kubelet /var/lib/etcd
- 复制Let's Encrypt完整证书链到K8s PKI目录:
sudo cp /etc/letsencrypt/live/my.domain.com/fullchain.pem /etc/kubernetes/pki/external-ca.crt
- 执行初始化命令,添加
--root-ca-file参数:
sudo kubeadm init \ --control-plane-endpoint=my.domain.com:443 \ --upload-certs \ --apiserver-advertise-address=172.31.40.245 \ --pod-network-cidr 10.244.0.0/16 \ --root-ca-file=/etc/kubernetes/pki/external-ca.crt \ --apiserver-cert-extra-sans=my.domain.com
--apiserver-cert-extra-sans确保API Server证书包含负载均衡器域名作为备用名称,避免后续连接异常。
4. 规避错误操作
不要修改证书的CA字段为TRUE——Let's Encrypt签发的是服务器证书,本身不具备CA签发能力,修改会直接导致证书失效。
内容的提问来源于stack exchange,提问作者Arjun Vk
相关产品推荐
相关产品推荐

