【问题标题】:Difference between Container port and targetport in Kubernetes?Kubernetes中容器端口和目标端口的区别?
【发布时间】:2020-12-06 10:12:04
【问题描述】:

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

我遇到了下面的代码 sn-p,其中containerPort 用于表示 Kubernetes 中 Pod 上的 port

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
        

在上面的代码 sn-p 中,他们为 containerPort 参数(在最后一行)给出了 5432。那么,这个containerPorttargetport 有什么不同呢?

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

【问题讨论】:

  • 你说的是Kubernetes服务中的port和targetPort吗?
  • @Arghya Sadhu 是的!!
  • 我想知道containerport这个词和port这个词是不是同一个意思!
  • 编辑问题并添加示例 yaml 以阐明您所指的端口和容器端口
  • @Arghya Sadhu 我添加了一个代码 sn-p 和几行。我认为这将使我的问题有资格保持开放,让社区来帮助我。谢谢!

标签: kubernetes containers port kubernetes-pod


【解决方案1】:

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

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

重要的是要理解,通过在 Pod/Deployment 规范中声明 containerPort 具有特定值,您不能使 Pod 公开此特定端口,例如如果你在 containerPort 字段中声明你的 nginx Pod 暴露端口 8080 而不是默认的 80,你仍然需要在你的容器中配置你的 nginx 服务器来监听这个端口。

Pod 规范中声明containerPort 是可选的。即使没有它,您的Service 也会根据它在其targetPort 中声明的信息知道将请求定向到何处。

请记住,不需要在 Service 定义中声明 targetPort。如果省略它,则默认为您为port 声明的值(这是Service 本身的端口)。

【讨论】:

    【解决方案2】:

    pod 规范中的 ContainerPort

    要从容器公开的端口列表。在此处公开端口可为系统提供有关容器使用的网络连接的附加信息,但主要是信息性的。此处不指定端口不会阻止该端口被暴露

    服务规范中的目标端口

    服务所针对的 pod 上要访问的端口号或名称。编号必须在 1 到 65535 的范围内。名称必须是 IANA_SVC_NAME。如果这是一个字符串,它将在目标 Pod 的容器端口中作为命名端口进行查找。如果未指定,则使用“端口”字段的值(身份映射)。

    因此,服务中的 targetPort 需要与 pod 规范中的 containerPort 匹配,因为这就是服务如何知道要将流量转发到哪个容器端口的方式。

    【讨论】:

      【解决方案3】:

      containerPort 是容器内的应用可以访问的端口。

      targetPort是端口,暴露在集群中,服务将pod连接到其他服务或用户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多