当前位置: 首页 > article >正文

【K8S系列】Kubernetes 中 NodePort 类型的 Service 无法访问的问题【已解决】

在这里插入图片描述

在 Kubernetes 中,NodePort 类型的 Service 允许用户通过每个节点的 IP 地址和指定的端口访问应用程序。如果
NodePort 类型的 Service 无法通过节点的 IP
地址和指定端口进行访问,可能会导致用户无法访问应用。本文将详细分析该问题的常见原因及其解决方案。

一、问题描述

NodePort 类型的 Service 允许用户通过以下方式访问服务:

  • http://<node-ip>:<node-port>

如果无法访问,可能会出现以下情况:

  • 请求超时。
  • 返回连接错误。
  • 404 或其他错误代码。

二、故障排查步骤

1. 检查 NodePort Service 的状态

命令
kubectl get svc <service-name>
执行结果分析

输出示例:

NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
my-service    NodePort    10.96.0.1      <none>        80:30007/TCP    10m
  • PORT(S):显示 NodePort 的外部端口(如 30007)。

2. 查看 Service 详细信息

命令
kubectl describe svc <service-name>
执行结果分析

输出示例:

Name:              my-service
Namespace:         default
Selector:          app=my-app
Type:              NodePort
IP:                10.96.0.1
Port:              <unnamed>  80/TCP
NodePort:         30007/TCP
Endpoints:         10.244.1.2:8080,10.244.1.3:8080
  • NodePort:显示分配给 Service 的 NodePort。
  • Endpoints:显示与 Service 关联的 Pod 的 IP 地址和端口。如果此字段为空,则表示没有可用的 Pod。

3. 验证 Pod 状态和标签

命令
kubectl get pods -l app=my-app
执行结果分析

输出示例:

NAME            READY   STATUS    RESTARTS   AGE
my-app-1       1/1     Running   0          5m
my-app-2       1/1     Running   0          5m
  • 确保 Pod 处于 Running 状态,并且 READY 列显示为 1/1

4. 测试 Pod 之间的连接

在集群内部测试从 Pod 到 Service 的连接。

命令
kubectl exec -it <some-pod-name> -- curl http://my-service
执行结果分析
  • 如果返回正常响应,表示 Service 和 Pod 之间的连接正常。
  • 如果出现错误,需要进一步检查 Pod 的健康和配置。

三、常见原因及解决方案

1. NodePort 未正确配置

问题描述:Service 的 NodePort 配置可能存在问题。

解决方案

  • 确认 NodePort 在 30000 到 32767 的范围内(Kubernetes 默认范围)。
  • 如果需要手动设置 NodePort,确保配置正确。
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30007  # 确保在允许范围内

2. Pod 未处于 Running 状态

问题描述:与 Service 关联的 Pod 可能未处于正常状态。

解决方案

  • 使用以下命令检查 Pod 状态:
kubectl get pods -l app=my-app
  • 如果 Pod 处于 CrashLoopBackOff 或其他异常状态,查看其日志:
kubectl logs <pod-name>
  • 解决 Pod 的健康问题,确保它们能够正常运行。

3. 防火墙或安全组设置

问题描述:云环境中的防火墙或安全组可能阻止了对 NodePort 的访问。

解决方案

  • 检查云提供商控制台中的安全组设置,确保允许访问 NodePort 所在的端口。
  • 对于在本地环境(如 Minikube)中运行的集群,确保本地防火墙允许访问 NodePort。

4. 节点 IP 地址不正确

问题描述:使用了错误的节点 IP 地址。

解决方案

  • 使用以下命令获取节点的 IP 地址:
kubectl get nodes -o wide

输出示例:

NAME           STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP
kube-node-1    Ready    <none>   10m   v1.21.0   192.168.1.10     <none>
  • 确保使用的节点 IP 地址正确。

5. Network Policies 限制访问

问题描述:可能存在网络策略(Network Policies),限制了 Pod 之间的流量。

解决方案

  • 检查当前命名空间的网络策略:
kubectl get networkpolicy
  • 如果存在限制,更新网络策略以允许流量。

6. Service 的选择器未匹配到 Pod

问题描述:Service 的选择器未正确匹配到 Pod 的标签。

解决方案

  • 检查 Service 的选择器和 Pod 的标签:
kubectl get pods --show-labels
  • 确保选择器 app=my-app 正确匹配到相关的 Pod 标签。

7. Pod 的容器端口未正确暴露

问题描述:Pod 的容器未正确配置暴露端口。

解决方案

  • 确认 Pod 的容器定义中包含正确的 containerPort
containers:
- name: my-container
  image: my-image
  ports:
  - containerPort: 8080  # 必须与 Service 的 targetPort 一致

四、总结

NodePort 类型的 Service 无法通过节点的 IP 地址和指定端口访问的问题可能由多种原因引起,包括配置错误、Pod 状态异常、防火墙设置和网络策略等。通过逐步排查 Service 状态、Pod 状态、网络配置和安全组设置,可以有效定位问题并采取相应的解决方案。确保 Service 和 Pod 之间的配置一致性,以及网络的可用性,是确保服务正常运行的关键。


http://www.kler.cn/a/373360.html

相关文章:

  • PostgreSQL 同表结构对比
  • 【更新】cyのLastDance - Chapter2(20241030~)
  • 测试管理|如何做好质量管理、提高研发的代码质量?
  • 接口测试(八)jmeter——参数化(CSV Data Set Config)
  • 【C++】类和对象(六):运算符重载1
  • 第8天:数据存储-补充材料——MainActivity.kt解读
  • MySQL(2)【库的操作】
  • python爬虫案例——使用aiohttp模块异步请求网站,利用协程加快爬取速度(17)
  • 数据可视化工具深入学习:Seaborn 与 Plotly 的详细教程
  • Linux驱动开发(1):环境搭建
  • 工厂方法模式与抽象工厂模式
  • 九泰智库 | 医械周刊- Vol.65 | 广州发布首批创新药械产品目录
  • libavdevice.so.58: cannot open shared object file: No such file ordirectory踩坑
  • XXE漏洞原理、修复建议及绕过方式
  • 蓝牙4.0/5.1/5.2模组UART通讯基础知识
  • 【C++动态规划】有效括号的嵌套深度
  • 【Triton 教程】矩阵乘法
  • 新闻列表以及详情页面梳理
  • DAY66WEB 攻防-Java 安全SPEL 表达式SSTI 模版注入XXEJDBCMyBatis 注入
  • Linux find 匹配文件内容
  • 无损将GPT转换为MBR的GDisk操作指南:
  • 数据结构和算法-动态规划(1)-认识动态规划
  • 桥接模式:解耦抽象与实现的利器
  • 【CTF】 文件包含漏洞——data伪协议 【详】
  • win11安装安卓apk原生应用,并设置网络代理
  • 基于MATLAB的地下水模拟系统开发