EKS执行kubectl logs <podname>命令突然报TLS内部错误如何解决
EKS kubectl logs TLS内部错误修复方案
对应报错信息:
Error from server: Get "https://host:10250/containerLogs/dev/pod-748b649458-bczdq/server": remote error: tls: internal error
该错误本质是Kubernetes API Server与节点kubelet的10250端口TLS握手失败,通常由kubelet证书过期/不匹配导致,无需重建集群,按以下步骤修复即可:
步骤1:确认故障范围
- 先查询故障Pod所在节点:
kubectl get pod pod-748b649458-bczdq -n dev -o wide - 选择调度到其他节点的正常Pod执行
kubectl logs,如果其他节点Pod日志可正常拉取,说明为单节点证书故障,走步骤2;如果所有节点均报相同错误,走步骤3。
步骤2:单节点故障修复
- 先驱逐故障节点上的业务Pod:
kubectl drain <故障节点名称> --ignore-daemonsets --delete-emptydir-data - 进入EKS控制台对应节点组,删除该故障节点,EKS节点组会自动创建配置正常的新节点,新节点加入集群时会自动签发合法的kubelet证书,完成后验证日志拉取功能即可。
步骤3:全集群范围故障修复
- 先排查本地kubeconfig证书是否过期:
kubectl config view --raw -o jsonpath='{.users[*].user.client-certificate-data}' | base64 -d | openssl x509 -noout -dates
如果输出的notAfter时间早于当前时间,重新生成kubeconfig即可:aws eks update-kubeconfig --name <集群名称> --region <集群所在区域> - 如果本地证书正常,说明节点侧kubelet证书批量轮转失败,执行节点组强制滚动更新即可:
aws eks update-nodegroup-version --cluster-name <集群名称> --nodegroup-name <节点组名称> --force
注意:滚动更新过程中EKS会自动保障业务Pod平滑漂移,不会造成服务中断;如果使用自定义AMI搭建节点组,需要确认AMI中的kubelet配置未手动指定过期的证书文件
验证
修复完成后执行kubectl logs pod-748b649458-bczdq -n dev,确认日志可正常拉取即修复完成。
内容的提问来源于stack exchange,提问作者Pita
相关产品推荐
相关产品推荐

