如何将 GKE Ingress 与 Nginx Ingress 一起使用?

Posted

技术标签:

【中文标题】如何将 GKE Ingress 与 Nginx Ingress 一起使用?【英文标题】:How to use GKE Ingress along with Nginx Ingress? 【发布时间】:2019-12-18 18:22:13 【问题描述】:

GKE 入口:https://cloud.google.com/kubernetes-engine/docs/concepts/ingress

nginx 入口:https://kubernetes.github.io/ingress-nginx/

为什么选择 GKE Ingress

GKE Ingress 可以与 Google 的托管 SSL 证书一起使用。这些证书部署在负载均衡器的边缘服务器中,导致 TTFB(第一个字节的时间)非常低

GKE Ingress 出了什么问题

HTTP/域路由是在负载均衡器中使用非常昂贵的“转发规则”完成的。每条规则的成本约为 7.2 美元。每个域都需要一个规则。

为什么选择 Nginx 入口

Nginx Ingress 还创建(TCP/UP)负载平衡器,我们可以在其中使用入口控制器指定 HTTP/域的路由。由于路由是在集群内部完成的,因此将域添加到规则中不会产生额外成本

Nginx Ingress 出了什么问题

要启用 SSL,我们可以使用 cert-manager。但正如我上面提到的,Google 的托管证书将证书部署在边缘服务器中,从而导致非常低的延迟

我的问题

可以同时使用吗?这样 HTTPS 请求首先到达 GKE 入口,这将终止 SSL 并将流量路由到 Nginx 入口,然后将其路由到相应的 pod

【问题讨论】:

您可以使用multiple ingress controllers。也许您可以部署core nginx deployment and other components,然后将其公开为NodePort 服务而不是LoadBalancer 服务,修改this,然后为该服务创建一个其类对应于GKE 的Ingress。然后应该使用 nginx 类创建所有其他 Ingress... ...虽然没试过,很好奇是否可行。 【参考方案1】:

无法将Ingress 指向另一个Ingress。此外,在您的特定情况下,也无法将GCE ingress class 指向 Nginx,因为它 relies in an HTTP(S) Load Balancer,它只能有 GCE 实例/instances groups(基本上是 GKE 中的节点池),或者 GCS buckets 作为@ 987654324@.

如果您要使用 GKE 部署 Nginx 入口,它将启动 Network Load Balancer,这不是 HTTP(S) 负载均衡器的有效后端。

因此,无论是通过 Ingress 还是 GCP 基础架构功能都无法实现。但是,如果您需要先点击 GCE ingress class,然后使用 Nginx 管理进一步的路由,您可能需要考虑将 Nginx 作为 Kubernetes Service/Deployment 来管理集群内的传入流量网络。

您可以创建一个ClusterIP 服务以在内部访问您的 Nginx 部署,并从那里使用 cluster-local hostnames 重定向到集群中的其他服务/应用程序。

【讨论】:

以上是关于如何将 GKE Ingress 与 Nginx Ingress 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GKE 中通过入口启用 Cors

Keycloak Kubernetes GKE NGINX Ingress - 重新加载页面时重新启动 pod 后会话丢失并返回 502 Bad Gateway

如何在GKE上配置Ingress请求超时

如何在 GKE 上为 Kubernetes Ingress 强制 SSL

谷歌端点 + GKE + GRPC

限制 Google HTTPS 使用的 SSL 协议)在 GKE 中使用 Kubernetes Ingress 的负载均衡器