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

如何配置Service NodePort访问同一Pod内的两个容器?

问题分析与完整配置方案

首先明确:你当前的Service配置不正确,主要有两个核心问题,我会一步步拆解并给出完整的正确配置。

现有配置的问题

  • Selector匹配错误:你的Pod标签是app=read-write,但第一个Service的selector字段写的是app: read,这会导致Service无法找到目标Pod,流量根本无法转发到容器。
  • 缺少明确的targetPort:虽然当port和容器端口相同时可以省略targetPort,但明确指定这个字段能让配置更清晰,避免后续端口变更时出现混淆——它是用来直接指向Pod内容器的实际监听端口的关键字段。

完整的正确配置

你需要创建两个独立的NodePort Service,分别对应两个容器的端口,且都正确匹配Pod的标签。以下是完整的YAML配置:

第一个Service(对应container-1的7110端口)

apiVersion: v1
kind: Service
metadata:
  labels:
    app: read
    tier: service
  name: read-service
spec:
  ports:
  - port: 7110                # 集群内部访问该Service的端口
    targetPort: 7110          # 对应Pod内container-1的监听端口
    nodePort: 32000           # 外部访问的NodePort
    protocol: TCP
  selector:
    app: read-write           # 必须和Pod的标签完全匹配
  type: NodePort

第二个Service(对应container-2的7111端口)

apiVersion: v1
kind: Service
metadata:
  labels:
    app: listen
    tier: service
  name: listen-service
spec:
  ports:
  - port: 7111                # 集群内部访问该Service的端口
    targetPort: 7111          # 对应Pod内container-2的监听端口
    nodePort: 32001           # 外部访问的NodePort(需在集群NodePort范围内)
    protocol: TCP
  selector:
    app: read-write           # 同样匹配Pod的标签
  type: NodePort

关键配置说明

  1. Selector匹配:所有需要绑定到目标Pod的Service,其selector必须和Pod的metadata.labels完全一致,这里就是app: read-write,这是Service和Pod建立关联的核心依据。
  2. 端口映射逻辑:
    • nodePort:外部客户端通过「节点IP + nodePort」访问服务,要确保这个端口在集群的NodePort默认范围(通常是30000-32767)内,超出范围会导致创建失败。
    • targetPort:直接对应Pod内容器的监听端口,必须和容器配置的端口完全一致。
    • port:集群内部其他应用访问该Service的端口,只要不冲突可以自由设置,和targetPort相同是最直观的选择。

验证方法

创建完成后,执行以下命令查看Service状态:

kubectl get svc

如果输出中两个Service的EXTERNAL-IP列显示节点IP(或<nodes>),PORT(S)列显示7110:32000/TCP和7111:32001/TCP,就说明配置生效了。此时你可以用任意集群节点的IP加上对应的NodePort,测试外部访问是否正常。

内容的提问来源于stack exchange,提问作者Anum Sheraz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:06