使用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認證。 |
|
同時使用了自動探索認證和AlbConfig指定認證,並且它們關聯的Listener相同。 | 如果在AlbConfig中指定了認證,則此Listener不會使用自動探索認證。 |
同時使用了Secret認證和AlbConfig指定認證,並且它們關聯的Listener相同。 | AlbConfig指定認證和Secret認證是可以完全相容的,並且可以同時使用。 |
前提條件
已擷取到可信的數位憑證。您可以從以下幾個途徑擷取數位憑證:
操作流程
步驟一:AlbConfig中建立HTTPS監聽
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在資來源物件瀏覽器頁簽的搜尋方塊中,搜尋AlbConfig,然後單擊搜尋結果AlbConfig。
在AlbConfig面板中,找到目標AlbConfig資源(預設為alb),單擊其右側操作列下的YAML編輯。
在查看YAML面板,新增
spec.listeners.port和spec.listeners.protocol欄位。然後單擊確定。
kubectl
使用以下命令,編輯
albconfig設定檔。kubectl edit albconfig <Albconfig_Name>根據您的需求修改配置,可以在Albconfig中設定
port和protocol,以建立相應的監聽。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執行以下命令,查看認證和私密金鑰。
cat albtop-key.pem # 私密金鑰。cat albtop-cert.pem # 認證。執行以下命令,使用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種資源。
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
單擊使用YAML建立資源。
樣本模板:選擇自訂。
模板:輸入YAML設定檔代碼。該設定檔用於Deployment、Service、IngressClass和Ingress這四種資源。
配置完成後單擊建立,頁面將提示建立成功。
檢查Deployment和Service建立成功:
在左側導覽列,選擇工作負載 > 無狀態。可查看到名稱為
https-deploy的Deployment已部署。在左側導覽列,選擇網路 > 服務。可查看到名稱為的
https-svc的Service已部署。在左側導覽列,選擇可查看到名稱為的
https-ingress的Ingress已部署。
kubectl
建立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執行以下命令建立。
kubectl apply -f https-quickstart.yaml
步驟四:配置認證
使用自動探索認證
控制台
在將認證上傳到阿里雲數位憑證中心後,您可以通過在Ingress中的TLS配置認證關聯的網域名稱,使ALB Ingress自動探索並使用已上傳的認證。
將自我簽署憑證上傳至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在路由頁面,單擊目標Ingress其右側操作列下的更新,然後在編輯 Ingress對話方塊中,配置如下參數。
配置項
說明
樣本值
TLS配置
開啟TLS配置開關,配置安全的路由服務。
網域名稱:自訂網域名。
保密字典:根據需要選擇對應的保密字典。
說明值為空白時,為自動探索形式配置認證。
如果您需要建立Secret,請執行如下操作。
在保密字典右側,單擊建立。
在建立 Secret對話方塊,自訂保密字典的名稱、Cert、Key,然後單擊確定。
在保密字典的下拉框,選擇已建立的Secret。
單擊+ 新增TLS配置,可配置多條TLS。
網域名稱:demo.alb.ingress.top
保密字典:不填值,為空白。
(可選)註解
您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見Ingress支援的Annotation。單擊+添加註解,可對Ingress無上限地添加註解。
無需配置。
說明如需同時監聽HTTP/HTTPS協議時需要添加如下注釋。
名稱:
alb.ingress.kubernetes.io/listen-ports值:
[{"HTTP": 80},{"HTTPS": 443}]

kubectl
在將認證上傳到阿里雲數位憑證中心後,您可以通過在Ingress中的tls欄位裡填入認證關聯的網域名稱,使ALB Ingress自動探索並使用已上傳的認證。
將自我簽署憑證上傳至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證。
執行以下命令編輯Ingress。
kubectl edit ingress https-ingress添加
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認證
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在路由頁面,單擊目標Ingress其右側操作列下的更新,然後在編輯 Ingress對話方塊中,配置如下參數。
配置項
說明
樣本值
TLS配置
開啟TLS配置開關,配置安全的路由服務。
網域名稱:自訂網域名。
保密字典:根據需要選擇對應的保密字典。
說明值為空白時,為自動探索形式配置認證。
如果您需要建立Secret,請執行如下操作。
在保密字典右側,單擊建立。
在建立 Secret對話方塊,自訂保密字典的名稱、Cert、Key,然後單擊確定。
在保密字典的下拉框,選擇已建立的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}]

kubectl
您可以將認證儲存在叢集的Secret資源中,並在Ingress中使用。
建立Secret
使用以下內容建立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}執行以下命令,建立Secret。
kubectl apply -f https-secret.yaml
編輯Ingress。
執行以下命令編輯Ingress。
kubectl edit ingress https-ingress添加
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指定認證
控制台
擷取自簽認證的CertIdentifier。
在將認證上傳到阿里雲數位憑證中心後,您可以在AlbConfig中的監聽的
CertificateId欄位填入認證的ID,以便為監聽關聯已上傳的認證。說明如果監聽配置了認證,那麼此監聽下的Ingress將不再使用自動探索認證。
上傳自我簽署憑證至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證。
擷取認證ID。
登入數位憑證管理服務控制台。
在左側導覽列,選擇。
在SSL認證管理頁面,單擊上傳認證頁簽,在目標認證操作列下單擊更多。
在認證詳情面板中擷取CertIdentifier。
關聯認證至AlbConfig。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在資來源物件瀏覽器頁簽的搜尋方塊中,搜尋AlbConfig,然後單擊搜尋結果AlbConfig。
在AlbConfig面板中,找到目標AlbConfig資源(預設為alb),單擊其右側操作列下的YAML編輯。
在查看YAML面板,新增如下欄位。然後單擊確定。
欄位
描述
樣本值
certificates認證資訊。
-
CertificateId步驟1擷取認證的CertIdentifier。
756****-cn-hangzhou
IsDefault是否為預設認證。
true

編輯Ingress。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在路由頁面,單擊目標Ingress其右側操作列下的更新,然後在編輯 Ingress對話方塊中,配置如下參數。
配置項
說明
樣本值
註解
您可自訂註解名稱和值,也可根據名稱選擇或搜尋要配置的註解。Ingress的註解請參見Ingress支援的Annotation。單擊+添加註解,可對Ingress無上限地添加註解。
名稱:
alb.ingress.kubernetes.io/listen-ports值:
[{"HTTPS": 443}]說明如果需要同時監聽HTTP和HTTPS協議替換為
[{"HTTP": 80},{"HTTPS": 443}]

kubectl
在將認證上傳到阿里雲數位憑證中心後,您可以在AlbConfig中的監聽的CertificateId欄位填入認證的ID,以便為監聽關聯已上傳的認證。
如果監聽配置了認證,那麼此監聽下的Ingress將不再使用自動探索認證。
上傳自我簽署憑證至阿里雲數位憑證中心。具體操作,請參見上傳和共用SSL認證。
擷取認證ID。
登入數位憑證管理服務控制台。
在左側導覽列,選擇。
在SSL認證管理頁面,單擊上傳認證頁簽,在目標認證操作列下單擊更多。
在認證詳情面板中擷取CertIdentifier。
關聯認證至AlbConfig。
執行以下命令編輯AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替換AlbConfig的名稱在監聽中添加
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執行以下命令編輯Ingress。
kubectl edit ingress https-ingress新增
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協議訪問服務,可以驗證配置認證的效果。
執行以下命令,查看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記錄下
HOSTS與ADDRESS部分的值,以便後續步驟使用。執行以下命令,使用HTTPS協議串連ALB Ingress訪問後端服務。其中的
demo.alb.ingress.top與alb-********.alb.aliyuncs.com請替換為在上一步中得到的值。curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com預期輸出如下,則表明認證配置成功:
old
相關文檔
如果您希望相容用戶端使用HTTP/3協議訪問服務,請參見使用QUIC監聽相容HTTP/3協議。
如果您希望在監聽上使用HTTPS雙向認證功能,請參見使用HTTPS雙向認證提高服務的安全性。