Kubernetes 通过Helm在GKE中部署Kong API网关并使用Google管理的证书

Kubernetes 通过Helm在GKE中部署Kong API网关并使用Google管理的证书,kubernetes,google-cloud-platform,google-kubernetes-engine,kong,google-cloud-load-balancer,Kubernetes,Google Cloud Platform,Google Kubernetes Engine,Kong,Google Cloud Load Balancer,我们目前正在尝试在GKE集群中部署Kong,目标是将证书管理委托给Google的负载平衡器(SSL终止应该在这里进行) 我们面临的问题是,谷歌的所有文档都专注于部署一些服务,并使用其专用的负载平衡器直接连接到入口 当前有效的配置(不含Kong)如下所示: # values.yml (from Service X inside GKE, using Helm) ... ingress: enabled: true hostname: example.com annotations:

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

我们面临的问题是,谷歌的所有文档都专注于部署一些服务,并使用其专用的负载平衡器直接连接到入口

当前有效的配置(不含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
...
但是,当我们将
gce
kong
更改为ingress.class时,所有其他注释都不会继续工作。这是意料之中的,因为现在Kong的代理是负载均衡器,应该是告诉Google的LB如何生成自己的代理

因此,将这些注释添加到代理服务中应该相当简单

根据这一系列事件:

  • K8s入口创建代理服务
  • 香港代理服务产生谷歌的LB
定制LB的配置应在Kong的服务范围内进行(据我所知):

#values.yml(金刚,使用头盔)
...
代理:
类型:负载平衡器
注释:{}TL;DR

不幸的是,无法将谷歌管理的证书与Kong Ingress一起使用。

确切地说,
GKE
中的谷歌托管证书只能与以下内容一起使用

  • 外部HTTP负载平衡入口
正如文件所指出的:

注意:此功能仅适用于用于外部HTTP负载平衡的入口

--



解释 根据文件(稍加修改):

创建具有以下类的入口对象时:

  • kubernetes.io/ingres.class:gce
控制器创建并根据入口及其相关服务中的信息对其进行配置

--

使用不同的
ingres
控制器,如(nginx-ingres、traefik、kong)需要使用
负载平衡器类型的
服务

GKE
中使用上述
服务
将自动创建(L4)指向您的
入口
控制器。从这一点开始,通信量将根据
ingres
资源和相应的
ingres.class
重定向到特定的服务

小费

你可以在金刚的掌舵图上看到,它也在用同样的方法

  • 舵机安装孔/孔孔入口-试运行-调试
要在客户端和kong之间建立安全连接,您需要执行以下操作之一:

  • 使用
    证书管理器
    入口
    控制器提供证书。
  • 以其他方式提供证书,并将其作为机密提供给入口控制器使用。
旁注:在这两种情况下,SSL终止都将发生在入口控制器上


回答问题部分:

定制LB的配置应在Kong的服务范围内进行(据我所知):

#values.yml(金刚,使用头盔)
...
代理:
类型:负载平衡器

注释:{}太好了,谢谢你澄清了很多方面。我想知道的最后一个细节是,当您说“使用以其他方式提供的证书”时,GCP可能是一个选项。然而,正如我们所意识到的,它们都不能被下载,然后作为秘密注入(尽管它们有其他限制)。所以,总而言之,证书应该由其他人颁发,对吗?是的,你是对的。其中一个选项可以是:。我添加了
证书管理器作为可行的解决方案。它可以使用
lets encrypt
设置证书。
# values.yml (Kong, using Helm)
...
proxy:
  type: LoadBalancer
  annotations: {} <-- Here
  http:
    ...
  tls:
    ...
...