我在一个k8s集群中有两个KONG
实例,分别具有各自的数据库
kong-ingress-controller
,其配置如下:kong-ingress-controller-production
的 Kong生产实例,其配置如下:即使在这种配置模式下,我也可以在同一个端口中同时部署 kongs (沙盒和生产实例),我的意思是8001
,因为每个kong位于不同的pod中机器。
在kong sandbox实例中,我创建了以下kong资源:
basic-auth
和acl
KongPlugins
2个KongConsumer
资源及其各自的KongCredentials
我也已经在kong沙箱中配置了- --ingress-class=kong
参数,并且有一个指向它的Ingress
资源
在kong沙盒环境中,前面提到的所有资源均已创建并存储在其kong数据库中。
在香港生产环境中并非如此。让我们看看...
我也在kong生产环境中创建以下内容:
basic-auth
和acl
KongPlugins
1个KongConsumer
资源及其相应的KongCredential
我也已经在kong生产中配置了- --ingress-class=kong-production
参数,并且有一个指向它的Ingress
资源
发生了什么事?
我的两个kong沙箱和生产实例正在运行并且正在工作,但是
kong sandbox环境数据库正在接管KongConsumers
和KongCredentials
的创建和存储。
这些资源没有存储到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参数,并且每个参数都有这种方式的特定值:
- --ingress-class=kong-production
- --ingress-class=kong
在每个Ingress
资源中,该资源也使用kubernetes.io/ingress.class
注释以这种方式指向每个特定的kong类:
指向kong沙箱的入口---> kubernetes.io/ingress.class: "kong"
指向香港生产的入口---> kubernetes.io/ingress.class: "kong-production"
有人知道这里会发生什么吗?
如何重定向或至少调试此行为? 我一直在检查日志和端口转发操作,以确认两个kong实例的可用性,以及它们中的任何一个都没有击败另一个,例如我们在这张图片中看到的: