管理多个kong实例-在其各自的数据库上创建kong资源

时间:2019-05-09 15:32:12

标签: kubernetes basic-authentication kubernetes-ingress kong kong-plugin

我在一个k8s集群中有两个KONG实例,分别具有各自的数据库

  • Kong沙箱实例被命名为kong-ingress-controller,其配置如下:

enter image description here

  • 我还有一个名为kong-ingress-controller-production Kong生产实例,其配置如下:

enter image description here

即使在这种配置模式下,我也可以在同一个端口中同时部署 kongs (沙盒和生产实例),我的意思是8001,因为每个kong位于不同的pod中机器。

在kong sandbox实例中,我创建了以下kong资源:

  • basic-authacl KongPlugins

  • 2个KongConsumer资源及其各自的KongCredentials

  • 我也已经在kong沙箱中配置了- --ingress-class=kong参数,并且有一个指向它的Ingress资源

在kong沙盒环境中,前面提到的所有资源均已创建并存储在其kong数据库中。

在香港生产环境中并非如此。让我们看看...

我也在kong生产环境中创建以下内容:

  • basic-authacl KongPlugins

  • 1个KongConsumer资源及其相应的KongCredential

  • 我也已经在kong生产中配置了- --ingress-class=kong-production参数,并且有一个指向它的Ingress资源

发生了什么事?

我的两个kong沙箱和生产实例正在运行并且正在工作,但是 kong sandbox环境数据库正在接管KongConsumersKongCredentials的创建和存储。

这些资源没有存储到kong生产数据库中,凭据,使用者,基本身份验证和ACL插件存储在沙箱数据库中...

只有KongPlugins被存储在kong生产数据库中。

这种情况看起来像是在某个时候越过了不同的kong连接,或者至少kong sandbox环境正在侦听并将请求发送到kong生产环境。

我要说的一个测试或证据是,即使Kong生产控制器环境也忽略了Kongconsumer及其KongCredential的创建。这是与此确认相关的日志

I0509 14:23:21.759720       6 kong.go:113] syncing global plugins
I0509 14:29:57.353944       6 store.go:371] ingress rule without annotations
I0509 14:29:57.353963       6 store.go:373] ignoring add event for plugin swaggerapi-production-basic-auth based on annotation kubernetes.io/ingress.class with value 
I0509 14:29:57.395732       6 store.go:371] ingress rule without annotations
I0509 14:29:57.395756       6 store.go:373] ignoring add event for plugin swaggerapi-production-acl based on annotation kubernetes.io/ingress.class with value 
I0509 14:29:57.438604       6 store.go:439] ignoring add event for consumer zcrm365dev-consumer based on annotation kubernetes.io/ingress.class with value 
I0509 14:29:57.487996       6 store.go:505] ignoring add event for credential zcrm365dev-credential based on annotation kubernetes.io/ingress.class with value 
I0509 14:29:57.529698       6 store.go:505] ignoring add event for credential zcrm365-prod-acl-credential based on annotation kubernetes.io/ingress.class with value 

这很奇怪,因为我在每个Kong部署中都指定了--ingress-class参数,并且每个参数都有这种方式的特定值:

  • kong生产环境-> - --ingress-class=kong-production
  • kong沙盒环境-> - --ingress-class=kong

在每个Ingress资源中,该资源也使用kubernetes.io/ingress.class注释以这种方式指向每个特定的kong类:

  • 指向kong沙箱的入口---> kubernetes.io/ingress.class: "kong"

  • 指向香港生产的入口---> kubernetes.io/ingress.class: "kong-production"

有人知道这里会发生什么吗?

如何重定向或至少调试此行为? 我一直在检查日志和端口转发操作,以确认两个kong实例的可用性,以及它们中的任何一个都没有击败另一个,例如我们在这张图片中看到的:

enter image description here

0 个答案:

没有答案