外部访问pod的方式

以下是整理后的关于 Kubernetes 中网络相关配置的说明,包括 hostNetworkhostPortport-forwardNodePort 的使用方法和示例。


0.1 hostNetwork

配置文件示例 (04-hostNetwork-xiuxian-v3.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: hostnetwork-xiuxian
spec:
  nodeName: worker232
  hostNetwork: true  # 使用宿主机网络名称空间
  containers:
  - name: c1
    image: registry.cn-hangzhou.aliyuncs.com/cmy-k8s/apps:v3

说明

  • hostNetwork: true
    • Pod 使用宿主机的网络名称空间。
    • Pod 内的容器可以直接访问宿主机的网络接口,共享宿主机的 IP 地址。
    • 适用于需要直接访问宿主机网络的场景,例如运行网络监控工具或需要高性能网络的应用。

0.2 hostPort

配置文件示例 (05-ports-xiuxian-v2.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: ports-xiuxian
spec:
  nodeName: worker232
  containers:
  - name: c1
    image: registry.cn-hangzhou.aliyuncs.com/cmy-k8s/apps:v2
    ports:
    - containerPort: 80  # 容器内部监听的端口
      hostPort: 30080    # 宿主机上暴露的端口
      name: v2           # 端口名称,用于标识
      protocol: TCP      # 协议类型,默认为 TCP

说明

  • hostPort
    • 将容器的端口映射到宿主机的端口。
    • 外部可以通过宿主机的 IP 地址和 hostPort 访问容器内的服务。
    • 适用于需要直接从集群外部访问单个 Pod 的场景。
    • 注意:多个 Pod 不能在同一宿主机上使用相同的 hostPort

0.3 port-forward

命令示例

kubectl port-forward ports-xiuxian 30090:80 --address=0.0.0.0

说明

  • kubectl port-forward
    • 将本地端口转发到 Pod 的指定端口。
    • 参数说明:
      • ports-xiuxian:目标 Pod 的名称。
      • 30090:80:将本地的 30090 端口转发到 Pod 的 80 端口。
      • --address=0.0.0.0:允许从任何 IP 地址访问本地端口(默认仅监听 localhost)。
    • 适用于临时访问 Pod 内的服务,例如调试或开发阶段。

0.4 NodePort 类型的 Service

配置文件示例 (02-svc-NodePort.yaml)

apiVersion: v1
kind: Service
metadata:
  name: xiuxian-svc-nodeport
spec:
  type: NodePort  # 指定 Service 类型为 NodePort
  selector:
    apps: xiuxian  # 根据标签选择后端 Pod
  ports:
  - port: 8888       # Cluster IP 的端口
    targetPort: 80   # Pod 内容器的端口
    nodePort: 30080  # 每个 Worker 节点上暴露的端口

说明

  • NodePort
    • 在每个 Worker 节点上暴露一个静态端口(nodePort),外部可以通过 <NodeIP>:<nodePort> 访问 Service。
    • nodePort 的默认范围是 30000-32767,可以自定义配置,但需确保不与其他 Service 冲突。
    • 适用于需要从集群外部访问服务的场景,但不推荐大规模使用,因为会占用节点端口资源。
  • port
    • Cluster IP 的端口,仅在集群内部使用。
  • targetPort
    • Pod 内容器的端口,Service 会将流量转发到该端口。

0.5 总结

  1. hostNetwork:Pod 使用宿主机的网络名称空间,共享 IP 和端口。
  2. hostPort:将容器端口映射到宿主机端口,适用于单个 Pod 的外部访问。
  3. port-forward:临时将本地端口转发到 Pod 的指定端口,适用于调试和开发。
  4. NodePort:通过在每个 Worker 节点上暴露静态端口,实现从集群外部访问服务。

这些网络配置方式各有适用场景,可以根据实际需求选择合适的方式。

上一篇
下一篇