在 Azure Stack Hub 上使用 AKS 引擎輪替 Kubernetes 憑證
本文件提供在現有 AKS 引擎叢集上輪替憑證的指導,以及採用 aks-engine rotate-certs
作為工具的建議。
Prerequisites
本指南假設您已使用 AKS 引擎部署叢集,且叢集處於健全狀態。
規劃憑證輪替
考慮使用此功能時,請注意,在更新、驗證和重新開機步驟期間將無法使用 Kubernetes 控制平面。 請據此規劃維護作業。 此外,在生產環境中嘗試執行此作業前,請先使用相同的設定,在預備環境中執行此作業。
嘗試此作業前,請先參閱下列考量:
注意
針對 AKSe 0.75.3 版和更新版本,憑證輪替的命令會以 aks-engine-azurestack
開頭,而不是 aks-engine
。
您需要存取由
aks-engine deploy
或aks-engine generate
命令產生的 API 模型 (apimodel.json
)。 依預設,此檔案會放在相對目錄中,例如_output/<clustername>/
。aks-engine rotate-certs
作業會導致 API 伺服器停機。aks-engine rotate-certs
預期符合叢集目前狀態的 API 模型。aks-engine rotate-certs
在叢集節點上執行遠端命令,並使用 API 模型資訊來建立安全的 SSH 連線。aks-engine rotate-certs
也會依賴某些資源,依據原始aks-engine
部署來命名,例如 VM 必須遵循aks-engine
所提供的命名。aks-engine rotate-certs
會在憑證輪替期間,依賴叢集控制平面的工作連線:- 驗證流程的每個步驟。
- 重新開機/重新建立叢集資源,例如 kube-system Pod 和服務帳戶權杖。
如果您要在外部無法存取的 VNet 中輪替叢集憑證,則必須從可透過網路存取控制平面的主機 VM (例如和主機 VM 在相同 VNet 的 jumpbox VM),來執行
aks-engine rotate-certs
。如果您在生產環境中使用
aks-engine rotate-certs
,建議您在以相同規格所建立的叢集上暫存憑證輪替測試。 意即,叢集是使用相同的叢集設定、相同版本的 AKS 引擎命令列工具,以及在執行憑證輪替前,與生產叢集相同的啟用附加元件集合來建立。 AKS 引擎支援不同的叢集組態,以及 AKS 引擎小組執行的端對端測試範圍,實際上無法涵蓋每個可能的設定。 因此建議您在生產叢集上嘗試執行作業前,先確定特定的叢集設定可在預備環境中使用aks-engine rotate-certs
。aks-engine rotate-certs
無法保證回溯相容性。 如果您使用 aks-engine 版本 0.60.x 來部署,則建議使用版本0.60.x 來執行憑證輪替流程。此時不支援從 Key Vault 擷取新的憑證集合。
使用可靠的網路連線。
aks-engine rotate-certs
需要執行多個遠端命令,這些命令可能會失敗,通常是因為叢集節點的連線不可靠。 執行aks-engine rotate-certs
(來自在目標 Azure Stack 戳記上執行的 VM),可減少暫時性問題的發生次數。
參數
參數 | 必要 | 描述 |
---|---|---|
--api-model | yes | API 模型 (叢集定義) 的相對路徑會宣告預期的叢集設定。 |
--ssh-host | yes | 可觸達叢集中所有節點的 SSH 接聽程式完整網域名稱 (FQDN) 或 IP 位址。 |
--linux-ssh-private-key | yes | 用來存取叢集 Linux 節點的有效私人 SSH 金鑰路徑。 |
--location | yes | 部署叢集的 Azure 位置。 |
--subscription-id | yes | 部署叢集基礎結構的 Azure 訂用帳戶。 |
--resource-group | yes | 部署叢集基礎結構的 Azure 資源群組。 |
--client-id | 視情況而定 | 服務主體用戶端識別碼。 如果 auth-method 設定為 client_secret 或 client_certificate,則為必要項。 |
--client-secret | 視情況而定 | 服務主體用戶端祕密。 如果 auth-method 設定為 client_secret,則為必要項。 |
--azure-env | 視情況而定 | 目標雲端名稱。 如果目標雲端為 AzureCloud,則為選擇性。 |
--certificate-profile | 否 | JSON 檔案的相對路徑包含新的憑證集合。 |
--force | 否 | 即使 API 伺服器沒有回應,仍會強制執行。 |
輪替憑證的簡單步驟
針對 AKS 引擎版本 0.75.3 和更新版本,一旦您閱讀所有 需求, aks-engine-azurestack rotate-certs
請使用適當的引數執行, (請參閱下列) 。
針對 AKS 引擎 0.73.0 版和更新版本,一旦您閱讀所有 需求,請使用適當的引數執行 aks-engine rotate-certs
:
./bin/aks-engine rotate-certs \
--location <resource-group-location> \
--api-model <generated-apimodel.json> \
--linux-ssh-private-key <private-SSH-key> \
--ssh-host <apiserver-URI> \
--resource-group <resource-group-name> \
--client-id <service-principal-id> \
--client-secret <service-principal-secret> \
--subscription-id <subscription-id> \
--azure-env <cloud-name>
例如:
./bin/aks-engine rotate-certs \
--location "westus2" \
--api-model "_output/my-cluster/apimodel.json" \
--linux-ssh-private-key "~/.ssh/id_rsa" \
--ssh-host "my-cluster.westus2.cloudapp.azure.com"\
--resource-group "my-cluster" \
--client-id "12345678-XXXX-YYYY-ZZZZ-1234567890ab" \
--client-secret "12345678-XXXX-YYYY-ZZZZ-1234567890ab" \
--subscription-id "12345678-XXXX-YYYY-ZZZZ-1234567890ab" \
--azure-env "AzureStackCloud" # optional if targeting AzureCloud
輪替 front-proxy
憑證
注意
針對 AKSe 0.75.3 版和更新版本,憑證輪替的命令會以 aks-engine-azurestack
開頭,而不是 aks-engine
。
AKS 引擎會針對 front-proxy
建立個別的 PKI,作為節點啟動程序的一部份,並透過 etcd
,將其傳遞至所有節點。 若要有效地重複使用這項功能,rotate-certs
必須取代儲存在 etcd
中的憑證。 front-proxy
憑證會在 30 年後到期。 aks-engine rotate-certs
輪替前端 Proxy 憑證。
疑難排解
注意
針對 AKSe 0.75.3 版和更新版本,憑證輪替的命令會以 aks-engine-azurestack
開頭,而不是 aks-engine
。
如果因為失敗或暫時性問題(例如網路連線能力),而在完成前中止憑證輪替流程,則可以使用 --force
旗標,安全地重新執行 aks-engine rotate-certs
。
另請注意,aks-engine rotate-certs
會記錄 /var/log/azure/rotate-certs.log
(Linux) 和 c:\\k\\rotate-certs.log
(Windows) 檔案中每個步驟的輸出。
如需此作業或進階自訂的幕後詳細資訊,請參閱幕後。
後續步驟
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應