是否可以使用单个 GKE 入口控制器拥有多个入口资源

Is it possible to have multiple ingress resources with a single GKE ingress controller

GKE Ingress documentation 它指出:

When you create an Ingress object, the GKE Ingress controller creates a Google Cloud HTTP(S) Load Balancer and configures it according to the information in the Ingress and its associated Services.

对我来说,似乎我不能有多个 ingress resources 与单个 GCP 入口控制器。相反,GKE 会为每个入口资源创建一个新的入口控制器。

真的如此吗,还是可以在 GKE 中使用单个入口控制器拥有多个入口资源?

我希望有一个 GCP LoadBalancer 作为配置了静态 IP 和 DNS 的入口控制器,然后在集群中有多个应用程序 运行,每个应用程序都在特定于应用程序的主机上注册自己的入口资源 and/or路径规范。

请注意,总体而言,我对 GKE、GCP 和 Kubernetes 非常陌生,所以我可能误解了一些东西。

是的,可以为多个入口资源设置一个入口控制器。

您可以根据路径要求创建多个入口资源,所有入口资源都将由单个入口控制器管理。

还有多个入口控制器选项可用,您也可以使用 Nginx,它将创建一个 LB 并管理路径。

在 Kubernetes 内部,如果您使用 type LoadBalancer 创建服务,它将在 GCP 中创建 new LB 资源 所以请确保你的微服务类型是 ClusterIP 并且你的所有流量都通过 ingress 路径进入 K8s 集群。

当您设置入口控制器时,它将创建一个类型为 LoadBalancer 的服务,您可以在 DNS 服务器中使用该 IP 将子域和路径转发到 K8s 集群。

我认为您实际提出的问题与您所写的略有不同。您想知道多个 Ingress 资源是否可以链接到单个 GCP 负载均衡器,而不是 GKE Ingress 控制器。基于concept of a controller,一个集群中只有一个GKE Ingress controller,负责完成多个资源,提供多个负载均衡器。

所以,直接回答问题(因为我一直在寻找一个直接的答案!):

Combining multiple Ingress resources into a single Google Cloud load balancer is not supported.

来源:https://cloud.google.com/kubernetes-engine/docs/concepts/ingress

伤心。

但是,使用 nginx-ingress 控制器是一种至少可以最小化配置的外部 (GCP) 负载均衡器数量的方法(它只配置一个 TCP 负载均衡器),但是由于负载均衡器用于 TCP 流量,它无法终止 SSL,或为您应用防火墙规则(例如,无法使用 Cloud Armor)。

我知道在 GCP 中使用单个 HTTPS 负载平衡器终止 SSL 并将流量路由到 GKE 中的多个服务的唯一方法是将入口组合到一个资源中,所有路径和证书都在一个地方定义。

(如果有人想出一种方法来使用多个单独的入口资源,我很乐意听到!)