You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:27:51