同一Kubernetes集群部署两个独立KongHQ实例的解决方案咨询
多独立Kong实例部署调整方案
核心问题原因
官方提供的默认部署清单包含集群作用域资源,这类资源不归属任何Namespace,仅修改部署时的Namespace参数不会影响这类资源的创建逻辑,重复部署时会出现同名资源冲突,导致部署失败。涉及的集群级资源通常包括:
- CustomResourceDefinition(CRD)
- ClusterRole、ClusterRoleBinding
- ValidatingWebhookConfiguration、MutatingWebhookConfiguration
具体调整步骤
1. 提前部署共享集群级资源
如果所有Kong实例版本一致,集群级资源可全局共享,无需重复部署:
- 下载你使用的官方部署清单到本地,命名为
kong-bundle.yaml - 拆分资源:将清单中所有集群作用域的资源单独提取为
kong-cluster-resources.yaml,剩余命名空间级资源(Deployment、Service、ServiceAccount、Role、RoleBinding、ConfigMap、Secret等)保存为kong-namespaced-resources.yaml - 一次性部署共享集群资源:
kubectl apply -f kong-cluster-resources.yaml
若不同实例需要独立的Webhook配置,需修改对应Webhook资源的名称,添加实例唯一标识前缀/后缀,同时修改Webhook配置中关联的Service信息,指向对应实例专属Namespace内的Kong Admin Service。
2. 适配命名空间级资源配置
每个独立Kong实例需单独配置命名空间级资源,避免互相干扰:
- 为每个实例创建专属Namespace,例如实例1用
kong-inst1,实例2用kong-inst2:
kubectl create namespace kong-inst1 kubectl create namespace kong-inst2
- 针对每个实例修改
kong-namespaced-resources.yaml配置:- 所有资源的
metadata.namespace统一修改为对应实例的专属Namespace - 为每个实例的ClusterRoleBinding设置唯一名称,在subjects部分指定对应Namespace下的ServiceAccount
- 修改Kong Ingress Controller启动参数,添加
--ingress-class参数,每个实例配置唯一的IngressClass值,确保实例仅处理对应类别的Ingress资源 - 若使用带数据库的部署模式,每个实例配置独立的数据库凭证及库名;无DB模式则使用独立的配置ConfigMap
- 所有资源的
3. 分实例部署
调整完成后分别部署每个实例即可:
# 部署实例1 kubectl apply -f kong-namespaced-resources.yaml -n kong-inst1 # 调整完实例2配置后,部署实例2 kubectl apply -f kong-namespaced-resources.yaml -n kong-inst2
额外注意事项
- 若使用LoadBalancer类型暴露Kong代理服务,可配置不同的LoadBalancer IP避免端口冲突;若使用NodePort类型则需为每个实例分配不同的节点端口
- 若需要通过Kong Admin API管理不同实例,注意区分不同Namespace下的Admin Service访问地址
内容的提问来源于stack exchange,提问作者Billy Billy
相关产品推荐
相关产品推荐

