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。那么,这个 containerPort
与 targetport
有何不同?据我所知,
port
这个术语一般指的是port
(Kubernetes)上的service
。如果我不正确,请纠正我。
最佳答案
简而言之: targetPort
和 containerPort
基本上指的是同一个端口(所以如果两者都被使用,它们应该具有相同的值)但它们用于两个不同的上下文并且具有完全不同的目的。
它们不能互换使用,因为它们都是两个不同的 kubernetes 资源/对象规范的一部分:分别是 Service
和 Pod
。虽然 containerPort
的目的可以被视为纯粹的信息,但 targetPort
是 Service
所需要的,它公开了一组 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/