今天我遇到了一个关于servicePort
的误解。
我以为服务可以与ingress链接,只指定servicePort: 80
,但是servicePort: 80
和servicePort: 8080
也都可以。
谁能帮助我理解为什么服务同时暴露port
和targetPort
,而不是只有port
?
Service (app)
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
Ingress (ingress-nginx)
spec:
rules:
- host: example.com
http:
paths:
- path: /
backend:
serviceName: app
servicePort: 8080
集群中的每个 Pod 都有一个 endpoint,即 Pod 的 IP 和 targetPort。
service是将流量发送给endpoint。
可以通过以下命令查看:
kubectl get endpoints
ingress 将 service 的 endpoint 配置给内置的 nginx。
最终,port 和 targetPort 都会转换成容器端口,也就是
targetPort
,所以都可以。你的答案