请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答 回答被采纳积分+3

插入代码

1回答

清风 2025-01-31 11:25:37

排查步骤

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 回复 有任何疑惑可以回复我~
  • 提问者 慕侠2486442 #1
    老师,这个问题解决了。我还有问题请教一下,在讲nodeport 时,port: 端口80,targetPort 端口80,这两个端口代表的是什么端口??
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: default
    spec:
      selector:
        app: nginx
      type: NodePort
      ports:
      - name: nginx-service80
        protocol: TCP
        port: 80
        targetPort: 80
        nodePort: 30001
    回复 有任何疑惑可以回复我~ 2025-02-01 14:29:26
  • 清风 回复 提问者 慕侠2486442 #2
    参数	作用	在哪里监听?
    port: 80	Service 端口,集群内部访问该 Service 时使用的端口	Service 对应的虚拟 IP(ClusterIP)上监听
    targetPort: 80	Pod 端口,流量转发到 Pod 内部的端口	Pod 运行的容器内部监听的端口
    nodePort: 30001	节点端口,外部访问时使用的端口	Kubernetes 集群的每个 Node 上监听
    回复 有任何疑惑可以回复我~ 2025-02-07 10:26:30
  • 提问者 慕侠2486442 回复 清风 #3
    回复 清风:老师,如果我nginx 镜像中nginx的端口设置成了8080,那么对应 targetPort 端口就应该是8080  对吗?
    回复 有任何疑惑可以回复我~ 2025-02-09 18:10:02
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号