为什么要进入" servicePort"可以是" port"和" targetPort"服务?

时间:2018-04-14 08:30:53

标签: kubernetes

今天我遇到了对servicePort的误解。

我希望该服务可以与仅指定servicePort: 80的入口相关联,但servicePort: 80servicePort: 8080都有效。

有人可以帮助我了解为什么服务公开了porttargetPort两个端口,而不仅仅是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

1 个答案:

答案 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