kubernetes - Kubernetes 中容器端口和目标端口的区别?

标签 kubernetes containers port kubernetes-pod

container port 与 Kubernetes 容器中的 targetports 有何不同?
它们是否可以互换使用,如果可以,为什么?
我遇到了下面的代码片段,其中 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
        
在上面的代码片段中,他们为 containerPort 参数(在最后一行中)提供了 5432。那么,这个 containerPorttargetport 有何不同?
据我所知,port这个术语一般指的是port(Kubernetes)上的service。如果我不正确,请纠正我。

最佳答案

简而言之: targetPortcontainerPort 基本上指的是同一个端口(所以如果两者都被使用,它们应该具有相同的值)但它们用于两个不同的上下文并且具有完全不同的目的。
它们不能互换使用,因为它们都是两个不同的 kubernetes 资源/对象规范的一部分:分别是 ServicePod。虽然 containerPort 的目的可以被视为纯粹的信息,但 targetPortService 所需要的,它公开了一组 Pods
重要的是要了解,通过在 containerPort/Pod 规范中使用特定值声明 Deployment,您不能让 Pod 公开此特定端口,例如如果您在 containerPort 字段中声明您的 nginx Pod 公开端口 8080 而不是默认的 80 ,您仍然需要在容器中配置您的 nginx 服务器以监听此端口。
containerPort 规范中声明 Pod 是可选的。即使没有它,您的 Service 也会根据它在 targetPort 中声明的信息知道将请求定向到哪里。
最好记住,不需要在 targetPort 定义中声明 Service。如果省略它,则默认为您为 port 声明的值(即 Service 本身的端口)。

关于kubernetes - Kubernetes 中容器端口和目标端口的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63448062/

相关文章:

azure - 我真的需要托管云集群上的 kubeadm 吗?

docker - Gcloud 中 Jenkins 的磁盘权限

docker - 如何将容器组与容器链接?

html - 在厚重的文本页面上,包装器不会到达页面的最底部

c++ - 出现 LNK2005 和 KNK1169 错误 - 包括一个类在另一个类中

docker - Google Cloud Container Registry 拒绝来自 docker push 的连接

logging - Filebeat 多行 kubernetes 容器日志不起作用

c# - 何时使用 ObservableCollection 与 AdvisableCollection 和 PostSharp NotifyPropertyChanged?

sql - 如何从 BizTalk SendPort 执行存储过程?

port - 将 QTcpSocket 绑定(bind)到特定端口