The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed with error: Get “ht........

🤟致敬读者

  • 🟩感谢阅读
  • 🟦希望我的文章能帮到您
  • 🟪如有兴趣可点关注了解更多内容

📘博主信息

  • 👆点标题有惊喜

📃文章前言

  • 🔷文章均为学习和工作中整理的笔记,分享记录为主,如有错误请指正,共同学习进步。
  • 🔶本文主要介绍The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz‘ failed with error: Get “ht…报错的解决


场景

执行K8S初始化命令后出现的问题

报错

The HTTP call equal to 'curl -sSL http://local
### 解决方案分析 当遇到 `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 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值