Docker Desktop Kubernetes证书缺失致kubectl命令报错的解决方法求助
kubectl exec/kubectl logs命令失败的解决方法 我按照官方步骤在Mac版Docker Desktop中启用了Kubernetes,kubectl apply、kubectl get这类命令能正常运行,但kubectl exec、kubectl logs执行失败,报错如下:
$ kubectl.docker logs -n kube-system kube-apiserver-docker-desktop
Error from server: Get "https://192.168.65.4:10250/containerLogs/kube-system/kube-apiserver-docker-desktop/kube-apiserver": open /run/config/pki/apiserver-kubelet-client.crt: no such file or directory
相关版本信息:
$ kubectl.docker version --short Flag --short has been deprecated, and will be removed in the future. The --short output will become the default. Client Version: v1.24.0 Kustomize Version: v4.5.4 Server Version: v1.24.0
$ docker version Client: Cloud integration: v1.0.24 Version: 20.10.14 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 24 01:49:20 2022 OS/Arch: darwin/arm64 Context: default Experimental: true Server: Docker Desktop 4.8.2 (79419) Engine: Version: 20.10.14 API version: 1.41 (minimum version 1.12) Go version: go1.16.15 Git commit: 87a90dc Built: Thu Mar 24 01:45:44 2022 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.5.11 GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8 runc: Version: 1.0.3 GitCommit: v1.0.3-0-gf46b6ba docker-init: Version: 0.19.0 GitCommit: de40ad0
解决步骤
1. 重置Kubernetes集群
打开Docker Desktop偏好设置,切换到Kubernetes标签页,勾选「Reset Kubernetes cluster」,等待重置完成后重启Docker Desktop。
2. 确认kubectl上下文
执行以下命令确保kubectl使用的是Docker Desktop的Kubernetes上下文:
kubectl config get-contexts kubectl config use-context docker-desktop
3. 手动修复证书缺失(重置无效时使用)
进入Docker Desktop的Kubernetes节点容器:
docker exec -it docker-desktop bash
创建证书目录并复制现有证书:
mkdir -p /run/config/pki cp /etc/kubernetes/pki/apiserver-kubelet-client.crt /run/config/pki/ cp /etc/kubernetes/pki/apiserver-kubelet-client.key /run/config/pki/
退出容器后重启kube-apiserver Pod(Kubernetes会自动重建):
kubectl delete pod -n kube-system kube-apiserver-docker-desktop
4. 升级Docker Desktop版本
当前使用的Docker Desktop 4.8.2存在已知的Kubernetes证书挂载bug,建议升级到最新稳定版,升级后重新启用Kubernetes即可解决此类问题。
内容的提问来源于stack exchange,提问作者rcorre

