Appearance
解决 Docker Desktop 获取节点状态时 Unable to connect to the server: EOF
前言
在 macOS 环境使用 Docker 开启单节点 Kubernetes 环境时,通过 kubectl 获取节点状态时响应 Unable to connect to the server: EOF
咦!Docker Desktop 显示 Kubernetes 服务已正在启动没有任何问题,就是通过终端 kubectl 与 kube-apiserver 无法交互!
看到了吧,Docker Kubernetes 确实正常!
问题表现
通过执行 kubectl get nodes
无法正确显示 Kubernetes 节点状态,并响应如下错误信息
txt
Unable to connect to the server: EOF
问题分析
Step 1: 查看 Kubernetes 状态配置信息
通过执行以下命令查看当前 macOS 系统 Kubernetes 节点配置信息
shell
kubectl config view
具体配置如下
yaml
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes.docker.internal:6443
name: docker-desktop
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
current-context: docker-desktop
kind: Config
preferences: {}
users:
- name: docker-desktop
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
通过上面的配置信息可以看到 kube-apiserver
访问的地址为 https://kubernetes.docker.internal:6443
那么 Docker Desktop 在开启 Kubernetes 服务时必定会向 /etc/hosts
配置文件写入映射
Step 2: 查看 /etc/hosts 配置文件
txt
# Added by Docker Desktop
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section
Step 3: 关闭代理测试是否正常
shell
kubectl get node
咦!关闭代理之后可以正常响应 Kubernetes 节点状态信息
txt
NAME STATUS ROLES AGE VERSION
docker-desktop Ready control-plane 58m v1.32.2
Step 4: 添加 no_proxy 环境变量
临时添加,只需要在当前终端执行一个 export 命令即可
shell
export no_proxy=kubernetes.docker.internal
当然,为作为一个开发者你的代理基本常开,编辑 ~/.zshrc
或 ~/.bash_profile
添加以下配置导出环境变量
shell
export no_proxy=kubernetes.docker.internal
总结
代理这个东西吧,有好有坏,一不小心就掉坑里了!