k8s dial tcp 127.0.0.1:6443: connect: connection refused排查流程及解决思路
前言
k8s 集群中,使用 kubelet 报错,如下:
The connection to the server 127.0.0.1:6443 was refused - did you specify the right host or port?
排查思路
1. 检查环境是否正常
1.1 确认是否在 Master 节点排查
- 确保当前操作的机器是 Kubernetes 的 Master 节点,因为
127.0.0.1:6443是 Kubernetes API Server 的默认监听地址。 - 如果是在 Worker 节点,Worker 节点无法直接访问
127.0.0.1:6443,需要通过 Master 节点的 IP 或域名访问。
1.2 确认 kube-apiserver 的状态
ps aux | grep kube-apiserver
- 如果没有看到
kube-apiserver进程,说明 API Server 没有启动。 - 可能的原因包括配置文件错误、服务未启动或容器未运行。
2. 检查 kube-apiserver 服务
2.1 如果 kube-apiserver 是以容器方式运行
查看 kube-apiserver 容器的状态:
docker ps | grep kube-apiserver
或使用 containerd:
crictl ps | grep kube-apiserver
如果容器没有运行:
查看 kube-apiserver 容器的日志:
docker logs <kube-apiserver 容器 ID>
或:
crictl logs <kube-apiserver 容器 ID>
如果容器在重启循环:通常是配置文件(如证书、参数等)错误,查看日志以定位具体原因。
2.2 如果 kube-apiserver 是以 systemd 服务运行
检查服务状态:
systemctl status kube-apiserver
重启服务并查看日志:
systemctl restart kube-apiserver
journalctl -xeu kube-apiserver
journalctl -u kube-apiserver -f
测试 API Server 是否可用
在 Master 节点上,测试 API Server 的端口是否可以访问:
curl -k https://127.0.0.1:6443/healthz
如果返回 ok,说明 API Server 正常运行。
3. 检查 kube-apiserver 的配置
3.1 确认 API Server 的监听地址
- 检查 kube-apiserver 的启动参数,确认
--advertise-address和--bind-address参数是否正确。 - 默认情况下,
--bind-address配置为0.0.0.0,确保不限制监听地址。 - 确保
--advertise-address配置为 Master 节点的实际 IP 地址。
3.2 检查证书和密钥
Kubernetes 的 API Server 通常使用证书进行通信,证书问题会导致 API Server 无法启动:
- 确认
--cert-dir或相关的--tls-cert-file和--tls-private-key-file参数是否指向正确的证书文件。 - 确保证书文件没有过期,可以使用以下命令检查:
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -dates
如果证书过期,需要重新生成证书。
4. 检查防火墙和网络配置
4.1 检查本地端口占用
确保 6443 端口未被其他服务占用:
netstat -tuln | grep 6443
如果被其他进程占用,停止相关进程或修改 kube-apiserver 的端口号。
telnet 127.0.0.1 6443
如果无法连接,可能是 API Server 未启动或防火墙阻止了流量。
4.2 检查防火墙规则
确保防火墙未阻止 6443 端口:
iptables -L -n | grep 6443
如果防火墙阻止了流量,添加规则放行:
iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
如果使用 firewalld:
firewall-cmd --add-port=6443/tcp --permanent
firewall-cmd --reload
关闭防火墙测试:
systemctl stop firewalld
4.3 检查 SELinux
如果启用了 SELinux,可能限制了 kube-apiserver 的运行:
getenforce
如果是 Enforcing 模式,可以暂时关闭:
setenforce 0
5. 检查 etcd 状态
Kube-apiserver 依赖 etcd 存储集群状态,如果 etcd 不可用,API Server 无法正常工作。
5.1 检查 etcd 容器或服务是否运行
检查 etcd 容器状态:
docker ps | grep etcd
或:
crictl ps | grep etcd
检查 etcd 服务状态:
systemctl status etcd
5.2 检查 etcd 集群健康状态
使用 etcdctl 检查健康状态:
etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key endpoint health
如果 etcd 不健康,可能需要恢复 etcd 数据或修复集群。
6. 检查 kubeconfig 文件
kubectl 命令通过 kubeconfig 文件访问 API Server,如果文件配置错误,也可能导致连接被拒绝。
6.1 确认 kubeconfig 文件路径
检查 /etc/kubernetes/admin.conf 或 ~/.kube/config 文件是否存在,并配置正确。
6.2 测试 kubeconfig 文件
使用以下命令测试连接:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get nodes
7. 检查日志
查看 kube-apiserver 日志或其他相关组件的日志以获取更多细节:
journalctl -u kube-apiserver -f
8.检查容器运行时是否正常
容器运行时配置文件路径通常是 /etc/containerd/config.toml 或 /etc/crio/crio.conf。
Kubelet 依赖容器运行时来启动 Pod,首先确认容器运行时是否正常。
如果使用 Containerd:
systemctl status containerd
如果使用 Docker:
systemctl status docker
如果服务未启动或异常,尝试重启服务:
systemctl restart containerd
# 或
systemctl restart docker
8.1 测试容器运行时状态
- Containerd:
crictl info
- Docker:
docker info
如果命令超时或报错,表明容器运行时有问题,需要进一步排查。
8.2 检查 Kubelet 与容器运行时的通信
Kubelet 使用 CRI(Container Runtime Interface) 与容器运行时通信,以下是常见问题及解决办法:
2.2.1 检查 Kubelet 配置
查看 /var/lib/kubelet/config.yaml 或 Kubelet 的启动参数,确认 container-runtime 和 container-runtime-endpoint 配置是否正确。
Containerd:
container-runtime-endpoint 应配置为:
unix:///run/containerd/containerd.sock
Docker:
container-runtime-endpoint 应配置为:
unix:///var/run/dockershim.sock
8.2.2 检查容器运行时的 Socket 文件
确认对应的 Socket 文件是否存在并可用:
ls -l /run/containerd/containerd.sock
# 或
ls -l /var/run/dockershim.sock
如果文件不存在,可能是容器运行时未正确启动,需检查运行时日志。
8.2.3 测试 Kubelet 与运行时的通信
使用 crictl 测试 Kubelet 是否能够与容器运行时正常通信:
crictl pods
如果报错,可能是容器运行时未正确配置或无法访问 container-runtime-endpoint。
8.3 检查 Kubelet 配置和状态
8.3.1 检查 Kubelet 服务
确认 Kubelet 服务是否正常运行:
systemctl status kubelet
如果服务异常或未启动,尝试重启:
systemctl restart kubelet
8.3.2 检查 Kubelet 日志
通过日志查看更详细的错误信息:
journalctl -u kubelet -f
8.3.3 检查 Kubelet 的证书和配置
Kubelet 需要通过证书与 API Server 通信,检查以下文件是否存在且配置正确:
/var/lib/kubelet/kubeconfig/etc/kubernetes/kubelet.conf
可以通过以下命令测试 Kubelet 是否能访问 API Server:
kubectl --kubeconfig=/etc/kubernetes/kubelet.conf get nodes
如果无法访问,可能是证书过期、API Server 不可用或网络问题。
9.检查kubelet是否正常:
systemctl status kubelet
如果服务没有起来尝试拉起
systemctl start kubelet
查看服务日志:
journalctl -u kubelet -f
10.检查系统资源
有时系统资源不足也会导致k8s集群的错误。请检查系统的内存、CPU 和磁盘空间是否充足:
# 检查内存使用情况
free -m
# 检查 CPU 使用情况
top
# 检查磁盘空间
df -h
手动清理旧的日志文件
有时旧的日志文件可能会导致问题。可以手动清理这些文件并重启相关服务:
# 清理旧的日志文件
sudo rm -rf /var/log/pods/*
sudo rm -rf /var/log/containers/*
# 重启 containerd 和 kubelet 服务
sudo systemctl restart containerd
sudo systemctl restart kubelet
最后不行,就只有重启机器了
k8s dial tcp 127.0.0.1:6443: connect: connection refused排查流程及解决思路的更多相关文章
- docker登录报错Error response from daemon: Get https://192.168.30.10/v1/users/: dial tcp 192.168.30.10:443: connect: connection refused
背景描述: 登录docker报错: [root@localhost sysconfig]# docker login 192.168.30.10 Username (newcs06): newcs06 ...
- 私有Docker仓库login Error response from daemon: Get https://x.x.x.x/v2/: dial tcp x.x.x.x:443: connect: connection refused
一.登陆私有仓库错误: docker login --username=evan 192.168.0.203 Error response from daemon: Get https://192.1 ...
- docker login harbor出现的报错Error response from daemon: Get https://172.16.1.99/v1/users/: dial tcp 172.16.1.99:443: getsockopt: connection refused解决方法
出现的问题 [root@master01 ~]# docker login 172.16.1.99 Username: admin Password: Error response from daem ...
- Get https://192.168.2.119/v2/: dial tcp 192.168.2.119:443: getsockopt: connection refused
Get https://192.168.2.119/v2/: dial tcp 192.168.2.119:443: getsockopt: connection refused
- http: server gave HTTP response to HTTPS client & Get https://192.168.2.119/v2/: dial tcp 192.168.2.119:443: getsockopt: connection refused
http: server gave HTTP response to HTTPS client 出现这问题的原因是:Docker自从1.3.X之后docker registry交互默认使用的是HTTP ...
- Error: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:4001: getsockopt: connection refused
配置docker网络flannel时,配置etcd的key的时候出现以下错误 Error: client: etcd cluster is unavailable or misconfigured; ...
- Go丨语言对数据库操作报错 panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.
panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine ac ...
- dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启
kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/pkg/dns/dns.go:150: Failed to list *v1.Service: Get https:// ...
- (转)dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启
转:https://blog.csdn.net/shida_csdn/article/details/80028905 kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/ ...
- Get https://172.18.255.243:6443/api/v1/namespaces/kube-system/configmaps/kubelet-config-1.12: dial tcp 172.18.255.243:6443: i/o timeout
问题描述 使用外网加入集群的时候报如下错误: Get https://172.18.255.243:6443/api/v1/namespaces/kube-system/configmaps/kube ...
随机推荐
- Qt编写的项目作品24-人脸识别综合应用(在线+离线+嵌入式)
一.功能特点 支持的功能包括人脸识别.人脸比对.人脸搜索.活体检测等. 在线版还支持身份证.驾驶证.行驶证.银行卡等识别. 在线版的协议支持百度.旷视,离线版的支持百度,可定制. 除了支持X86架构, ...
- 开源轻量级 IM 框架 MobileIMSDK 的Uniapp客户端库已发布
一.基本介绍 MobileIMSDK-Uniapp端是一套基于Uniapp跨端框架的即时通讯库: 1)超轻量级.无任何第3方库依赖(开箱即用): 2)纯JS编写.ES6语法.高度提炼,简单易用: 3) ...
- JMeter HTTP Request 采样器全面解析与实战指南
<JMeter HTTP Request 采样器全面解析与实战指南> 一.HTTP Request 采样器简介 宝子们,JMeter 里的 HTTP Request 采样器可厉害啦,它就像 ...
- blast只保留一个最优结果
使用blast比对时,只保留一个最优结果 代码: blastn -db nt.blast.db -query seq.fa -out blast.nt.result -evalue 1e-5 -out ...
- G1原理—6.G1垃圾回收过程之Full GC
大纲 1.FGC的一些前置处理 2.FGC的整体流程 3.传统FGC只能串行化 + G1的FGC可以并发化 4.并行化FGC之并行标记 + 任务窃取 5.并行化FGC之跨分区压缩 + 避免对象跨分区 ...
- SpringBoot 项目模板-摆脱步步搭建
本文以一个简单的电商订单系统为例,源代码请访问: git clone https://github.com/e-commerce-sample/order-backendgit checkout a4 ...
- shell脚本中的逻辑判断
shell脚本中也可以实现逻辑判断. 案例4:shell脚本中的逻辑判断 如果你学过C或者其他语言,相信你不会对if 陌生,在shell脚本中我们同样可以使用if逻辑判断.在shell中if判断的基本 ...
- 推荐几个不错的 Linux 服务器管理工具
前言 选择一款好的 Linux 服务器管理工具能够极大地提高运维效率,保障业务连续性.今天大姚给大家分享3款不错的 Linux 服务器管理工具,希望可以帮助到有需要的同学. 1Panel 1Panel ...
- The Communication Complexity of Threshold Private Set Intersection-2019:解读
记录阅读论文的笔记. 什么是阈值PSI? Alice和Bob当两者的交集大小不小于\(n-t\)时(两者的不同元素的数量不大于阈值\(2t\)时),才会求交集. 所以阈值PSI会分为两步: 1.检测 ...
- Algernon pg walkthrough Window
第一次打window 从简单的开始打起吧 nmap └─# nmap -p- -A 192.168.150.65 Starting Nmap 7.94SVN ( https://nmap.org ) ...