0

我们目前正在尝试在 GKE 集群中部署 Kong,目标是将证书管理委托给 Google 的负载均衡器(应在此处进行 SSL 终止)。

我们面临的问题是,所有 Google 的文档都专注于部署一些服务并使用他们独有的负载均衡器,该负载均衡器直接连接到声明的 Ingress。

当前工作的配置(没有Kong)如下:

# values.yml (from Service X inside GKE, using Helm)
...
ingress:
  enabled: true
  hostname: example.com
  annotations:
    kubernetes.io/ingress.class: gce
    kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/ingress.global-static-ip-name: example-static-ip
    ingress.gcp.kubernetes.io/pre-shared-cert: example-cert
...

但是,当我们将 for 更改gcekongingress.class 时,所有其他注释都不会继续工作。这是意料之中的,因为现在 Kong 的代理是负载均衡器,应该是告诉 Google 的 LB 如何生成自己的代理。

根据此文档,将这些注释添加到 Kong 代理服务应该相当简单。

基于这一系列事件:

  • K8s Ingress 创建 Kong 代理服务
  • Kong代理服务生成谷歌的LB

自定义 LB 的配置应该在 Kong 的服务中进行(据我了解):

# values.yml (Kong, using Helm)
...
proxy:
  type: LoadBalancer
  annotations: {} <-- Here
  http:
    ...
  tls:
    ...
...

但是,对于 GCP,根据文档只有几个,并且没有一个具有期望的效果(无法设置要使用的证书,定义要创建的 LB 类型等)

考虑到所有因素,有什么方法可以实现我们的主要目标:

“通过 GKE 内部的 Helm 部署 Kong API 网关,并将 SSL 终止委托给自定义 Google 的 LB。”

4

1 回答 1

1

TL;博士

不幸的是,无法将 Google 托管证书与 Kong Ingress 一起使用。

确切地说,Google Managed Certificates只能GKE用于:

  • 外部 HTTP(S) 负载平衡的入口

正如文档所指出的:

注意:此功能仅适用于 Ingress for External HTTP(S) 负载平衡。

-- Cloud.google.com:Kubernetes Engine:文档:如何:托管证书



解释

根据文档(稍作修改):

当您使用以下类创建 Ingress 对象时:

  • kubernetes.io/ingress.class: gce

GKE Ingress控制器创建一个Google Cloud HTTP(S) 负载均衡器,并根据 Ingress 及其关联服务中的信息对其进行配置。

-- Cloud.google.com:Kubernetes Engine:Ingress:外部和内部流量的入口

使用不同Ingress的控制器,如(nginx-ingress、traefik、kong)需要你使用Servicetype LoadBalancer

在上面使用ServiceGKE自动创建指向您的控制器的外部 TCP/UDP 网络负载均衡器(L4)。Ingress从这一点开始,流量将被重定向到基于Ingress具有适当资源的特定服务ingress.class

小费!

您可以在 Kong 的 helm chart 中看到它使用相同的方式!

  • helm install kong/kong kong-ingress --dry-run --debug

要在客户端和 kong 之间建立安全连接,您需要:

旁注:在这两种方式中,SSL 终止都将在 Ingress 控制器处发生。


回答问题的一部分:

自定义 LB 的配置应该在 Kong 的服务中进行(据我了解):

# values.yml (Kong, using Helm)
...
proxy:
  type: LoadBalancer
  annotations: {} <-- Here
...

但是,对于 GCP,根据文档只有几个,并且没有一个具有期望的效果(无法设置要使用的证书,定义要创建的 LB 类型等)

如前所述Service,type LoadBalancerinGKE将配置 L4 TCP/ UDPLoadBalancer,其设计目的不是负责处理 SSL 流量(SSL 终止)。


其他资源:

于 2020-11-18T16:17:19.087 回答