You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kubeadm搭建K8s集群后如何通过Ubuntu主机IP访问NodePort暴露的Pod内API

访问Pod内部API服务的几种可行方案

方案1:直接使用已配置的NodePort Service访问(推荐,适配你当前的集群配置)

你已经将Service设置为NodePort类型,该类型本身就支持通过集群任意节点的IP+分配的NodePort端口访问后端Pod服务,操作步骤如下:

  • 执行命令查询Service分配的NodePort端口:
    kubectl get svc <你的Service名称> -n <对应命名空间>
    输出中PORT(S)列格式为<服务端口>:<NodePort>/TCP,其中第二个数字就是集群分配的NodePort端口,默认取值范围为30000-32767。
  • 确认运行Pod的Ubuntu宿主机防火墙、云服务商安全组已放开该NodePort端口的入站规则,直接访问http://<宿主机IP>:<NodePort端口>即可访问Pod内的API服务。

方案2:开启hostNetwork模式直接复用宿主机网络

如果你需要Pod直接绑定宿主机IP端口,无需经过Service转发,可以修改Deployment配置开启hostNetwork:
在Deployment的spec.template.spec字段下添加hostNetwork: true,配置示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: 你的Deployment名称
spec:
  replicas: 1
  selector:
    matchLabels:
      app: 你的服务标签
  template:
    metadata:
      labels:
        app: 你的服务标签
    spec:
      hostNetwork: true # 开启宿主机网络复用
      containers:
      - name: 你的容器名称
        image: 你的服务镜像地址
        ports:
        - containerPort: 8080 # 替换为你的API服务实际监听端口

配置更新后,Pod会直接使用宿主机的网络栈,API服务监听的端口会直接绑定在宿主机所有IP上,直接访问http://<宿主机IP>:<API服务端口>即可。
注意:开启hostNetwork后端口不能和宿主机本地进程、同节点其他开启hostNetwork的Pod端口冲突

方案3:端口转发(仅适合临时调试场景)

如果只是临时调试不需要长期暴露服务,可以使用kubectl端口转发功能:
执行命令:
kubectl port-forward --address 0.0.0.0 pod/<你的Pod名称> <宿主机监听端口>:<Pod内API端口> -n <对应命名空间>
命令保持运行期间,就可以通过http://<宿主机IP>:<指定的宿主机监听端口>访问Pod内的API服务,命令停止后转发规则自动失效。

访问不通常见排查项

  • 确认Pod状态为Running,无异常重启:kubectl get pod -n <命名空间>
  • 确认Pod内API服务监听地址为0.0.0.0而非127.0.0.1,否则仅支持Pod内部访问
  • 确认宿主机iptables/ufw防火墙、云安全组已放开对应端口的入站访问
  • 确认Service的selector标签和Pod的labels完全匹配,保证流量可以正常转发到后端Pod

内容的提问来源于stack exchange,提问作者Dhinesh Prabakaran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:15:03