全部產品
Search
文件中心

Container Service for Kubernetes:配置HTTPS認證以實現加密通訊

更新時間:Jul 30, 2025

使用HTTPS協議進行監聽時,您需要配置SSL/TLS認證以確保監聽與用戶端的加密串連。本文介紹ALB Ingress支援的多種配置認證的方法。

認證配置方式對比

ALB Ingress支援三種配置認證的方式:自動探索認證、Secret認證和AlbConfig指定認證。三種配置方式的對比如下。

對比項

自動探索認證

AlbConfig指定認證

Secret認證

憑證存放區方式

阿里雲數位憑證中心。

叢集內的Secret資源。

認證發現方式

使用網域名稱匹配自動探索。

通過數位憑證中心產生的認證ID發現。

指定叢集的內的Secret資摘要搜索。

適用情境

適用於已在阿里雲數位憑證中心購買認證或上傳認證的情境。

適用於需要在叢集內部管理憑證的情境,例如使用cert-manager類的管理工具時。

跨命名空間使用

支援。

不支援,僅支援在Secret資源所處的命名空間使用。

更新認證方式

數位憑證管理服務控制台上傳新認證或續約認證後,更新Ingress資源。

更新Secret資源的內容。

重要

單個ALB執行個體支援的認證上限為25個。通常情況下,單個ALB執行個體所使用的認證數量等於此ALB執行個體所有監聽的認證數量之和(包括關聯在Ingress資源上的認證)。具體的計算方法,請參見ALB配額計算方式

認證管理方式相容性說明

如果同時使用了多種認證配置方式,認證的管理方式和相容性如下所示。

認證配置情況

說明

在Ingress中同時使用了自動探索認證和Secret認證。

  • 如果自動探索認證和Secret認證屬於同一網域名稱,那麼Secret認證具有更高的優先順序。

  • 如果自動探索認證和Secret認證屬於不同的網域名稱,那麼ALB Ingress Controller會為每個網域名稱分別選擇相應的認證。

同時使用了自動探索認證和AlbConfig指定認證,並且它們關聯的Listener相同。

如果在AlbConfig中指定了認證,則此Listener不會使用自動探索認證。

同時使用了Secret認證和AlbConfig指定認證,並且它們關聯的Listener相同。

AlbConfig指定認證和Secret認證是可以完全相容的,並且可以同時使用。

前提條件

已擷取到可信的數位憑證。您可以從以下幾個途徑擷取數位憑證:

操作流程

重要

預設AlbConfig配置一個監聽連接埠為80、協議為HTTP的監聽,您還需要建立HTTPS監聽,並完成配置認證。如果未配置認證,HTTPS監聽則不可用,Controller會存在由於缺少認證導致的失敗事件。

步驟一:AlbConfig中建立HTTPS監聽

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

  3. 資來源物件瀏覽器頁簽的搜尋方塊中,搜尋AlbConfig,然後單擊搜尋結果AlbConfig

  4. AlbConfig面板中,找到目標AlbConfig資源(預設為alb),單擊其右側操作列下的YAML編輯

  5. 查看YAML面板,新增spec.listeners.portspec.listeners.protocol欄位。然後單擊確定

    image

kubectl

  1. 使用以下命令,編輯albconfig設定檔。

    kubectl edit albconfig <Albconfig_Name>
  2. 根據您的需求修改配置,可以在Albconfig中設定portprotocol,以建立相應的監聽。

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        addressAllocatedMode: Fixed
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-bp19sXXXXXXX176iv
        - vSwitchId: vsw-bp1boXXXXXXXu74xz
      listeners:
      - port: 80
        protocol: HTTP
      - port: 443         # 新增。
        protocol: HTTPS   # 新增,protocol的可選項為HTTP、HTTPS、QUIC。

(可選)步驟二:產生自我簽署憑證

如果還未擷取認證,執行以下命令可以通過OpenSSL建立自我簽署憑證。

重要
  • 由於缺乏可靠的CA認證,自我簽署憑證在瀏覽器和用戶端中預設不受信任,通常會導致客戶訪問時收到安全警告。本文中產生的自我簽署憑證僅作為樣本,請勿在生產環境中使用。

  • 命令中的demo.alb.ingress.top是產生的自我簽署憑證所關聯的網域名稱。如果您已擁有自己的網域名稱,請進行替換。

openssl genrsa -out albtop-key.pem 4096
openssl req -subj "/CN=demo.alb.ingress.top" -sha256  -new -key albtop-key.pem -out albtop.csr
echo subjectAltName = DNS:demo.alb.ingress.top > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in albtop.csr -signkey albtop-key.pem -out albtop-cert.pem -extfile extfile.cnf
  1. 執行以下命令,查看認證和私密金鑰。

    cat albtop-key.pem     # 私密金鑰。
    cat albtop-cert.pem   # 認證。
  2. 執行以下命令,使用Base64對認證和私密金鑰編碼。

    echo -n `cat albtop-key.pem` | base64     # Base64加密私密金鑰檔案。
    echo -n `cat albtop-cert.pem` | base64   # Base64加密認證檔案.

步驟三:建立樣本資源

除了AlbConfig外,ALB Ingress還需要Deployment、Service、IngressClass和Ingress這4種資源才能正常工作,您可以使用以下的樣本快速建立這4種資源。

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 單擊使用YAML建立資源

    1. 樣本模板:選擇自訂

    2. 模板:輸入YAML設定檔代碼。該設定檔用於Deployment、Service、IngressClass和Ingress這四種資源。

      展開查看YAML配置

      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        name: https-ingressclass
      spec:
        controller: ingress.k8s.alibabacloud/alb
        parameters:
          apiGroup: alibabacloud.com
          kind: AlbConfig
          name: alb # 修改為AlbConfig資源的名稱。
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: https-ingress
      spec:
        ingressClassName: https-ingressclass
        rules:
        - host: demo.alb.ingress.top # demo.alb.ingress.top替換為認證關聯的網域名稱。
          http:
            paths:
            - backend:
                service:
                  name: https-svc
                  port:
                    number: 443
              path: /
              pathType: Prefix
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: https-deploy
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: https-deploy
        template:
          metadata:
            labels:
              app: https-deploy
          spec:
            containers:
              - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/old-nginx:latest
                imagePullPolicy: IfNotPresent
                name: https-deploy
                ports:
                  - containerPort: 80
                    protocol: TCP
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: https-svc
      spec:
        ports:
          - name: port1
            port: 443
            protocol: TCP
            targetPort: 80
        selector:
          app: https-deploy
        sessionAffinity: None
        type: ClusterIP
    3. 配置完成後單擊建立,頁面將提示建立成功

    4. 檢查Deployment和Service建立成功:

      1. 在左側導覽列,選擇工作負載 > 無狀態。可查看到名稱為https-deploy的Deployment已部署。

      2. 在左側導覽列,選擇網路 > 服務。可查看到名稱為的https-svc的Service已部署。

      3. 在左側導覽列,選擇網路 > 路由可查看到名稱為的https-ingress的Ingress已部署。

kubectl

  1. 建立https-quickstart.yaml檔案,並將以下內容拷貝到該檔案中並儲存。

    apiVersion: networking.k8s.io/v1
    kind: IngressClass
    metadata:
      name: https-ingressclass
    spec:
      controller: ingress.k8s.alibabacloud/alb
      parameters:
        apiGroup: alibabacloud.com
        kind: AlbConfig
        name: alb # 修改為AlbConfig資源的名稱。
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: https-deploy
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: https-deploy
      template:
        metadata:
          labels:
            app: https-deploy
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/acs-sample/old-nginx:latest
              imagePullPolicy: IfNotPresent
              name: https-deploy
              ports:
                - containerPort: 80
                  protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: https-svc
    spec:
      ports:
        - name: port1
          port: 443
          protocol: TCP
          targetPort: 80
      selector:
        app: https-deploy
      sessionAffinity: None
      type: ClusterIP
      
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
      name: https-ingress
    spec:
      ingressClassName: https-ingressclass
      rules:
      - host: demo.alb.ingress.top 
        http:
          paths:
          - backend:
              service:
                name: https-svc
                port:
                  number: 443
            path: /
            pathType: Prefix
  2. 執行以下命令建立。

    kubectl apply -f https-quickstart.yaml

步驟四:配置認證

使用自動探索認證

控制台

在將認證上傳到阿里雲數位憑證中心後,您可以通過在Ingress中的TLS配置認證關聯的網域名稱,使ALB Ingress自動探索並使用已上傳的認證。

  1. 將自我簽署憑證上傳至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證

  2. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  3. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 路由

  4. 路由頁面,單擊目標Ingress其右側操作列下的更新,然後在編輯 Ingress對話方塊中,配置如下參數。

    配置項

    說明

    樣本值

    TLS配置

    開啟TLS配置開關,配置安全的路由服務。

    • 網域名稱:自訂網域名。

    • 保密字典:根據需要選擇對應的保密字典。

      說明

      值為空白時,為自動探索形式配置認證。

      如果您需要建立Secret,請執行如下操作。

      1. 保密字典右側,單擊建立

      2. 建立 Secret對話方塊,自訂保密字典的名稱CertKey,然後單擊確定

      3. 保密字典的下拉框,選擇已建立的Secret。

    單擊+ 新增TLS配置,可配置多條TLS。

    • 網域名稱:demo.alb.ingress.top

    • 保密字典:不填值,為空白。

    (可選)註解

    您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見Ingress支援的Annotation。單擊+添加註解,可對Ingress無上限地添加註解。

    無需配置。

    說明

    如需同時監聽HTTP/HTTPS協議時需要添加如下注釋。

    • 名稱:alb.ingress.kubernetes.io/listen-ports

    • 值:[{"HTTP": 80},{"HTTPS": 443}]

    1746500886011_7B8D9B84-2F18-4519-9A8A-50BECE7333FB

kubectl

在將認證上傳到阿里雲數位憑證中心後,您可以通過在Ingress中的tls欄位裡填入認證關聯的網域名稱,使ALB Ingress自動探索並使用已上傳的認證。

  1. 將自我簽署憑證上傳至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證

  2. 執行以下命令編輯Ingress。

    kubectl edit ingress https-ingress
  3. 添加tls欄位,填入認證關聯的網域名稱。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    #  annotations:
    #    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'  # 如果需要同時監聽HTTP和HTTPS協議時需要添加此注釋。
      name: https-ingress
    spec:
      ingressClassName: https-ingressclass
      rules:
      - host: demo.alb.ingress.top # demo.alb.ingress.top替換為認證關聯的網域名稱
        http:
          paths:
          - backend:
              service:
                name: https-svc
                port:
                  number: 443
            path: /
            pathType: Prefix
      tls:                     # 新增。   
      - hosts:                 # 新增。
        - demo.alb.ingress.top # 新增,需要和“rules: host“欄位中的網域名稱保持一致,同時是認證關聯的網域名稱。

使用Secret認證

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 路由

  3. 路由頁面,單擊目標Ingress其右側操作列下的更新,然後在編輯 Ingress對話方塊中,配置如下參數。

    配置項

    說明

    樣本值

    TLS配置

    開啟TLS配置開關,配置安全的路由服務。

    • 網域名稱:自訂網域名。

    • 保密字典:根據需要選擇對應的保密字典。

      說明

      值為空白時,為自動探索形式配置認證。

      如果您需要建立Secret,請執行如下操作。

      1. 保密字典右側,單擊建立

      2. 建立 Secret對話方塊,自訂保密字典的名稱CertKey,然後單擊確定

      3. 保密字典的下拉框,選擇已建立的Secret。

    單擊+ 新增TLS配置,可配置多條TLS。

    • 網域名稱:demo.alb.ingress.top

    • 保密字典:https-secret

      • Secret名稱:https-secret

      • Cert:非Base64加密自簽認證。

      • Key:非Base64加密自簽私密金鑰。

    (可選)註解

    您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見Ingress支援的Annotation。單擊+添加註解,可對Ingress無上限地添加註解。

    無需配置。

    說明

    如需同時監聽HTTP/HTTPS協議時需要添加如下注釋。

    • 名稱:alb.ingress.kubernetes.io/listen-ports

    • 值:[{"HTTP": 80},{"HTTPS": 443}]

    image

kubectl

您可以將認證儲存在叢集的Secret資源中,並在Ingress中使用。

  1. 建立Secret

    1. 使用以下內容建立https-secret.yaml,樣本如下,對應的認證和私密金鑰編碼請參見步驟二使用Base64對認證和私密金鑰編碼

      apiVersion: v1
      kind: Secret
      metadata:
        name: https-secret
      type: kubernetes.io/tls
      data:
        tls.key: |  # Base64編碼後的albtop-key.pem。
          {base64 albtop-key.pem}     
        tls.crt: |  # Base64編碼後的albtop-cert.pem。
          {base64 albtop-cert.pem}     
    2. 執行以下命令,建立Secret。

      kubectl apply -f https-secret.yaml
  2. 編輯Ingress。

    1. 執行以下命令編輯Ingress。

      kubectl edit ingress https-ingress
    2. 添加tls欄位,填入認證關聯的網域名稱,以及secret資源的名稱。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
      #  annotations:
      #    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'  # 如果需要同時監聽HTTP和HTTPS協議時需要添加此注釋。
        name: https-ingress
        namespace: default
      spec:
        ingressClassName: alb
        rules:
        - host: demo.alb.ingress.top # demo.alb.ingress.top替換為認證關聯的網域名稱。
          http:
            paths:
            - backend:
                service:
                  name: https-svc
                  port:
                    number: 443
              path: /
              pathType: Prefix
        tls:                         # 新增。
        - hosts:
          - demo.alb.ingress.top     # 新增,需要和“rules: host“欄位中的網域名稱保持一致,同時是認證關聯的網域名稱。
          secretName: https-secret   # 新增,建立認證密鑰。

使用AlbConfig指定認證

控制台

  1. 擷取自簽認證的CertIdentifier。

    在將認證上傳到阿里雲數位憑證中心後,您可以在AlbConfig中的監聽的CertificateId欄位填入認證的ID,以便為監聽關聯已上傳的認證。

    說明

    如果監聽配置了認證,那麼此監聽下的Ingress將不再使用自動探索認證。

    1. 上傳自我簽署憑證至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證

    2. 擷取認證ID。

      1. 登入數位憑證管理服務控制台

      2. 在左側導覽列,選擇認證管理 > SSL認證管理

      3. SSL認證管理頁面,單擊上傳認證頁簽,在目標認證操作列下單擊更多

        認證詳情面板中擷取CertIdentifier

  2. 關聯認證至AlbConfig。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 自訂資源

    3. 資來源物件瀏覽器頁簽的搜尋方塊中,搜尋AlbConfig,然後單擊搜尋結果AlbConfig

    4. AlbConfig面板中,找到目標AlbConfig資源(預設為alb),單擊其右側操作列下的YAML編輯

    5. 查看YAML面板,新增如下欄位。然後單擊確定

      欄位

      描述

      樣本值

      certificates

      認證資訊。

      -

      CertificateId

      步驟1擷取認證的CertIdentifier。

      756****-cn-hangzhou

      IsDefault

      是否為預設認證。

      true

      image

  3. 編輯Ingress。

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇網路 > 路由

    3. 路由頁面,單擊目標Ingress其右側操作列下的更新,然後在編輯 Ingress對話方塊中,配置如下參數。

      配置項

      說明

      樣本值

      註解

      您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見Ingress支援的Annotation。單擊+添加註解,可對Ingress無上限地添加註解。

      • 名稱:alb.ingress.kubernetes.io/listen-ports

      • 值:[{"HTTPS": 443}]

        說明

        如果需要同時監聽HTTP和HTTPS協議替換為[{"HTTP": 80},{"HTTPS": 443}]

      image

kubectl

在將認證上傳到阿里雲數位憑證中心後,您可以在AlbConfig中的監聽的CertificateId欄位填入認證的ID,以便為監聽關聯已上傳的認證。

說明

如果監聽配置了認證,那麼此監聽下的Ingress將不再使用自動探索認證。

  1. 上傳自我簽署憑證至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證

  2. 擷取認證ID。

    1. 登入數位憑證管理服務控制台

    2. 在左側導覽列,選擇認證管理 > SSL認證管理

    3. SSL認證管理頁面,單擊上傳認證頁簽,在目標認證操作列下單擊更多

      認證詳情面板中擷取CertIdentifier

關聯認證至AlbConfig。

  1. 執行以下命令編輯AlbConfig。

    kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱
  2. 在監聽中添加certificates欄位,填入之前步驟中擷取的CertIdentifier

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb
    spec:
      config:
        addressType: Intranet
        name: xiaosha-alb-test
      listeners:
        - port: 80
          protocol: HTTP
        - certificates:
            - CertificateId: 756****-cn-hangzhou   # 認證的CertIdentifier。
              IsDefault: true                      # 是否為預設認證。
          port: 443
          protocol: HTTPS
  3. 執行以下命令編輯Ingress。

    kubectl edit ingress https-ingress
  4. 新增alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'注釋。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS": 443}]'  # 新增,如果需要同時監聽HTTP和HTTPS協議時修改為'[{"HTTP": 80},{"HTTPS": 443}]' 。
      name: https-ingress
    spec:
      ingressClassName: https-ingressclass
      rules:
      - host: demo.alb.ingress.top # demo.alb.ingress.top替換為認證關聯的網域名稱
        http:
          paths:
          - backend:
              service:
                name: https-svc
                port:
                  number: 443
            path: /
            pathType: Prefix

步驟五:效果驗證

通過使用HTTPS協議訪問服務,可以驗證配置認證的效果。

  1. 執行以下命令,查看Ingress資訊。

    kubectl get ingress

    預期輸出:

    NAME            CLASS                HOSTS                  ADDRESS                         PORTS     AGE
    https-ingress   https-ingressclass   demo.alb.ingress.top   alb-********.alb.aliyuncs.com   80, 443   83m

    記錄下HOSTSADDRESS部分的值,以便後續步驟使用。

  2. 執行以下命令,使用HTTPS協議串連ALB Ingress訪問後端服務。其中的demo.alb.ingress.topalb-********.alb.aliyuncs.com請替換為在上一步中得到的值。

    curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com

    預期輸出如下,則表明認證配置成功:

    old

相關文檔