【Kubernetes】failed to list *core.Secret: unable to transform key

在安装Kubernetes本地集群时遇到一个错误:`failed to list *core.Secret: unable to transform key...`。错误源于多次运行生成TLS Bootstrap Secret的命令,或者在手动安装时误设置了`spec.securityContext.seccompProfile.type=RuntimeDefault`,导致自动生成的secret与手动创建的冲突。解决方案包括清除集群缓存,删除多余secret配置,然后重启kubelet服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在安装Kubernetes本地集群时,偶然遇到如下问题:

E0514 07:30:58.627632 1 cacher.go:424] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key “/registry/secrets/default/default-token-nk77g”: invalid padding on input; reinitializing…
W0514 07:30:59.631509 1 reflector.go:324] storage/cacher.go:/secrets: failed to list *core.Secret: unable to transform key “/registry/secrets/default/default-token-nk77g”: invalid padding on input
E0514 07:30:59.631563 1 cacher.go:424] cacher (*core.Secret): unexpected ListAndWatch error: failed to list *core.Secret: unable to transform key “/registry/secrets/default/default-token-nk77g”: invalid padding on input; reinitializing…
W0514 07:31:00.633540 1 reflector.go:324] storage/cacher.go:/secrets: failed to list *core.Secret: unable to transform key “/registry/secrets/default/default-token-nk77g”: invalid padding on input
E0514 07:31:00.633575 1 cacher.go:424] cacher (*core.Secret):

<think>好的,我现在需要解决用户提出的Kubernetes中EndpointSlice相关的x509证书验证失败问题,具体错误是“certificate is valid for 10.96.0.1, not 172.16.0.3”。首先,我得理解这个问题的背景和可能的原因。 用户提供的错误信息显示,证书的有效IP地址是10.96.0.1,但当前尝试连接的IP是172.16.0.3,这导致验证失败。这通常是因为Kubernetes API服务器的证书没有包含客户端尝试访问的IP地址。需要确认证书中是否包含了所有必要的IP和域名。 接下来,我需要参考用户提供的引用内容,特别是引用[1]、[2]、[4]中提到的解决方法。例如,引用[2]和[4]都提到使用kubeadm重新生成API服务器的证书,并添加额外的SANs(Subject Alternative Names),包括所需的IP地址。这可能是一个关键的解决步骤。 首先,检查API服务器当前的证书配置。用户可能需要检查/etc/kubernetes/pki目录下的apiserver.crt文件,使用openssl命令查看证书中的SANs列表,确认是否包含172.16.0.3这个IP地址。如果没有,就需要重新生成证书,并在生成时通过--apiserver-cert-extra-sans参数添加该IP。 然后,按照引用[4]的步骤,删除旧的apiserver证书,然后使用kubeadm重新生成新的证书。例如,运行命令: kubeadm init phase certs apiserver --apiserver-advertise-address <原广告地址> --apiserver-cert-extra-sans 172.16.0.3 这里需要确保--apiserver-advertise-address参数设置正确,通常是Master节点的原IP地址,而--apiserver-cert-extra-sans添加新的IP地址172.16.0.3。 生成新证书后,需要重启API服务器和相关服务,比如kubelet,使新证书生效。引用[2]中提到执行systemctl restart kubelet.service来重启服务。同时,可能需要更新kubeconfig文件,例如使用kubeadm alpha certs renew admin.conf来刷新管理员配置文件,如引用[2]所示。 此外,如果EndpointSlice控制器或相关组件使用了自己的证书,可能需要检查这些组件的证书配置,确保它们的SANs也包含所需的IP地址。不过,通常情况下,API服务器的证书是主要的问题点。 还需要考虑网络配置是否正确,比如Calico等CNI插件是否有问题。引用[3]提到Calico在IP变更后出现证书问题,可能与节点IP变化有关,但当前问题中的错误直接指向API服务器证书,因此可能不需要调整CNI,除非网络配置有更深层次的问题。 最后,验证解决步骤是否有效。更新证书并重启服务后,再次访问EndpointSlice相关功能,查看是否仍然存在证书错误。如果问题依旧,可能需要进一步检查其他组件或日志,以排除其他潜在原因。 总结可能的解决步骤:检查证书SANs,重新生成API服务器证书,添加缺失的IP,重启服务,更新kubeconfig,验证结果。</think>### Kubernetes EndpointSlice x509证书验证失败问题解决方案 当出现`x509: certificate is valid for 10.96.0.1, not 172.16.0.3`错误时,说明Kubernetes API服务器的证书未包含客户端访问的IP地址(此处为`172.16.0.3`),导致TLS验证失败。以下是具体解决步骤: --- #### **1. 确认证书SANs列表** 首先查看API服务器证书的SANs(Subject Alternative Names): ```bash openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout | grep -A1 "X509v3 Subject Alternative Name" ``` 若输出中未包含`172.16.0.3`,则需重新生成证书[^2][^4]。 --- #### **2. 重新生成API服务器证书** 删除旧证书并生成新证书(需包含所有必要IP): ```bash cd /etc/kubernetes/pki rm apiserver.key apiserver.crt kubeadm init phase certs apiserver \ --apiserver-advertise-address <原广告地址> \ # 如10.96.0.1或原内网IP --apiserver-cert-extra-sans 172.16.0.3 # 添加缺失的IP ``` 示例: ```bash kubeadm init phase certs apiserver \ --apiserver-advertise-address 10.96.0.1 \ --apiserver-cert-extra-sans 172.16.0.3 ``` --- #### **3. 重启相关服务** 更新证书后重启组件以生效: ```bash systemctl restart kubelet.service docker restart $(docker ps | grep kube-apiserver | awk '{print $1}') # 若使用Docker ``` --- #### **4. 更新kubeconfig文件** 若使用`admin.conf`访问集群,需刷新证书: ```bash kubeadm alpha certs renew admin.conf cp /etc/kubernetes/admin.conf ~/.kube/config ``` --- #### **5. 验证EndpointSlice连接** 重新执行涉及EndpointSlice的操作(如查询或创建): ```bash kubectl get endpointslices ``` 若无报错,则问题已解决。 --- #### **可能关联问题** - **Calico网络插件**:若节点IP变更后Calico报错,需同步更新节点IP并重启Pod[^3]。 - **Service类型配置**:若EndpointSlice通过NodePort暴露,确保Service配置正确[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值