如何将 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 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章
Keycloak Kubernetes GKE NGINX Ingress - 重新加载页面时重新启动 pod 后会话丢失并返回 502 Bad Gateway
如何在 GKE 上为 Kubernetes Ingress 强制 SSL
限制 Google HTTPS 使用的 SSL 协议)在 GKE 中使用 Kubernetes Ingress 的负载均衡器