首页 > 解决方案 > Kubernetes中容器端口和目标端口的区别?

问题描述

与Kubernetes中的容器有什么container port不同?targetports它们是否可以互换使用,如果可以,为什么?

我遇到了以下代码片段,其中containerPort用于表示portKubernetes 中的 pod 上。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
  labels:
    app: demo-voting-app
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgres-pod
      app: demo-voting-app
  template:
    metadata:
      name: postgres-pod
      labels:
        name: postgres-pod
        app: demo-voting-app

    spec:
      containers:
      - name: postgres
        image: postgres:9.4
        ports:
        - containerPort: 5432
        

在上面的代码片段中,他们为containerPort参数提供了 5432(在最后一行)。那么,这与 有何containerPort不同targetport

据我所知,这个词port一般是指porton the service(Kubernetes)。如果我不正确,请纠正我。

标签: kubernetescontainersportkubernetes-pod

解决方案


简而言之: targetPort并且containerPort基本上是指相同的端口(因此,如果使用两者,它们应该具有相同的值),但它们用于两种不同的上下文并且具有完全不同的目的。

它们不能互换使用,因为它们都是两个不同 kubernetes 资源/对象规范的一部分:ServicePod分别。虽然 的目的containerPort可以被视为纯粹targetPort的信息,但它需要Service暴露一组Pods.

重要的是要了解,通过在/规范中声明containerPort特定值,您不能公开此特定端口,例如,如果您在字段中声明您的 nginx公开端口而不是默认端口,您仍然需要在容器中配置您的 nginx 服务器监听这个端口。PodDeploymentPodcontainerPortPod808080

containerPort在规范中声明Pod是可选的。即使没有它,您Service也将知道根据它在其targetPort.

最好记住它不需要targetPortService定义中声明。如果你省略它,它默认为你声明的值port(这是它本身的端口Service)。


推荐阅读