通过service ip 访问pod 不通
来源:6-2 用Service暴露Pod服务地址

慕侠2486442
2025-01-25
写回答
1回答
-
清风
2025-01-31
排查步骤
1. 检查 Pod 是否正常运行
查看
my-nginx
相关的 Pod 是否处于Running
状态,并确保它们的READY
为1/1
:sh复制编辑kubectl get pods -o wide
如果 Pod 不是 Running 状态或 没有 READY,可能是应用本身启动失败,查看日志:
sh复制编辑kubectl logs <pod-name>
如果有多个容器:
sh复制编辑kubectl logs <pod-name> -c <container-name>
2. 进入 Node 测试 Pod
尝试
exec
进入一个 Pod 内,看看 在 Pod 内部是否能访问端口:sh复制编辑kubectl exec -it <pod-name> -- /bin/sh
然后在 Pod 内测试:
sh复制编辑nc -zv 127.0.0.1 80 # 本地服务是否正常nc -zv <pod-ip> 80 # 是否能连接其他 Pod
如果连
127.0.0.1
80 端口都失败,说明 Pod 内 Nginx 没有正常启动。3. 检查 Pod 的
iptables
规则如果 Pod 运行正常,但不能访问端口,可能是
iptables
规则有问题:sh复制编辑iptables -t nat -L -n --line-numbers | grep 10.244
如果没有对应的 DNAT 规则,说明
kube-proxy
可能异常,尝试重启:sh复制编辑systemctl restart kubelet systemctl restart kube-proxy
4. 检查 Flannel 网络
你的
ip a
结果显示 Flannel 网络是10.244.1.0/24
,但你访问的 Pod 在10.244.2.42
这个网段,可能flannel
网络异常。检查 Flannel 配置:
sh复制编辑kubectl get pods -n kube-system -o wide | grep flannel
如果 Flannel Pod 崩溃或未启动:
sh复制编辑kubectl logs -n kube-system <flannel-pod-name>
如果
flanneld
有问题,可以尝试重启:sh复制编辑kubectl delete pod -n kube-system -l app=flannel
5. 查看
kube-proxy
规则如果
iptables
规则有问题,检查kube-proxy
:sh复制编辑kubectl get pods -n kube-system -o wide | grep kube-proxy
进入
kube-proxy
容器:sh复制编辑kubectl logs -n kube-system <kube-proxy-pod-name>
如果发现
kube-proxy
没有正确处理 Service,尝试重启:sh复制编辑kubectl delete pod -n kube-system -l k8s-app=kube-proxy
042025-03-04
相似问题