我们目前正在尝试在 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 更改gce
为kong
ingress.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。”