Kubernetes服务可以在服务定义中有一个targetPort和port:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
端口和targetPort有什么区别?
Kubernetes服务可以在服务定义中有一个targetPort和port:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
端口和targetPort有什么区别?
当前回答
目标器端口说明
# pod file
apiVersion: v1
kind: Pod
metadata:
name: pod_name
labels:
name: pod_ref
spec:
containers:
- name: docker-container
image: python:3:11
ports:
- containerPort: 5000 # this is the target port which we need to access (target) from service file
---
apiVersion: v1
kind: Service
metadata:
name: service_config
labels:
name: service_config_ref
spec:
type: NodePort
selector:
name: pod_ref # same as pod metadata match labels
ports:
- targetPort: 5000 # this is where the pod is listening
port: 80 # this is where this service (this file) is going to listen.
# If you call the port 80, it will reach the service, then the service will forward the port to port:5000
其他回答
这个答案是参考Kubernetes的文档以及其他答案:
https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/:
targetPort:容器接收流量的端口,
port:是抽象的服务端口,它可以是其他pod用来访问服务的任何端口
https://kubernetes.io/docs/concepts/services-networking/service/:
Pods中的端口定义有名称,您可以在服务的targetPort属性中引用这些名称。即使服务中有使用单一配置名称的pod的混合物,通过不同的端口号使用相同的网络协议,这种方法也有效。
在简而言之
nodeport:监听nodeip:nodeport上所有工作节点上的外部请求,并将请求转发到port。
ClusterIP:请求来自入口,指向服务名称和端口。
port:容器的内部集群服务端口,监听来自节点端口的传入请求并转发到targetPort。
targetPort:从端口接收请求并转发到它正在侦听的容器吊舱(端口)。即使不指定,默认情况下也会分配与port相同的端口号。
所以流量流入——>服务——>端点(基本上有POD IP)——>POD
targetport: pod中容器侦听的一个或多个端口。
nodeport:主要用于接受使用者请求。(例如:从消费者到运行在容器中的web服务器的HTTP请求)
Nodeport在所有接口上的所有节点上侦听,即0.0.0.0:Nodeport。发送到nodeport的使用者服务请求被路由到容器的targetport,以便容器能够满足该请求。
port: kubernetes pod网络中使用的端口,主要用于在pod之间交换请求。在这里,来自另一个pod的请求也被路由到腐蚀pod的容器targetport。
Summary:所有请求最终都到达targetport。如果请求来自k8s网络外部,则使用Nodeport;如果来自k8s网络内部,则使用port。
我认为形象是最好的描述。
服务是一种抽象,用于将流量重定向到底层pod。 因此:
端口:80——>标识服务正在侦听的端口 targetPort: 8080——>标识部署底层pod的目标端口
对my_service:80的调用将把流量重定向到8080上的底层pod(根据给定的示例)。