本文旨在協助您有效地管理HTTPS監聽的SSL認證,特別是在認證即將到期或已到期等情況下,確保認證的順利更換。
前提條件
已建立ACK託管叢集、ACK專有叢集或ACK Serverless叢集,Kubernetes版本為1.18及以上版本。具體操作,請參見建立ACK託管叢集、建立ACK專有叢集(已停止建立)、建立ACK Serverless叢集或手動升級叢集。
已為叢集安裝ALB Ingress Controller組件。具體操作,請參見管理ALB Ingress Controller組件。
說明若需要在ACK專有叢集中通過ALB Ingress訪問服務,在部署服務前需要為ALB Ingress Controller授權。具體操作,請參見為ACK專有叢集授予ALB Ingress Controller存取權限。
SSL認證管理情境
名詞解釋
預設認證:僅支援更換,不支援添加或刪除。每個監聽下的預設認證是唯一的。
擴充認證:支援添加和刪除。每個監聽下可以有多張擴充認證,具體可添加的認證配額,請參見使用限制。
監聽認證列表:登入應用型負載平衡ALB控制台可查看監聽認證。
新增認證:未包含在當前監聽的認證列表中的認證。
管理SSL認證
ALB Ingress Controller v2.18.0-aliyun.1 版本起支援在AlbConfig中通過defaultCertificate欄位指定預設認證。詳情請參見ALB Ingress Controller變更記錄。
管理憑證情境 | 自動探索認證 | Secret認證 | AlbConfig指定認證 |
新增認證更新為預設認證 | 方案一(推薦) | 方案一(推薦) | 使用 |
方案二 登入應用型負載平衡ALB控制台更換預設認證。 | 方案二
| ||
擴充認證更新為預設認證 | 方案一(推薦) | 方案一(推薦) | 方案一(推薦) |
方案二
| 方案二
| 方案二
| |
新增認證更新為擴充認證 | 主動觸發調諧。 | 更新Ingress關聯的Secret資源。 | 使用 |
關於自動探索認證、Secret認證和AlbConfig指定認證。三種管理憑證詳情請參見配置HTTPS認證以實現加密通訊。
在ALB控制台更換預設認證
注意事項
若您希望新增一張不在當前監聽認證列表中的認證用於替換當前預設認證,請先核實所需的新認證是否已在阿里雲數位憑證中心可用。若該認證尚未存在,您可以通過認證中心購買或上傳新的SSL認證。更多資訊,請參見購買正式認證、上傳和共用SSL認證。
典型情境
當前預設認證已經到期,需要使用新增認證替換已到期的預設認證。
當前預設認證尚未到期,但已決定不再使用當前的預設認證,您可以使用新增認證替換未到期的預設認證。
當在ALB控制台刪除擴充認證的操作完成後,將該擴充認證設定為新的預設認證。
操作步驟
登入應用型負載平衡ALB控制台,在頂部功能表列處,選擇執行個體所屬的地區。
在執行個體頁面,找到目標執行個體,單擊執行個體ID,在執行個體詳情頁簽,關閉配置修改保護。
重要在關閉配置修改保護後,若通過應用型負載平衡ALB控制台進行監聽配置更改,只有在本情境下,預設認證配置才會在下次調諧後被回寫至ACK叢集。除預設認證配置外,其他的配置更改不會被回寫至叢集內,這意味著在下一次調諧時,這些未回寫的配置將存在被叢集調諧時的配置所覆蓋的風險。因此,請謹慎進行其他動作。下次調諧後,您可以在叢集中執行
kubectl describe albconfig [$Albconfig_Name]命令,並查看status欄位的內容,以驗證預設認證配置的回寫是否成功。單擊監聽頁簽,單擊目標監聽ID,進入監聽詳情頁面,然後單擊監聽認證頁簽。
在伺服器憑證頁簽,找到監聽預設伺服器憑證,在操作列單擊更換。
在彈出的對話方塊中,選擇您的新增認證,然後單擊確定。
該操作完成後,您已成功將當前監聽的預設認證更新為新增認證。
若原預設認證仍需保留使用,請在當前伺服器憑證頁面,單擊添加擴充認證,將其作為擴充認證重新添加至監聽配置。
若確定原預設認證不再需要,並且未被其他執行個體或監聽所引用,請在當前伺服器憑證頁面,單擊目標認證操作列的刪除,將原預設認證進行清理。如果不進行清理,那麼在下一次配置調諧過程中,未到期的原預設認證會作為擴充認證被自動關聯到當前的監聽。
開啟配置修改保護。
在ALB控制台刪除擴充認證
此操作涉及先行刪除擴充認證再設定為預設認證的步驟。在此過程中(通常持續數秒),若監聽認證列表內無其他與該擴充認證綁定網域名稱相同的認證,基於該網域名稱的轉寄策略將暫時無法找到合適的認證,可能影響相關業務的正常運行。因此,建議您在確保對業務無影響後,再謹慎進行相關操作。
注意事項
在開始刪除擴充認證之前,請查看您的監聽認證列表。如果當前預設認證與擴充認證的配置與您的預期一致,則無需執行刪除擴充認證和更換預設認證的操作。
建議您在執行操作之前,提前在認證中心上傳一張與待移除擴充認證綁定網域名稱相同的臨時認證,刪除擴充認證前,在伺服器憑證頁簽單擊添加擴充認證,在彈出的對話方塊中選擇您上傳的臨時認證,確認臨時認證狀態顯示為已關聯後,再移除擴充認證,並在更換預設認證結束後刪除該臨時認證。
典型情境
若當前預設認證已經到期,您可以先刪除擴充認證,然後配置在ALB控制台更換預設認證將該認證更新為預設認證。
若當前預設認證尚未到期,但您決定不再使用當前的預設認證,您可以刪除擴充認證後,配合在ALB控制台更換預設認證將該認證更新為預設認證。您可以根據需求決定是否將原預設認證作為擴充認證重新添加至監聽配置。
若ALB Ingress Controller調諧時自動選擇的預設認證並非您所期望的認證,您可以刪除擴充認證後,配合在ALB控制台更換預設認證將該認證更新為預設認證,再將原預設認證作為擴充認證重新添加至監聽配置。
操作步驟
登入應用型負載平衡ALB控制台,在頂部功能表列處,選擇執行個體所屬的地區。
在執行個體頁面,找到目標執行個體,單擊執行個體ID,在執行個體詳情頁簽,在執行個體詳情頁簽,關閉配置修改保護。
重要在關閉配置修改保護後,若通過應用型負載平衡ALB控制台進行監聽配置更改,只有在配合在ALB控制台更換預設認證更新預設認證時,相應認證配置才會在下次調諧後被回寫至ACK叢集。除認證配置外,其他的配置更改不會被回寫至叢集內,這意味著在下一次調諧時,這些未回寫的配置將存在被叢集調諧時的配置所覆蓋的風險。因此,請謹慎進行其他動作。下次調諧後,您可以在叢集中執行
kubectl describe albconfig [$Albconfig_Name]命令,並查看status欄位的內容,以驗證認證配置的回寫是否成功。單擊監聽頁簽,單擊目標監聽ID,進入監聽詳情頁面,然後單擊監聽認證頁簽。
在伺服器憑證頁簽,找到期望刪除的擴充認證,在操作列單擊刪除,然後根據頁面提示完成操作。
開啟配置修改保護。
將新增認證更新為擴充認證
主動觸發調諧
典型情境
如果您採用的是自動探索認證的管理方式,當您在認證中心購買或上傳了新的SSL認證,ALB Ingress Controller組件將不會立即識別到這一變化。只有在執行調諧操作時,ALB Ingress Controller組件才會在認證中心查詢、擷取認證,並在此過程中發現新的認證。因此,如果您希望新更新的認證能夠在ALB Ingress中快速生效,您需要主動發起調諧過程。
當您的認證管理方式為自動探索認證時,請注意Ingress設定檔中spec.rules[].host欄位的值需要與spec.tls[].hosts[]欄位列出的網域名稱一一對應,這樣各個網域名稱才能關聯到對應的認證。
操作步驟
如需觸發調諧並更新認證,您可以修改ALB Ingress的相關配置。請根據實際業務需要,從ALB Ingress配置詞典中選擇配置進行修改。
如果您不確定當前業務的具體配置需求,建議在Ingress的YAML檔案中添加非關鍵註解(例如:key_test: value_test),來促使ALB Ingress Controller執行調諧操作。如下所示。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-https namespace: default annotations: key_test: value_test # 添加一個無意義註解用於觸發調諧。 spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: paths: - backend: service: name: demo-service-https port: number: 443 path: / pathType: Prefix tls: - hosts: - demo.alb.ingress.top執行以下命令,更新Ingress。
kubectl apply -f demo.yaml執行以下命令,驗證是否調諧成功。
kubectl describe ingress demo-https -n default(可選)在Ingress的YAML中刪除無意義的Annotation,並執行步驟2中的命令更新Ingress。
更新Ingress關聯的Secret資源
典型情境
如果您需要更新當前ALB Ingress中已經生效的Secret資源,那麼您可以直接編輯現有Secret資源的YAML設定檔,並將更新後的YAML檔案應用至Kubernetes叢集,這個操作會自動觸發ALB Ingress Controller組件進行調諧,無需額外的人工操作。具體操作,請參見配置HTTPS認證以實現加密通訊。
如果您需要向當前ALB Ingress添加新的Secret認證,您需要先建立新的Secret資源,然後再修改ALB Ingress資源的設定檔,將新的Secret資源名稱添加至TLS對應的
secretName欄位中。建立新的Secret資源。具體操作,請參見配置HTTPS認證以實現加密通訊。
將新建立的Secret資源添加至ALB Ingress資源的設定檔。
在Ingress的YAML中添加新增Secret資源對應的網域名稱及
secretName。程式碼範例如下。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: demo-https namespace: default spec: ingressClassName: alb rules: - host: demo.alb.ingress.top http: paths: - backend: service: name: demo-service-https port: number: 443 path: / pathType: Prefix - host: newsecret.alb.ingress.top # 新增網域名稱對應新的Secret資源。 http: paths: - backend: service: name: demo-service-https port: number: 443 path: / pathType: Prefix tls: - hosts: - demo.alb.ingress.top secretName: secret-tls - hosts: - newsecret.alb.ingress.top # 添加新增Secret資源對應的網域名稱。 secretName: newsecret # 添加新增Secret資源對應的secretName。執行以下命令,更新Ingress。
kubectl apply -f demo.yaml # 將demo.yaml、替換成您自己的YAML檔案。
使用kubectl edit命令更新認證ID
典型情境
當您採用AlbConfig指定認證的管理方式時,如果您在認證中心購買或上傳了新的SSL認證,或在認證中心修改老的認證引起認證ID變化後,您可以按照以下操作更新AlbConfig。
操作步驟
擷取認證ID。
登入數位憑證管理服務控制台。
在左側導覽列,選擇。
在SSL認證管理頁面,單擊上傳認證頁簽,在目標認證操作列下點擊更多,然後在認證詳情面板中擷取認證ID。
通過
kubectl edit命令進行累加式更新。執行以下命令,查看AlbConfig名稱。
kubectl -n kube-system get AlbConfig執行以下命令,更新對應的AlbConfig。
kubectl -n <NameSpace> edit AlbConfig <AlbConfig_Name>將擷取的認證ID更新至YAML。
#... spec: config: #... listeners: - caEnabled: false certificates: #... - CertificateId: 756****-cn-hangzhou # 新增認證ID。 IsDefault: false port: 443 protocol: HTTPS #...
在AlbConfig中通過defaultCertificate手動指定預設認證
注意事項
IsDefault 欄位:僅支援在建立時指定預設認證,後續除非必要,系統不會自動變更。若需主動更換預設認證,請使用
defaultCertificate欄位配置。listeners: - port: 443 protocol: HTTPS certificates: - CertificateId: abcdefg-hangzhou IsDefault: truedefaultCertificate 優先順序:
defaultCertificate的優先順序高於certificates.IsDefault,即配置了defaultCertificate後,certificates.IsDefault自動失效。... ... listeners: - port: 443 protocol: HTTPS defaultCertificate: kind: CertIdentifier certificateId: 75****-hangzhou certificates: - CertificateId: 75****-hangzhou IsDefault: true
認證匹配優先順序:當同一監聽連接埠上同時配置了擴充認證和預設認證時,優先匹配擴充認證,未命中時兜底使用預設認證。
ALB Ingress Controller需升級到v2.18.0-aliyun.1或以上版本。詳情請參見升級ALB Ingress Controller組件。
操作步驟
ALB Ingress Controller v2.18.0-aliyun.1 版本起支援在AlbConfig中通過defaultCertificate欄位指定預設認證。詳情請參見ALB Ingress Controller變更記錄。
defaultCertificate.kind 僅支援 CertIdentifier 和 Secret 兩種取值。
使用認證 ID(CertIdentifier)方式
當 defaultCertificate.kind 設定為 CertIdentifier 時,需填寫對應的認證 ID(certificateId)。樣本如下:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressType: Intranet
name: alb-test
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
defaultCertificate:
- kind: CertIdentifier
certificateId: 123****-cn-hangzhou ## 指定目標認證ID。使用 Secret 方式
當 defaultCertificate.kind 設定為 Secret 時,需指定對應的 secretName 和 secretNamespace,以引用Secret 作為預設認證。樣本如下:
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: alb
spec:
config:
addressType: Intranet
name: xiaosha-alb-test
listeners:
- port: 80
protocol: HTTP
- port: 443
protocol: HTTPS
defaultCertificate:
kind: Secret
secretName: test-secret ## 指定目標的secretName。
secretNamespace: test ## 指定目標的secretNamespace。補充說明
當您在認證中心修改認證後(例如,認證續約、追加網域名稱、更換網域名稱後),請注意操作前後認證ID是否改變,若認證ID改變,需要根據您所選擇的認證管理方式在ALB Ingress同步觸發更新。
如果您同時使用了多種認證配置方式,在更新認證時請注意認證管理方式的相容性。詳細資料,請參見認證管理方式相容性說明。
常見問題
為什麼會在調諧過程中出現錯誤提示:Specified parameter array contains too many items, up to 15 items, Certificates is not valid?
從ALB Ingress Controller組件的v2.11.0-aliyun.1版本開始,新增了對認證分頁的支援。如果在調諧過程中出現錯誤提示:Specified parameter array contains too many items, up to 15 items, Certificates is not valid,這表明您當前使用的ALB Ingress Controller組件版本尚未支援認證分頁功能,並且您的使用情境中單次調諧嘗試關聯的認證數量超過了15張的限制。為解決此問題,建議您將ALB Ingress Controller組件升級至最新版本。關於組件的版本資訊,請參見ALB Ingress Controller。關於如何升級組件,請參見管理ALB Ingress Controller組件。
相關文檔
如何使用ALB Ingress為HTTPS監聽首次配置認證,請參見認證管理方式相容性說明。
如需瞭解如何通過配置ALB Ingress來實施HTTPS雙向認證,請參見使用HTTPS雙向認證提高服務的安全性。
如果在使用ALB過程中遇到相關報錯或問題,請優先查閱文檔解決。詳細資料,請參見ALB Ingress異常問題排查、ALB Ingress FAQ。