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有什么区别?
当前回答
这个答案是参考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的混合物,通过不同的端口号使用相同的网络协议,这种方法也有效。
其他回答
我认为形象是最好的描述。
目标器端口说明
# 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的混合物,通过不同的端口号使用相同的网络协议,这种方法也有效。
服务是一种抽象,用于将流量重定向到底层pod。 因此:
端口:80——>标识服务正在侦听的端口 targetPort: 8080——>标识部署底层pod的目标端口
对my_service:80的调用将把流量重定向到8080上的底层pod(根据给定的示例)。
“目标端口”是容器正在运行的端口。
端口:端口将流量从服务重定向到容器。
公开部署
master $ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 31s
master $ kubectl expose deployment nginx --name=nginx-svc --port=8080 --target-port=80
service/nginx-svc exposed
master $ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-svc ClusterIP 10.107.209.151 <none> 8080/TCP 5s
NodePort:服务对外访问的端口。
希望这是答案。