The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
时间: 2025-03-28 08:18:25 浏览: 52
### 解决方案分析
当遇到 `curl` 命令返回 `(7) Failed connect to localhost:10248; 拒绝连接` 的错误时,这通常表明目标服务未运行或监听指定端口。以下是可能的原因及其解决方案:
#### 1. **Kubelet健康检查端口未启用**
Kubernetes 中的 Kubelet 默认会暴露一个本地健康检查接口 `/healthz`,但该功能需要显式配置才能正常工作。如果 Kubelet 配置文件中缺少相关参数,则可能导致此问题[^1]。
#### 修改方法
编辑 Kubelet 启动参数,确保包含以下选项:
```bash
--address=127.0.0.1 --port=10248 --read-only-port=10249 --authentication-anonymous=true
```
如果使用 systemd 管理 Kubelet,可以编辑其服务文件并重启服务:
```bash
sudo systemctl edit kubelet
```
添加环境变量:
```ini
[Service]
Environment="KUBELET_EXTRA_ARGS=--address=127.0.0.1 --port=10248 --read-only-port=10249"
```
接着重启 Kubelet:
```bash
sudo systemctl daemon-reload && sudo systemctl restart kubelet
```
#### 2. **防火墙阻止访问**
如果服务器启用了防火墙规则,可能会阻止单独对特定端口(如 10248)的访问。可以通过临时禁用防火墙来验证这一点:
```bash
sudo ufw disable || sudo iptables -F
```
或者允许特定端口通过防火墙:
```bash
sudo ufw allow 10248/tcp
```
#### 3. **Docker 和 Kubelet cgroup 驱动不一致**
当 Docker 使用的 cgroup 驱动与 Kubelet 不匹配时,可能导致组件间通信异常,从而影响健康检查等功能[^4]。确认两者使用的驱动是否相同:
- 查看 Docker 驱动:
```bash
docker info | grep -i cgroup
```
- 查看 Kubelet 驱动:
```bash
ps aux | grep kubelet | grep cgroup
```
若发现差异,需统一两者的设置。例如,在 Docker 配置文件中修改驱动为 `systemd`:
```bash
vi /lib/systemd/system/docker.service
```
找到 `[Service]` 节点下的 `ExecStart` 行,并追加参数:
```ini
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
```
更新配置后重新加载并启动 Docker:
```bash
sudo systemctl daemon-reload && sudo systemctl restart docker
```
#### 4. **API Server 连接问题**
错误信息还提到无法连接至 API Server (`localhost:8080`) 或其他节点上的地址(`192.168.0.102:6443`)。这是由于客户端尝试默认连接到旧版无认证的端口所致[^2]。建议始终提供完整的上下文信息给 kubectl 工具:
```bash
export KUBECONFIG=~/.kube/config
kubectl get pods --all-namespaces
```
此外,可通过调试模式进一步排查网络连通性:
```bash
curl -k https://<master-ip>:6443/healthz
```
---
### 总结代码片段
```bash
# 修改 Kubelet 参数
sudo systemctl edit kubelet
cat <<EOF > /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_EXTRA_ARGS=--address=127.0.0.1 --port=10248 --read-only-port=10249"
EOF
sudo systemctl daemon-reload && sudo systemctl restart kubelet
# 统一 Docker 和 Kubelet cgroup 驱动
vi /lib/systemd/system/docker.service
sed -i 's/--exec-opt native\.cgroupdriver=cgroupfs/--exec-opt native.cgroupdriver=systemd/g' /lib/systemd/system/docker.service
sudo systemctl daemon-reload && sudo systemctl restart docker
# 测试健康状态
curl -sSL http://localhost:10248/healthz
```
---
###
阅读全文
相关推荐


















