今天我遇到了对servicePort
的误解。
我希望该服务可以与仅指定servicePort: 80
的入口相关联,但servicePort: 80
和servicePort: 8080
都有效。
有人可以帮助我了解为什么服务公开了port
和targetPort
两个端口,而不仅仅是port
?
服务(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
答案 0 :(得分:4)
据我了解,
群集中的每个Pod都有一个端点,即Pod的 IP 和 targetPort 。
您可以使用以下命令列出端点。
kubectl get endpoints
现在,如果您使用服务公开您的广告连播,那么他们有群集IP 和服务端口。
kubectl get services
现在,您可以编写入口规则,通过端点或群集IP 来展示您的pod。但是,只有少数Ingress-Controller可以执行此任务。例如 nginx-ingress-controller 。
为什么要使用端点而不是 cluster-ip或Service ?
NGINX入口控制器不使用服务将流量路由到pod。相反,它使用端点API来绕过kube-proxy以允许NGINX功能,如会话亲和性和自定义负载平衡算法。它还消除了一些开销,例如iptables DNAT的conntrack条目。
以下是进一步研究的链接Why endpoints and not services