在 Azure Stack Hub 上使用 AKS 引擎輪替 Kubernetes 憑證

本文件提供在現有 AKS 引擎叢集上輪替憑證的指導,以及採用 aks-engine rotate-certs 作為工具的建議。

Prerequisites

本指南假設您已使用 AKS 引擎部署叢集,且叢集處於健全狀態。

規劃憑證輪替

考慮使用此功能時,請注意,在更新、驗證和重新開機步驟期間將無法使用 Kubernetes 控制平面。 請據此規劃維護作業。 此外,在生產環境中嘗試執行此作業前,請先使用相同的設定,在預備環境中執行此作業。

嘗試此作業前,請先參閱下列考量:

注意

針對 AKSe 0.75.3 版和更新版本,憑證輪替的命令會以 aks-engine-azurestack 開頭,而不是 aks-engine

  • 您需要存取由 aks-engine deployaks-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) 檔案中每個步驟的輸出。

如需此作業或進階自訂的幕後詳細資訊,請參閱幕後

後續步驟