全部產品
Search
文件中心

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

更新時間:Nov 13, 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叢集。

  • 如果您使用的是Flannel網路外掛程式,則ALB Ingress後端Service服務僅支援NodePort和LoadBalancer類型。

建立AlbConfig

一個AlbConfig對應一個ALB執行個體,如果您需要使用多個ALB執行個體,可以通過建立多個AlbConfig實現。建立AlbConfig操作如下。

重要

如果您在安裝ALB Ingress Controller組件時,為ALB雲原生網關執行個體來源選擇了建立使用已有選項,Controller會自動建立一個名為“alb”的AlbConfig和名為“alb”的IngressClass資源。

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

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        name: alb
        addressType: Internet
        zoneMappings:               
        - vSwitchId: vsw-uf6ccg2a9g71hx8go****  # 替換為叢集所在VPC中至少兩個處於不同可用性區域的虛擬交換器ID。
          allocationId: eip-asdfas****          # 替換為您的EIP ID,預設選項為自動分配公網IP。
        - vSwitchId: vsw-uf6nun9tql5t8nh15****  # 替換為叢集所在VPC中至少兩個處於不同可用性區域的虛擬交換器ID。
          allocationId: eip-dpfmss****          # 替換為您的EIP ID。
      listeners:
        - port: 80
          protocol: HTTP

    參數

    說明

    spec.config.name

    表示ALB執行個體的名稱。

    spec.config.addressType

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

    • Internet(預設值):ALB執行個體會擁有公網IP地址,DNS網域名稱被解析到公網IP,因此可以在公網環境下訪問。

    • Intranet:ALB執行個體將只擁有私網IP地址,DNS網域名稱被解析到私網IP,因此只能在其所在的VPC內被訪問。

    重要

    addressType參數僅在建立ALB執行個體時被解析,後續更新ALB執行個體不產生效果。

    spec.config.zoneMappings

    • vSwitchId:用於設定ALB Ingress使用的虛擬交換器ID。

      • 指定至少兩個不同可用性區域的交換器ID,且必須在ALB支援的可用性區域內。關於支援的可用性區域請參見ALB支援的地區與可用性區域

      • 交換器與叢集處於同一VPC。

      重要
      • 單個可用性區域的地區,只需指定一個交換器ID即可。

      • zoneMappings參數僅在建立ALB執行個體時被解析,後續更新ALB執行個體不產生效果。

    • allocationId:可以在zoneMappings中指定建立ALB公網執行個體所依賴的EIP ID。

      • 不指定EIP ID:保持預設選項自動分配公網IP,系統將幫您自動建立隨用隨付的BGP多線預設安全防護EIP,並綁定至ALB執行個體。計費詳情請參見ALB計費概述

      • 指定已有的EIP ID:可以指定已建立的EIP並綁定至新購的ALB執行個體上。

      重要
      • 僅可綁定暫未加入共用頻寬的隨用隨付(按使用流量計費)的已購EIP。

      • 同一個ALB執行個體不同可用性區域分配的EIP類型需保持一致。

    為叢集安裝ALB Ingress Controller組件時,可以選擇建立預設的AlbConfig。AlbConfig的配置參數除vSwitchID外,其他參數將會按照以下的預設配置建立。

    展開查看AlbConfig的預設配置

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # 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:
        - vSwitchId: #...
        - vSwitchId: #...
    status:
      loadBalancer:
        dnsname: alb-s2em8fr9debkg5****.cn-shenzhen.alb.aliyuncs.com
        id: alb-s2em8fr9debkg5****
  2. 執行以下命令,建立AlbConfig。

    kubectl apply -f alb.yaml

    預期輸出:

    AlbConfig.alibabacloud.com/alb created
  3. 執行以下命令,查看AlbConfig資源。

    kubectl get AlbConfig

    預期輸出:

    NAME   ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID   AGE
    alb    alb-******   alb-******.<regionID>.alb.aliyuncs.com                            28m
    說明

    建立HTTPS監聽並為其配置認證後,PORT&PROTOCOLCERTID中才會顯示內容,內容為空白是正常現象。

複用已有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執行個體為複用情境。

    • forceOverride欄位為true,將強制覆蓋ALB執行個體屬性及監聽屬性。使用本次提交的AlbConfig配置完全替換ALB執行個體和監聽配置。

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

      • listenerForceOverride欄位為false:表示不覆蓋。ALB Ingress Controller 只管理由叢集內 AlbConfig 配置自動建立的監聽,這些監聽的預設命名格式為 ingress-auto-listener-{port},且監聽具體配置以AlbConfig配置為準。對於其他自建監聽,其是否存在與具體配置不由AlbConfig管理。

      • listenerForceOverride欄位為true:ALB Ingress Controller會管理ALB執行個體的所有監聽。其監聽是否存在與具體配置將以AlbConfig配置為準。

重要

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

forceOverride

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

  • true表示強制覆蓋。

  • false表示不覆蓋。不覆蓋情境下編輯AlbConfig將不改變ALB執行個體屬性。

listenerForceOverride

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

  • true表示強制覆蓋。

  • false表示不覆蓋。

共用頻寬包配置

開啟此功能後,通過AlbConfig可以為ALB執行個體綁定共用頻寬包。

說明

僅在ALB執行個體網路類型為公網時生效。關於如何購買共用頻寬,請參見建立與管理共用頻寬

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    name: alb
    addressType: Internet
    edition: Standard
    zoneMappings:
    - vSwitchId: vsw-2vcqeyvwsnd***
    - vSwitchId: vsw-2vcbhjlqu7y***
    billingConfig:
      bandWidthPackageId: cbwp-2vcjucp49otd8qolhm***  # 共用頻寬包ID。

更新AlbConfig

對於已經通過AlbConfig建立的ALB執行個體,更改執行個體配置時推薦使用kubectl edit命令進行更新。更新AlbConfig操作如下。

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

    kubectl get AlbConfig

    預期輸出:

    NAME       ALBID        DNSNAME                                  PORT&PROTOCOL   CERTID   AGE
    alb        alb-******   alb-******.<regionID>.alb.aliyuncs.com                            28m
  2. 執行以下命令編輯AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱

    在AlbConfig設定檔中,更新AlbConfig的相關內容。例如,修改spec.config.name欄位的參數,將ALB執行個體的名稱修改為new_alb

    ...
     spec:
       config:
         name: new_alb # 更新後的名稱。
    ...

使用IngressClass關聯AlbConfig與Ingress

ALB Ingress使用Kubernetes原生的IngressClass資源確定AlbConfig與Ingress的關聯。通過在 IngressClass 資源中設定指定參數來實現的。

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

    1.19及之後版本叢集

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb # IngressClass關聯的AlbConfig的名稱

    1.19版本之前叢集

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

    kubectl apply -f ingress_class.yaml

    預期輸出:

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

    1.19及之後版本叢集

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress 
    spec:
      ingressClassName: alb # Ingress關聯的IngressClass的名稱
      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

    1.19版本之前叢集

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

    kubectl apply -f ingress.yaml

    預期輸出:

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

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

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

如果您希望同時使用多個ALB執行個體,在Ingress資源中通過spec.ingressClassName指定不同的IngressClass,即可將Ingress關聯到不同的ALB執行個體。

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

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb-2
    spec:
      config:
        name: alb-2        # ALB執行個體名稱。
        addressType: Internet  # 負載平衡具有公網IP地址。
        zoneMappings:
        - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 虛擬交換器的ID
        - vSwitchId: vsw-uf6nun9tql5t8nh15****
  2. 執行以下命令,建立AlbConfig。

    kubectl apply -f alb-2.yaml

    預期輸出:

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

    1.19及之後版本叢集

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: alb-2
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-2 # IngressClass關聯的AlbConfig的名稱

    1.19版本之前叢集

    apiVersion: networking.k8s.io/v1beta1
    kind: IngressClass
    metadata:
      name: alb-2
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb-2 # IngressClass關聯的AlbConfig的名稱
  4. 執行以下命令,建立IngressClass。

    kubectl apply -f ingress_class2.yaml

    預期輸出:

    ingressclass.networking.k8s.io/alb-2 created
  5. 建立並拷貝以下內容到ingress2.yaml檔案中。通過ingressClassName參數指定不同的ALB執行個體。下方的樣本中,就通過在ingressClassName欄位中填入alb-2,將Ingress關聯到了名為alb-2的IngressClass,以及這個IngressClass所關聯的,名為alb-2的ALB執行個體。

    1.19及之後版本叢集

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cafe-ingress2
    spec:
      ingressClassName: alb-2
      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

    1.19版本之前叢集

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: cafe-ingress2
    spec:
      ingressClassName: alb-2
      rules:
      - http:
          paths:
          # 配置Context Path。
          - path: /tea
            backend:
              serviceName: tea-svc
              servicePort: 80
          # 配置Context Path。
          - path: /coffee
            backend:
              serviceName: coffee-svc
              servicePort: 80
  6. 執行以下命令,建立Ingress。

    kubectl apply -f ingress2.yaml

    預期輸出:

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

使用IPv6地址

在建立ALB執行個體時,通過在addressIpVersion欄位中填入DualStack即可開啟雙棧,同時支援IPv4與IPv6。

重要

addressIpVersion參數僅在建立AlbConfig時被解析,後續更新AlbConfig不產生效果。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    addressIpVersion: DualStack # 開啟雙棧
    ...

指定TLS安全性原則

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

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    #...
  listeners:
  - port: 443
    protocol: HTTPS
    securityPolicyId: tls_cipher_policy_1_1 # 指定的安全性原則ID
  #...

開啟Log Service訪問日誌

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

說明
  • 建立叢集時,您選擇了自動建立或使用已有Log ServiceProject。您可登入Container Service管理主控台,在左側導覽列選擇叢集列表叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊然後,在基本資料頁簽,查看叢集關聯的Log Service Project

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

  • 複用已有的ALB執行個體時,通過AlbConfig啟用Log Service,需要將forceOverride欄位設為true,以強制覆蓋ALB執行個體屬性。詳情請參見複用已有ALB執行個體

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

您可以在基本資料頁簽單擊Log Service Project右側的名稱,查看收集的訪問日誌。

刪除AlbConfig

一個AlbConfig對應一個ALB執行個體, 因此,如果ALB執行個體使用AlbConfig建立,則可以通過刪除AlbConfig實現刪除ALB執行個體。

重要

刪除AlbConfig前,請刪除其關聯的所有Ingress資源。

執行以下命令,刪除AlbConfig。

kubectl delete AlbConfig <AlbConfig_NAME> # <AlbConfig_NAME>替換AlbConfig的名稱

刪除複用ALB執行個體的AlbConfig

在建立AlbConfig時如果選擇複用已有ALB執行個體,因為執行個體並非通過AlbConfig建立,刪除AlbConfig並不會刪除ALB執行個體。如果您希望刪除複用ALB執行個體的AlbConfig,請按照以下操作步驟操作。

  1. 使用kubectl edit命令修改AlbConfig,刪除此AlbConfig的所有監聽,即刪除spec.listeners欄位下的所有條目。

    重要

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

  2. 執行以下命令,刪除AlbConfig。

    重要

    刪除AlbConfig前,請刪除其關聯的所有Ingress資源。

    kubectl delete AlbConfig <AlbConfig_NAME> # <AlbConfig_NAME>替換AlbConfig的名稱

更新Listeners欄位

名詞解釋

  • 對象設定檔:用於定義和描述Kubernetes對象的檔案,其中包含了對象的規範和配置資訊。

  • 現有對象設定檔:已經應用到Kubernetes叢集中的對象設定檔。

  • last-applied-configuration欄位:Kubernetes對象中的註解欄位,用於記錄對象最後一次的配置資訊。它不會隨著對象配置的變化而即時更新。

Listeners欄位更新方式

Listeners欄位屬於數群組類型的配置,一般採用替換方式進行配置更新。當您更新Listeners欄位時,新的配置內容會完全替換現有的配置內容。詳情見下表:

序號

條件

結果

對象是否在對象設定檔中

對象是否在現有對象設定檔中

對象是否在last-applied-configuration欄位中

-(無需關注)

將對象設定檔中的值應用於現有設定檔,來更新現有對象的特定欄位。

-(無需關注)

使用對象設定檔中的值來建立一個新的對象,而不是更新現有對象的配置。

-(無需關注)

從現有對象設定檔中移除某個欄位。這意味著該欄位將從現有對象配置中刪除,實際上該欄位可能會被重設為預設值。

表示從現有對象設定檔中移除某個欄位。

樣本說明

當對象設定檔、現有對象設定檔和last-applied-configuration欄位的Listeners範例程式碼分別為如下配置:

# 對象設定檔給出了如下期望的配置值。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8003
    protocol: HTTP
  - port: 8005 # 添加8005
    protocol: HTTP

# 現有對象設定檔展示了實際存在對象的配置。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8002  # 刪除8002
    protocol: HTTP
  - port: 8003
    protocol: HTTP
  - port: 8004  # 刪除8004
    protocol: HTTP
    
# last-applied-configuration記錄了對象的最後一次應用配置。
  listeners:
  - port: 8001 
    protocol: HTTP
  - port: 8002  # 刪除8002
    protocol: HTTP
  - port: 8003
    protocol: HTTP

最終AlbConfig的Listeners欄位將更新為如下結果:

# Listeners設定檔的結果
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8003
    protocol: HTTP
  - port: 8005
    protocol: HTTP
  • 8001和8003符合條件①,執行保留。

  • 8005符合條件②,執行添加。

  • 8002符合條件③,執行刪除。

  • 8004符合條件④,執行刪除。

建立HTTPS監聽

監聽(Listeners)是ALB執行個體用來處理實際流量的頂層入口。只有建立了監聽,ALB執行個體才能對外開放連接埠,接收用戶端的請求。

在AlbConfig中設定portprotocol即可建立對應的監聽。一旦修改了portprotocol以及其他監聽的屬性,系統將會把原有的監聽刪除,然後建立一個新的監聽來替代它。

監聽可以使用三種應用程式層協議:HTTP、HTTPS、QUIC。

重要

不同協議的多個監聽可以同時使用,但需要在Ingress資源中配置Annotation以保證Ingress同時適用於多個監聽。具體操作,請參見配置自訂監聽連接埠

建立HTTP監聽

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

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

建立HTTPS監聽

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
  ...
  listeners:
    - port: 443
      protocol: HTTPS
  ...
重要

使用HTTPS監聽時,需要配置認證。具體操作,請參見配置HTTPS認證以實現加密通訊

建立QUIC監聽

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
  ...
  listeners:
    - port: 443
      protocol: QUIC
  ...
重要

使用QUIC監聽可以相容用戶端使用HTTP/3協議進行訪問。使用QUIC監聽的更多細節,請參見使用QUIC監聽相容HTTP/3協議

指定認證

配置ALB時,如果需要為HTTPS協議啟用加密和身分識別驗證,執行命令kubectl edit albconfig <Albconfig_Name>,在AlbConfig中將certificates參數指定為認證的ID,以便為監聽指定一個認證,用於HTTPS流量的加密和解密。

如果在配置中沒有指定認證,那麼在建立ALB時,監聽將不會立即建立。相反,它將會等到有Ingress關聯,並根據網域名稱自動探索認證後才會建立監聽。這意味著監聽的建立會根據網域名稱自動探索認證的情況進行延遲。

更多認證配置方式,請參見配置HTTPS認證以實現加密通訊

重要

ALB會將第一個認證設定為預設認證,只有當預設認證到期或不再使用時,ALB才會考慮使用其他認證進行請求的加密。

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
  - caEnabled: false
    certificates:
    - CertificateId: 756****-cn-hangzhou # 認證ID。
      IsDefault: true
    port: 443
    protocol: HTTPS
  ...

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

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

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    requestTimeout: 40 # 若不填入值,預設逾時時間為60秒
  ...

使用資料壓縮功能

開啟該功能後,ALB執行個體會對某些特定檔案類型進行壓縮。gzipEnabled取值如下:

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

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

說明
  • 壓縮類型:當用戶端同時支援Brotli和Gzip壓縮演算法時,ALB會優先採用更高效的Brotli演算法。目前Brotli壓縮演算法支援壓縮所有類型,Gzip壓縮演算法支援壓縮的類型包括text/xml、text/plain、text/css、application/javascript、application/x-javascript、application/rss + xml、application/atom + xml、application/xml和application/json。

  • 壓縮條件:回應標頭 Content-Length 超過 1024 位元組,且用戶端要求標頭 Accept-Encoding 包含相應演算法。

開啟資料壓縮的YAML樣本如下:

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

擷取來訪者用戶端IP

開啟此功能後,ALB執行個體在轉寄請求到後端服務時,在HTTP要求標頭中添加用戶端真實IP的欄位。XForwardedForEnabled取值如下:

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

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

重要

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

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb
spec:
  config:
    #...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForEnabled: true # XForwardedForEnabled暫不支援關閉。
  #...

擷取用戶端的連接埠

開啟此功能後,ALB執行個體在轉寄請求到後端服務時,在HTTP要求標頭中添加用戶端連接埠欄位。XForwardedForClientSrcPortEnabled取值如下:

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

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

重要

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

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

擷取ALB執行個體的監聽協議

開啟此功能後,ALB執行個體在轉寄請求到後端服務時,在HTTP要求標頭中添加ALB執行個體使用的監聽協議欄位。XForwardedForProtoEnabled取值如下:

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

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

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

擷取ALB執行個體的ID

開啟此功能後,ALB執行個體在轉寄請求到後端服務時,在HTTP要求標頭中添加ALB執行個體的ID欄位。XForwardedForSLBIdEnabled取值如下:

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

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

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

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

開啟此功能後,ALB執行個體在轉寄請求到後端服務時,在HTTP要求標頭中添加執行個體的監聽連接埠欄位。XForwardedForSLBPortEnabled取值如下:

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

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

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

指定可信Proxy 伺服器的IP

在AlbConfig中通過XForwardedForClientSourceIpsEnabled配置項允許ALB執行個體從X-Forwarded-For頭部欄位中擷取真實用戶端IP。通過XForwardedForClientSourceIpsTrusted配置項,可以指定一組可信Proxy 伺服器的IP。ALB執行個體將從X-Forwarded-For欄位中的IP列表末尾開始向前遍曆,選擇第一個不在可信IP列表的IP作為用戶端的實際IP。

例如,X-Forwarded-For中的值為<用戶端真實IP,代理IP-1,代理IP-2>,您可以在XForwardedForClientSourceIpsTrusted中填入代理IP-1代理IP-2,以此擷取真實的用戶端IP。

重要

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

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata: 
  name: alb
spec:
  config:
    ...
  listeners:
  - port: 80
    protocol: HTTP
    xForwardedForConfig:
      XForwardedForClientSourceIpsEnabled: true # true表示允許ALB從X-Forwarded-For頭欄位中尋找真實用戶端IP,此時必須配置XForwardedForClientSourceIpsTrusted寫入格式正確的內容;false表示不允許ALB從X-Forwarded-For頭欄位中尋找真實用戶端IP。
      XForwardedForClientSourceIpsTrusted: 192.168.x.x;192.168.x.x/16  # 請輸入正確格式的IP或網段,並以 ; 分隔,IP或網段之間無需添加空格。僅在XForwardedForClientSourceIpsEnabled為true時生效。
  ...

設定ACL存取控制

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

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

欄位說明如下:

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

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

刪除監聽

一個執行個體可能對應多個監聽。執行命令kubectl edit albconfig <Albconfig_Name>,在AlbConfig中將想要刪除的監聽從albconfig.spec.listeners欄位中刪除即可。

重要

刪除監聽之前必須移除監聽下的全部Ingress,否則無法成功移除監聽,並會產生相關報錯。

# 刪除監聽前的配置。
  listeners:
  - port: 8001
    protocol: HTTP
  - port: 8002  # 刪除8002監聽。
    protocol: HTTP

# 刪除監聽後的配置。
  listeners:
  - port: 8001
    protocol: HTTP

常見問題

儲存AlbConfig YAML檔案報錯alb: listener port number must between [1:65535], or you should set listen port explicitly in listener config.

問題原因

AlbConfig YAML檔案spec.listener部分中的-符號的含義是單一監聽配置的開始。如下左側錯誤樣本中配置了三個-,即表示配置了三個監聽。由於最後一個-對應的certificates缺少port配置導致了報錯。

解決方案

按照一個監聽一個-作為開始進行配置。如下右側為修正後的正確樣本,刪除了certificates前面的-,使認證配置包含在HTTPS: 443監聽中

導致報錯的錯誤樣本:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
  - port: 80
    protocol: HTTP
  - port: 443
    protocol: HTTPS
  - certificates:  # 錯誤樣本:前面多配置了“-”
    - CertificateId: 756****-cn-hangzhou
      IsDefault: true
  ...

修正後的正確樣本:

apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
  name: alb-demo
spec:
  config:
  ...
  listeners:
  - port: 80
    protocol: HTTP
  - port: 443
    protocol: HTTPS
    certificates:  # 已刪除前面多餘的“-”,使認證配置包含在HTTPS: 443監聽中
    - CertificateId: 756****-cn-hangzhou
      IsDefault: true
  ...