一、访问 Pod 应用程序(来自外部集群)

1. 集群内部访问方式

  • 当用户位于运行该应用的节点上,或属于集群成员时,可直接使用 Pod 的 IP 地址和端口进行访问。例如,若应用监听 80 端口,只需通过 Pod IP:80 即可访问,不必关心 Pod 运行在哪个节点。

2. 集群外部访问方式 —— 使用 hostPort(端口绑定机制)

  • 如果用户在集群外部,则需通过 hostPort 将主机(节点)的端口绑定到容器端口,这样外部请求可以通过节点 IP 及指定 hostPort 访问宿主节点,并被转发至 Pod 内部应用端口。
  • 使用步骤:
    1. 在 Pod 的 YAML 中为容器添加 hostPort: <宿主端口>(可加上 hostIPprotocol)。
    2. 确保该 hostPort 未被占用、节点 IP 可访问。
    3. 重建 Pod 后,通过浏览器访问 节点IP:hostPort,即可访问 Pod 内应用。

二、容器端口配置说明

1
2
3
4
5
6
ports:
- containerPort: 80 # 容器内部监听端口(必填)
hostPort: 8090 # 宿主机端口(用于外部访问,可选)
hostIP: 192.168.1.150 # 可指定绑定的宿主 IP(默认 0.0.0.0)
name: http # 可选端口名称
protocol: TCP # 协议类型,默认为 TCP

三、宿主端口使用挑战与局限

问题类型 描述 建议或替代方案
端口冲突 hostPort 可被占用,可能与其他服务冲突 避免端口复用,仅限用于测试或调试场景
调度受限 每个 <hostIP, hostPort, protocol> 组合只能绑定一次,限制 Pod 调度 不适用于高可用部署场景,应避免在生产中使用
节点变更 Pod 重建后可能被调度到新节点,原节点 IP/端口可能失效 不依赖 hostPort 作为长期访问方式
临时性限制 该方式适合临时调试使用,不适合生产环境 推荐使用 Service 或 Ingress 替代
安全风险 直接暴露宿主端口可能增加攻击面 使用抽象层(如 Service、Ingress 等)控制访问

四、推荐生产环境替代方案

  • Service(NodePort / LoadBalancer)
    提供跨节点、可扩展且稳定的服务访问方式,具备负载均衡和动态调度能力,是生产环境中常用的服务暴露手段。

  • Ingress / Gateway
    适用于 HTTP(S) 流量的统一入口管理,支持基于域名的路由、TLS 加密、路径规则等高级功能,推荐用于复杂 Web 服务的暴露管理。