从集群外部访问 Pod

由于 Pod 是 Kubernetes 集群范围内的虚拟概念,所以集群外的客户端系统无法通过 Pod 的 IP 地址访问它

为了让外部客户端可以访问这些服务,可以将 Pod 的端口号映射到宿主机,以使客户端应用能够通过物理机访问容器应用。

方式一:容器级别的 hostPort

设置容器级别的 hostPort,将容器应用的端口号映射到物理机上:

pod-hostport.yaml
apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  containers:
  - name: webapp
    image: tomcat:9-jdk8-corretto
    ports:
    - containerPort: 8080
      hostPort: 8081
    resources:
      limits:
        cpu: 200m
        memory: 300Mi

方式二:Pod 级别的 hostNetwork=true

设置 Pod 级别的 hostNetwork=true该 Pod 中所有容器的端口号都将被直接映射到物理机上:

pod-hostnetwork.yaml
apiVersion: v1
kind: Pod
metadata:
  name: webapp
  labels:
    app: webapp
spec:
  hostNetwork: true
  containers:
  - name: webapp
    image: tomcat:9-jdk8-corretto
    ports:
    - containerPort: 8080
    resources:
      limits:
        cpu: 200m
        memory: 300Mi

在设置 hostNetwork=true 时需要注意:

  • 在容器的 ports 定义部分如果不指定 hostPort,则默认 hostPort 等于 containerPort

  • 如果指定了 hostPort,则 hostPort 必须等于 containerPort 的值

最后更新于