全部產品
Search
文件中心

Container Compute Service:通過AlbConfig配置ALB執行個體

更新時間:Sep 06, 2025

ALBConfig是由ALB Ingress Controller提供的CRD資源,ALB Ingress Controller使用ALBConfig來配置ALB執行個體和監聽。本文介紹如何建立、修改、更新ALBConfig以及開啟Log Service等操作。

前提條件

注意事項

  • 推薦優先使用命令kubectl edit直接修改、更新資源的配置。如果必須使用kubectl apply命令來修改、更新資源,請在執行kubectl apply命令之前先執行kubectl diff命令預覽變更點,確保變更符合預期,然後再執行kubectl apply命令將變更應用到Kubernetes叢集。

  • 低版本Nginx Ingress Controller無法識別Ingress資源中的spec.ingressClassName欄位。如果叢集中同時存在Nginx Ingress和ALB Ingress,會存在ALB Ingress被低版本Nginx Ingress Controller幹擾或配置覆蓋的風險。因此,請及時升級Nginx Ingress Controller版本,或通過Annotation註解項指定ALB Ingress對應的ingressClass。具體操作,請參見ALB Ingress服務進階用法

建立ALBConfig

一個ALBConfig對應一個ALB執行個體,但一個ALBConfig可對應多個Ingress,即ALBConfig與Ingress是一對多的對應關係。如需使用多個ALB執行個體,可以通過建立多個ALBConfig實現。建立ALBConfig操作如下。

  1. 建立並拷貝以下內容到alb-test.yaml檔案中,用於建立ALBConfig。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo
    spec:
      config:
        name: alb-test
        addressAllocatedMode: Dynamic          # Dynamic和Fixed可選,通過該參數可指定ALB執行個體的IP模式。
        addressType: Internet
        zoneMappings:                          # 為保障業務高可用,請至少選擇2個或以上不同可用性區域的交換器
        - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 替換為實際的交換器ID(所屬可用性區域1) 
        - vSwitchId: vsw-uf6nun9tql5t8nh15**** # 替換為實際的交換器ID(所屬可用性區域2,必須與前面不同)  
      listeners:
        - port: 80
          protocol: HTTP

    參數

    說明

    spec.config.name

    (可選)表示ALB執行個體的名稱。

    spec.config.addressType

    (必選)表示負載平衡的地址類型。取值如下:

    • Internet(預設值):負載平衡具有公網IP地址,DNS網域名稱被解析到公網IP,因此可以在公網環境下訪問。

    • Intranet:負載平衡只有私網IP地址,DNS網域名稱被解析到私網IP,因此只能被負載平衡所在VPC的內網環境訪問。

    spec.config.zoneMappings

    (必選)用於設定ALB Ingress交換器ID。在多個可用性區域的地區中,至少需要指定兩個不同可用性區域交換器ID。對於只包含單個可用性區域的地區,指定一個交換器ID即可。指定的交換器必須在ALB當前所支援的可用性區域內,且與叢集處於同一VPC。關於ALB Ingress支援的地區與可用性區域,請參見ALB支援的地區與可用性區域

    重要

    不支援更新ALB執行個體的地址類型及可用性區域。即ALBConfig中的addressTypezoneMappings參數僅在建立ALBConfig時生效,不支援更新。

    spec.config.addressAllocatedMode

    (可選)在ALBConfig中,可以通過addressAllocatedMode參數指定ALB執行個體IP模式。取值:

    • Dynamic:動態IP模式。

    • Fixed:固定IP模式。

    為叢集安裝ALB Ingress Controller組件時,系統將會預設建立ALBConfig。配置參數除vSwitchId外,其他參數將會按照以下的預設配置建立。

    展開查看ALBConfig的預設配置

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-demo                      # AlbConfig名稱
    spec:
      config:
        accessLogConfig:
          logProject: ""
          logStore: ""
        addressAllocatedMode: Dynamic # 在AlbConfig中,可以通過addressAllocatedMode參數指定ALB執行個體IP模式,可取值為Dynamic(動態IP模式)和Fixed(固定IP模式)
        addressType: Internet
        billingConfig:
          internetBandwidth: 0
          internetChargeType: ""
          payType: PostPay
        deletionProtectionEnabled: true
        edition: Standard
        forceOverride: false
        zoneMappings:                                 # 為保障業務高可用,請至少選擇2個或以上不同可用性區域的交換器
        - vSwitchId: vsw-wz92lvykqj1siwvif****        # 替換為實際的交換器ID(所屬可用性區域1)
        - vSwitchId: vsw-wz9mnucx78c7i6iog****        # 替換為實際的交換器ID(所屬可用性區域2,必須與前面不同)
    status:
      loadBalancer:
        dnsname: alb-s2em8fr9debkg5****.cn-shenzhen.alb.aliyuncs.com
        id: alb-s2em8fr9debkg5****
  2. 執行以下命令,建立ALBConfig。

    kubectl apply -f alb-test.yaml

    預期輸出:

    albconfig.alibabacloud.com/alb-demo created
  3. 執行以下命令,查看ALBConfig名稱。

    kubectl -n kube-system get AlbConfig

    預期輸出:

    NAME       ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID                 AGE
    alb-demo   alb-******   alb-******.<regionID>.alb.aliyuncs.com   443/HTTPS       11055487-cn-<regionID>  2d

更新ALBConfig

在Kubernetes中,kubectl apply命令的語義為覆蓋式更新;kubectl edit命令的語義為在之前對象的基礎上進行累加式更新。已經通過ALBConfig建立的ALB執行個體,更改執行個體配置時推薦使用kubectl edit命令進行增量式更新。更新ALBConfig操作如下。

  1. 執行以下命令,查看ALBConfig名稱。

    kubectl -n kube-system get AlbConfig

    預期輸出:

    NAME       ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID                 AGE
    alb-demo   alb-******   alb-******.<regionID>.alb.aliyuncs.com   443/HTTPS       11055487-cn-<regionID>  2d
  2. 執行如下命令,更新對應的ALBConfig。

    重要
    • 優先推薦使用kubectl edit命令直接更新資源的配置。如果必須使用kubectl apply命令來更新資源,請在執行kubectl apply命令之前先執行kubectl diff命令預覽變更點,確保變更符合預期,然後再使用kubectl apply命令將變更應用到Kubernetes叢集。

    • 通過kubectl apply命令對ALBConfig進行覆蓋式更新時,如果對應ALBConfig的YAML檔案中沒有listeners相關配置,不會對存量監聽產生影響;如果有監聽配置,會按照當前配置調諧監聽,因此需要將使用到的全量監聽列表寫全,例如80和443等常見監聽。

    kubectl -n kube-system edit AlbConfig alb-demo

    在ALBConfig設定檔中,更新相關內容。例如,將ALBConfig的名稱更新為test

    ...
     spec:
       config:
         name: test # 輸入更新後的名稱。
    ...

使用IngressClass關聯ALBConfig與Ingress

ALBConfig通過Kubernetes中標準的IngressClass資源與Ingress進行關聯。需要先建立IngressClass,然後關聯ALBConfig。

  1. 建立並拷貝以下內容到alb.yaml檔案中,用於建立IngressClass。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-demo
  2. 執行以下命令,建立IngressClass。

    kubectl apply -f alb.yaml

    預期輸出:

    ingressclass.networking.k8s.io/alb created
  3. 建立並拷貝以下內容到ingress.yaml檔案中。通過ingressClassName參數指定名稱為alb的IngressClass關聯ALBConfig。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress 
    spec:
      ingressClassName: alb
      rules:
      - http:
          paths:
          # 配置Context Path。
          - path: /tea
            pathType: ImplementationSpecific
            backend:
              service:
                name: tea-svc
                port:
                  number: 80
          # 配置Context Path。
          - path: /coffee
            pathType: ImplementationSpecific
            backend:
              service:
                name: coffee-svc
                port: 
                  number: 80
  4. 執行以下命令,建立Ingress

    kubectl apply -f ingress.yaml

    預期輸出:

    ingress.networking.k8s.io/cafe-ingress created

完成上述步驟,就可以使用IngressClass關聯ALBConfig與Ingress。

修改ALB執行個體的名稱

執行以下命令,可修改ALB執行個體的名稱。

kubectl -n kube-system edit AlbConfig alb-demo

在設定檔中修改config.name的值,儲存之後,新名稱自動生效。

...
  spec:
    config:
      name: test   # 輸入修改後的名稱。
...

使用IPv6地址

在建立ALB執行個體時,通過ALBConfig中addressIpVersion欄位指定DualStack即可開啟IPv6支援。

重要

addressIpVersion欄位僅在建立執行個體階段生效,後續不能修改。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
    addressIpVersion: DualStack
    ...

指定TLS安全性原則

當前ALBConfig配置HTTPS監聽時,支援指定TLS安全性原則。TLS安全性原則包含自訂策略和系統預設策略,更多資訊,請參見TLS安全性原則

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
    #...
  listeners:
  - port: 443
    protocol: HTTPS
    securityPolicyId: tls_cipher_policy_1_1
  #...

開啟Log Service訪問日誌

如果希望ALB Ingress能夠收集訪問日誌Access Log,可以在ALBConfig中指定logProjectlogStore

說明
  • logProject需要手動建立,不支援自動建立。建立logProject的具體操作,請參見管理Project

  • logStore命名需要以alb_開頭,若指定logStore不存在,系統則會自動建立。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
    accessLogConfig:
      logProject: "k8s-log-xz92lvykqj1siwvif****"
      logStore: "alb_****"
    #...

儲存命令之後,可以在Log Service控制台單擊目標LogStore,查看收集的訪問日誌。

複用已有ALB執行個體

如果希望複用已有ALB執行個體,需要在建立ALBConfig時指定ALB執行個體ID,且已有的ALB執行個體必須是通過應用型負載平衡ALB控制台建立的標準版或WAF增強版執行個體。不支援複用基礎版ALB執行個體。同一執行個體僅支援被一個叢集複用,不支援多個叢集複用同一ALB執行個體。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: reuse-alb
spec:
  config:
    id: **** # 通過ALB控制台建立的標準版或WAF增強版ALB執行個體ID。
    forceOverride: false
    listenerForceOverride: false

參數說明如下:

參數

說明

id

  • 若沒有id欄位或id欄位為空白,表示ALB執行個體為非複用情境。此時,forceOverride欄位與listenerForceOverride欄位均不生效。

  • id欄位為有效值時,表示ALB執行個體為複用模式。

重要

在複用模式下,不建議手動修改監聽名稱,以免錯誤地將監聽置於或脫離ACS的管理。由ALBConfig建立或更新的監聽由ACS管理,且監聽名稱的預設格式為ingress-auto-listener-{port};其他格式的監聽名稱由ALB控制台管理。

forceOverride

表示複用模式下是否強制覆蓋ALB執行個體屬性。

  • true表示強制覆蓋,表示使用本次提交的AlbConfig配置完全替換ALB執行個體原有的配置及監聽配置

  • false表示不覆蓋。表示不會強制覆蓋ALB執行個體屬性,且根據listenerForceOverride欄位決定是否強制覆蓋監聽屬性。

listenerForceOverride

表示複用模式下是否強制覆蓋監聽屬性。

  • true表示強制覆蓋。ALB Ingress Controller會管理ALB執行個體的所有監聽。監聽是否存在及具體配置將以AlbConfig配置為準。

  • false表示不覆蓋。ALB Ingress Controller僅管理由叢集中AlbConfig配置建立出的監聽,監聽名稱的預設格式為ingress-auto-listener-{port},且監聽具體配置以叢集中AlbConfig配置為準。其他監聽是否存在及具體配置不由AlbConfig管理。

建立監聽

在複用情境中,通過修改ALBConfig來新增監聽或編輯現有監聽的設定。執行命令kubectl edit albconfig <Albconfig_Name>,在ALBConfig中設定portprotocol即可建立對應的監聽器。portprotocol是監聽的唯一屬性。一旦修改了portprotocol以及其他監聽的屬性,系統將會刪除原有的監聽,然後建立一個新的監聽來替代它。

說明

HTTP協議自動相容WebSocket,不需要特殊設定。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
    - port: 80
      protocol: HTTP # protocol的可選項為HTTP、HTTPS、QUIC。
  ...

建立並使用多個ALB執行個體

如果希望使用多個ALB執行個體,在Ingress中通過spec.ingressClassName指定不同的IngressClass即可。

  1. 建立並拷貝以下內容到alb-demo2.yaml檔案中,用於建立ALBConfig。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: demo
    spec:
      config:
        name: alb-demo2                        # ALB執行個體名稱。
        addressType: Internet                  # 負載平衡具有公網IP地址。
        zoneMappings:                          # 為保障業務高可用,請至少選擇2個或以上不同可用性區域的交換器
        - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 替換為實際的交換器ID(所屬可用性區域1)
        - vSwitchId: vsw-uf6nun9tql5t8nh15**** # 替換為實際的交換器ID(所屬可用性區域2,必須與前面不同)
  2. 執行以下命令,建立ALBConfig。

    kubectl apply -f alb-demo2.yaml

    預期輸出:

    AlbConfig.alibabacloud.com/demo created
  3. 建立並拷貝以下內容到alb.yaml檔案中,用於建立IngressClass。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb-demo2
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: demo
  4. 執行以下命令,建立IngressClass。

    kubectl apply -f alb.yaml

    預期輸出:

    ingressclass.networking.k8s.io/alb-demo2 created
  5. 建立並拷貝以下內容到ingress.yaml檔案中。通過ingressClassName參數指定不同的ALB執行個體。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo
      namespace: default
    spec:
      ingressClassName: alb-demo2
      rules:
        - host: ""
          http:
            paths:
              - backend:
                 service:
                  name: demo-service
                  port:
                    number: 80
                path: /hello
                pathType: ImplementationSpecific

設定監聽串連請求逾時時間

在ALBConfig中可以指定監聽,設定串連請求逾時時間(單位為秒,取值範圍為[1,180])。若在逾時時間內後端伺服器一直沒有響應,負載平衡將放棄等待,給用戶端返回HTTP 504錯誤碼。如果不指定串連請求逾時時間,則預設為60秒。YAML樣本如下。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    requestTimeout: 60
  ...

使用資料壓縮功能

在ALBConfig中,可以指定監聽,設定資料壓縮是否開啟。gzipEnabled取值如下:

  • true:對特定檔案類型進行壓縮。

  • false:不會對任何檔案類型進行壓縮。

說明

目前Brotli支援壓縮所有類型,Gzip支援壓縮的類型包括text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss + xml、application/atom + xml、application/xml和application/json。

關閉資料壓縮的YAML樣本如下:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    gzipEnabled: false
  ...

擷取來訪者真實IP

在ALBConfig中可以通過X-Forwarded-For頭欄位擷取來訪者的真實IP。XForwardedForEnabled的取值如下:

  • true:擷取來訪者的真實IP。

  • false:不擷取來訪者的真實IP。

說明

僅HTTP和HTTPS監聽支援配置此參數。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    #...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForEnabled: true
  #...

擷取執行個體的監聽協議

在ALBConfig中可以通過XForwardedForProtoEnabled欄位擷取執行個體的監聽協議。取值如下:

  • true:擷取執行個體的監聽協議。

  • false:不擷取執行個體的監聽協議。

說明

僅HTTP和HTTPS監聽支援配置此參數。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForProtoEnabled: true
  ...

擷取Server Load Balancer執行個體的ID

在ALBConfig中可以通過SLB-ID頭欄位擷取Server Load Balancer執行個體的ID。XForwardedForSLBIdEnabled取值如下:

  • true:擷取Server Load Balancer執行個體的ID。

  • false:不擷取Server Load Balancer執行個體的ID。

說明

僅HTTP和HTTPS監聽支援配置此參數。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForSLBIdEnabled: true
  ...

擷取執行個體的監聽連接埠

在ALBConfig中可以通過X-Forwarded-Port頭欄位擷取執行個體的監聽連接埠。XForwardedForSLBPortEnabled取值如下:

  • true:擷取執行個體的監聽連接埠。

  • false:不擷取執行個體的監聽連接埠。

說明

僅HTTP和HTTPS監聽支援配置此參數。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForSLBPortEnabled: true
  ...

擷取Server Load Balancer執行個體用戶端的連接埠

在ALBConfig中可以通過X-Forwarded-Client-srcport頭欄位擷取Server Load Balancer執行個體用戶端的連接埠。XForwardedForClientSrcPortEnabled取值如下:

  • true:擷取Server Load Balancer執行個體用戶端的連接埠。

  • false:不擷取Server Load Balancer執行個體用戶端的連接埠。

說明

僅HTTP和HTTPS監聽支援配置此參數。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForClientSrcPortEnabled: true
  ...

設定ACL存取控制

通過ALBConfig可以為ALB監聽啟用存取控制功能,通過設定入方向的允許或拒絕規則,對用戶端請求精確控制,管理請求轉寄。關於ACL的更多資訊,請參見存取控制

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: default
spec:
  config:
   #...
  listeners:
  - port: 80
    protocol: HTTPS
    aclConfig:
      aclEntries:
      - 127.0.0.1/32
      aclType: White
  #...

部分參數說明如下:

  • aclType:用於設定監聽的ACL為黑名單或白名單。取值為BlackWhite,分別表示黑名單和白名單。

  • aclEntries:用於設定存取控制條目IP位址區段,例如127.0.0.1/32

刪除ALB執行個體

一個ALB執行個體對應一個ALBConfig, 因此可以通過刪除ALBConfig實現刪除ALB執行個體,但前提是先需要刪除ALBConfig關聯的所有Ingress。

kubectl delete -n kube-system AlbConfig alb-demo

alb-demo可以替換為實際需要刪除的ALBConfig。

刪除複用ALB執行個體的ALBConfig

如果希望刪除複用ALB執行個體的ALBConfig,請按照以下操作步驟操作。

  1. 刪除該ALBConfig關聯的所有Ingress。

    kubectl delete -n <NAMESPACE> ingress <INGRESS_NAME>  # 將<INGRESS_NAME>和<NAMESPACE>替換為要刪除的Ingress的名稱和命名空間。
  2. 使用kubectl edit命令修改ALBConfig,刪除此ALBConfig的所有監聽,即刪除spec.listeners欄位下的所有條目。

    重要

    若叢集中安裝的ALB Ingress Controller組件版本為v2.10.0-aliyun.1及以前版本,請執行該操作。否則,請跳過該步驟。

  3. 刪除ALBConfig。

    kubectl -n kube-system delete AlbConfig alb-demo # 請將alb-demo替換為實際需要刪除的AlbConfig。