为什么入口服务有地址?该地址有什么用?

时间:2019-10-31 10:36:59

标签: kubernetes kubernetes-ingress nginx-ingress

我使用Ingress Controller在GKE上部署群集

我使用Helm安装以下内容:

  • 已安装 Ingress Controller
  • 已部署的负载均衡器服务(也在GCP上创建负载均衡器)

我还部署了入口对象(配置如下)


然后我观察到以下状态...

入口控制器(通过负载均衡器服务)通过两个端点公开:35.197.XX.XX:80,35.197.XX.XX:443

这两个端点由云负载均衡器公开。 我没问题。

但是,当我执行kubectl get ing ingress-service -o wide时,它会打印出以下信息。

NAME              HOSTS             ADDRESS       PORTS     AGE
ingress-service   k8s.XX.com.tw   34.87.XX.XX   80, 443   5h50m

我真的不在ADDRESS列下使用IP。

我还可以看到Google在我的Ingress配置文件的末尾添加了一些有关我的负载均衡器IP的额外信息。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
   ....(ommitted)
spec:
  rules:
  - host: k8s.XX.com.tw
    http:
      paths:
      - backend:
          serviceName: client-cluster-ip-service
          servicePort: 3000
        path: /?(.*)
      - backend:
          serviceName: server-cluster-ip-service
          servicePort: 5000
        path: /api/?(.*)
  tls:
  - hosts:
    - k8s.XX.com.tw
    secretName: XX-com-tw
status:
  loadBalancer:
    ingress:
    - ip: 34.87.XX.XX

根据Google's doc,此( 34.87.XX.XX )看起来像是外部IP,但我无法使用http://34.87.XX.XX

进行访问

我的问题是,由于我们已经有一个外部IP(35.197.XX.XX)来接收流量,为什么我们需要此地址用于入口服务

是内部还是外部IP地址? 此地址绑定到什么? 该地址的用途是什么?

谁能阐明一些想法?非常感谢!

1 个答案:

答案 0 :(得分:1)

如果您只是看一下文档,您将得到答案。

什么是入口资源:https://kubernetes.io/docs/concepts/services-networking/ingress/#what-is-ingress

因此请遵循以下文档:

  

Ingress公开从群集外部到群集内服务的HTTP和HTTPS路由。流量路由受Ingress资源上定义的规则控制。

为了更精确地描述云提供商,入口将创建一个负载平衡器,以将服务公开给互联网。有关gke特定主题的摘要:https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer

这说明了为什么要为入口使用外部IP。

您现在应该做什么:

  • 如果您不想公开HTTP或/和HTTPS端口,只需删除入口资源,就不要使用它,因此它几乎没有用。
  • 如果您使用的是HTTP / HTTPS资源,请将您的服务类型更改为nodePort,并将负载均衡器的管理留给入口。

我的观点是,在部署入口控制器时,应选择第二个选项,然后将负载均衡器的管理留给它。对于入口控制器的入口,不要仅在nodePort服务的后端定义规则,而是应在每个应用程序的特定入口中定义规则,并由入口控制器进行管理。