Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 11m default-scheduler Successfully assigned ingress-nginx/ingress-nginx-admission-create-7sgjw to root3 Warning FailedCreatePodSandBox 11m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "04de7c03f2cd7a37e2d12f07a3c205ac9a7a626a1bb678305235f5e42f77a543" network for pod "ingress-nginx-admission-create-7sgjw": networkPlugin cni failed to set up pod "ingress-nginx-admission-create-7sgjw_ingress-nginx" network: plugin type="calico" failed (add): error getting ClusterInformation: Get "https://10.96.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes"), failed to clean up sandbox container "04de7c03f2cd7a37e2d12f07a3c205ac9a7a626a1bb678305235f5e42f77a543" network for pod "ingress-nginx-admission-create-7sgjw": networkPlugin cni failed to teardown pod "ingress-nginx-admission-create-7sgjw_ingress-nginx" network: plugin type="calico" failed (delete): error getting ClusterInformation: Get "https://10.96.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")] Normal SandboxChanged 51s (x48 over 11m) kubelet Pod sandbox changed, it will be killed and re-created.
时间: 2025-07-09 18:40:54 浏览: 11
<think>好的,我现在需要解决用户提到的Kubernetes中Calico网络插件导致的Pod沙箱创建失败问题,具体错误是x509证书由未知机构签名的RSA验证错误。首先,我得回忆一下Kubernetes集群中证书管理的基本知识,以及Calico作为CNI插件的工作原理。
用户提供的错误信息显示,证书验证失败,可能是由于kube-apiserver的证书未被正确识别。这可能涉及到集群的证书配置问题,尤其是根证书或者CA证书是否正确安装和信任。根据引用中的信息,比如引用[4]提到旧配置未更新,可能需要替换admin.conf文件,这可能涉及到kubeconfig文件的更新,里面包含了CA证书的路径。
接下来,我需要考虑Calico组件的证书配置。Calico通常使用kubeconfig来与API服务器通信,如果kubeconfig中的证书路径不正确,或者CA证书不被信任,就会导致TLS握手失败。此外,Calico的Pod可能因为无法验证API服务器的证书而无法启动,从而导致Pod沙箱创建失败。
可能的解决步骤包括检查Calico使用的kubeconfig文件是否正确,确认CA证书是否存在于指定路径,以及证书是否有效。另外,需要检查集群的根证书是否被正确安装,特别是如果集群是自签名的,可能需要手动将CA证书添加到系统的信任存储中。
用户提到的错误信息中有提到“kube-ca”或“kubernetes”作为证书颁发机构,这可能意味着集群的CA证书名称不匹配或者配置错误。比如,Calico可能期望的CA证书名称与实际的不一致,导致验证失败。此时,需要检查Calico的配置文件,如calico.yaml中的证书配置部分,确保引用的CA证书路径正确,并且文件内容正确无误。
另一个可能性是证书过期。Kubernetes集群的证书通常有一定有效期,如果证书过期,所有依赖它的组件都会出现问题。需要检查相关证书的有效期,如使用openssl命令查看证书的起止时间,必要时更新证书。
根据引用[4]的解决方案,替换admin.conf文件可能有效,但需要确认这个操作是否适用于Calico组件。Calico可能使用自己的服务账号和kubeconfig,这时候可能需要更新对应的配置,而不仅仅是admin.conf。
此外,查看Calico Pod的日志可以帮助定位问题。用户提到使用kubectl describe命令查看Pod状态,可以进一步检查Events部分是否有更详细的错误信息。如果Calico的Pod无法启动,可能是因为无法连接到API服务器,或者证书错误导致TLS握手失败。
总结下来,可能的解决步骤包括:
1. 检查Calico的kubeconfig文件是否正确,特别是CA证书路径。
2. 确认集群的CA证书存在且被正确信任。
3. 更新过期的证书或重新生成正确的证书。
4. 替换旧的配置文件,如admin.conf,并确保Calico使用的配置同步更新。
5. 检查Calico Pod的日志以获取更详细的错误信息。
需要逐步排查这些可能性,先从最简单的检查配置文件开始,逐步深入证书管理和更新步骤。</think>### Kubernetes Calico网络插件证书错误解决方案
当出现`x509: certificate signed by unknown authority`错误导致Pod沙箱创建失败时,通常与集群证书信任链或Calico组件配置有关。以下是分步解决方案:
---
#### **1. 检查Calico使用的kubeconfig文件**
Calico通过kubeconfig与API服务器通信,需验证其配置的CA证书路径是否正确:
```bash
# 查看Calico Pod使用的kubeconfig(默认路径:/etc/kubernetes/kubeconfig)
kubectl exec -n kube-system <calico-pod-name> -- cat /etc/kubernetes/kubeconfig
```
- 检查`certificate-authority`字段指向的CA证书路径(如`/etc/kubernetes/pki/ca.crt`)是否存在且内容正确。
- 若路径错误,需更新Calico的DaemonSet或Deployment配置文件(如`calico.yaml`),重新应用配置[^4]。
---
#### **2. 验证CA证书信任状态**
若集群使用自签名证书,需确保所有节点信任该CA:
```bash
# 查看节点是否信任集群CA
openssl verify -CAfile /etc/kubernetes/pki/ca.crt /etc/kubernetes/pki/apiserver.crt
```
- 若输出显示`OK`表示信任链完整,否则需手动将CA证书添加到系统信任链:
```bash
sudo cp /etc/kubernetes/pki/ca.crt /usr/local/share/ca-certificates/kubernetes-ca.crt
sudo update-ca-certificates
```
---
#### **3. 更新过期的证书**
若证书已过期,需重新生成集群证书:
```bash
# 检查证书有效期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
```
- 若证书过期,使用`kubeadm certs renew`重新生成证书,并重启控制平面组件[^1]。
---
#### **4. 替换旧的kubeconfig文件**
若因旧配置未更新导致错误(如admin.conf过期):
```bash
# 备份旧配置并复制新配置
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```
- 确保Calico组件使用的kubeconfig同步更新[^4]。
---
#### **5. 检查Calico Pod日志**
通过日志定位具体错误:
```bash
kubectl logs -n kube-system <calico-pod-name> --tail=100
kubectl describe pod -n kube-system <calico-pod-name>
```
- 若日志显示`TLS handshake failed`,表明证书验证失败,需返回步骤1-3检查证书链。
---
#### **6. 重新部署Calico**
若配置无误但问题仍存在,尝试重新部署Calico:
```bash
kubectl delete -f calico.yaml
kubectl apply -f calico.yaml
```
---
### 相关问题
1. **如何诊断Kubernetes中其他组件的证书错误?**
通过`openssl verify`验证证书链完整性,检查组件日志中的TLS握手错误[^2]。
2. **如何防止Kubernetes证书过期?**
定期使用`kubeadm certs renew`更新证书,或配置自动续签工具(如cert-manager)。
3. **Calico网络插件常见故障有哪些?**
包括证书错误、IP池配置冲突、节点间BGP通信故障等,需结合日志和网络策略排查[^3]。
---
通过上述步骤,可系统性解决Calico因证书信任问题导致的Pod沙箱创建失败。确保操作后验证节点和Pod间的网络通信状态。
阅读全文
相关推荐



















