You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Kong Ingress Controller 3.0.x多实例部署方案及替代方法

部署多实例Kong Ingress Controller 3.0.x的实现方案

一、直接部署多KIC 3.0.x实例

核心是用独立IngressClass和命名空间隔离实现两个带独立外部IP的LoadBalancer实例,步骤如下:

  • 部署第一个KIC实例:

    1. 用Helm安装时指定专属IngressClass和命名空间,同时设置Service为LoadBalancer:
      helm install kong kong/ingress-controller \
        --namespace kong-1 \
        --create-namespace \
        --set ingressController.ingressClass.name=kong-1 \
        --set service.type=LoadBalancer
      
    2. 等待Service分配外部IP,记下来后续绑定Ingress用。
  • 部署第二个KIC实例:

    1. 创建新命名空间,安装时指定不同的IngressClass,避免资源名冲突:
      helm install kong-2 kong/ingress-controller \
        --namespace kong-2 \
        --create-namespace \
        --set ingressController.ingressClass.name=kong-2 \
        --set service.type=LoadBalancer \
        --set fullnameOverride=kong-2
      
    2. 同样等待这个Service拿到独立的外部IP。
  • 绑定Ingress到对应实例:
    定义Ingress资源时,通过spec.ingressClassName指定对应KIC的类,比如:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: app1-ingress
    spec:
      ingressClassName: kong-1
      rules:
      - host: app1.yourdomain.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app1-service
                port:
                  number: 80
    

    另一个Ingress设置ingressClassName: kong-2,流量就会走对应的KIC实例和外部IP。

二、替代方案:单KIC实例+多LoadBalancer Service

如果不想部署多个KIC,也可以通过给单个KIC绑定多个LoadBalancer Service实现独立IP:

  • 先部署一个标准的KIC实例,然后创建两个独立的LoadBalancer Service,都指向KIC的代理组件:
    第一个Service(对应IP1):

    apiVersion: v1
    kind: Service
    metadata:
      name: kong-proxy-1
      namespace: kong
    spec:
      type: LoadBalancer
      ports:
      - name: proxy
        port: 80
        targetPort: 8000
      - name: proxy-ssl
        port: 443
        targetPort: 8443
      selector:
        app.kubernetes.io/name: ingress-controller
        app.kubernetes.io/component: proxy
    

    第二个Service(对应IP2):

    apiVersion: v1
    kind: Service
    metadata:
      name: kong-proxy-2
      namespace: kong
    spec:
      type: LoadBalancer
      ports:
      - name: proxy
        port: 80
        targetPort: 8000
      - name: proxy-ssl
        port: 443
        targetPort: 8443
      selector:
        app.kubernetes.io/name: ingress-controller
        app.kubernetes.io/component: proxy
    
  • 给Ingress加注解指定对应Service:
    要让Ingress走第一个IP,就在注解里指定Service:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: app1-ingress
      annotations:
        konghq.com/proxy-service: kong/kong-proxy-1
    spec:
      ingressClassName: kong
      rules:
      - host: app1.yourdomain.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app1-service
                port:
                  number: 80
    

    另一个Ingress注解用konghq.com/proxy-service: kong/kong-proxy-2,就能实现不同流量用不同的外部IP。

内容的提问来源于stack exchange,提问作者Richardo Wijaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:30:31