通过service ip 访问pod 不通

来源:6-2 用Service暴露Pod服务地址

慕侠2486442

2025-01-25

图片描述

写回答

1回答

清风

2025-01-31

排查步骤

1. 检查 Pod 是否正常运行

查看 my-nginx 相关的 Pod 是否处于 Running 状态,并确保它们的 READY1/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


0
4
清风
回复
慕侠2486442
嗯,对的
2025-03-04
共4条回复

Kubernetes 入门到进阶实战,系统性掌握 K8s 生产实践

阿里云最有价值专家亲授,云原生时代必备技能

1501 学习 · 613 问题

查看课程