【问题标题】:Why is there an ADDRESS for the ingress-service? What's the use of that ADDRESS?为什么入口服务有地址?那个地址有什么用?
【发布时间】:2019-10-31 10:36:59
【问题描述】:

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

我使用Helm 安装以下内容:

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

我还部署了Ingress Object(配置如下)


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

入口控制器通过两个端点暴露(通过负载均衡器服务):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) 来接收流量,为什么我们需要这个地址用于 ingress-service

如果它是内部或外部 IP 地址? 这个地址绑定到什么? 这个地址到底是做什么用的?

谁能解释一下?非常感谢!

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案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,并将负载均衡器的管理留给入口。

    我的意见是,当您部署入口控制器时,您应该选择第二个选项并将负载均衡器的管理留给它。对于 ingress-controller 的 ingress,不要只在 nodePort 服务的后端定义规则,规则应该在每个应用程序的特定 ingress 中定义,并由 ingress-controller 管理。

    【讨论】:

    • 感谢您的快速回复。在这里kubernetes.io/docs/concepts/services-networking/ingress/… 它说:“其中 107.178.254.228 是 Ingress 控制器分配的 IP 以满足这个 Ingress。”但是我仍然不确定这个IP地址是属于云负载均衡还是nginx入口控制器(pod)
    • 我的问题实际上是为什么入口服务有另一个IP(除了云负载均衡器的外部IP)?如果这似乎是一个非常愚蠢的问题,我很抱歉。只是我研究了IP的各个层,例如VM IP,Cluster IP和Pod IP,这似乎有所不同..
    • 所以你的问题有一个错误,你说的是“负载均衡器服务”来展示你的入口控制器......在这种情况下,创建一个新的外部控制器是正常的ip 作为提供者上的 LoadBalancer 服务创建一个 LB...
    • @suren 如果您使用入口控制器,则不需要在 L7 级别定义主机......您可以让控制器完成这项工作,或者不需要使用一个(那不是推荐但它有效)...我说使用“负载均衡器服务”有一个错误...负载均衡器服务是一项服务,它将在谷歌上创建一个 L4 负载均衡器,并提供可用的服务端口。请阅读所有答案...我建议将服务从 LB 更改为 NodePort 以解决问题...如果问题不存在,因为它似乎在问题中,那么有一个错误...
    • 嗨@night-gold,你是说我当前的设置不正确吗?问题是我使用 Helm 在 GKE 上安装了 Ingress,它为我安装了所有东西,如果我从云负载均衡器访问,一切正常。
    猜你喜欢
    • 2020-06-04
    • 2017-11-11
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    相关资源
    最近更新 更多