本文說明如何為 Google Distributed Cloud 中的使用者叢集設定準備好的憑證。
準備好憑證後,您就可以將使用者叢集的憑證儲存在管理員叢集的 Secrets 中。這樣做可確保安全,因為您不必在建立使用者叢集時,將密碼和服務帳戶金鑰保留在管理工作站上。
請注意,進階叢集有下列限制:
- 1.31 版:進階叢集不支援準備好的憑證。
- 1.32 以上版本:進階叢集支援準備好的憑證。
請預先在管理員叢集中準備密鑰。然後在建立使用者叢集時,您可以指定要從管理員叢集中準備好的 Secret 取得特定憑證。您也可以在使用者叢集中輪替憑證時,使用準備好的 Secrets。
事前準備
如果還沒有管理員叢集,請建立一個。
程序總覽
填入 Secrets 設定檔。
在管理員叢集中建立密鑰群組。每個 Secret 群組都位於自己的 Kubernetes 命名空間中。
建立使用者叢集。在使用者叢集設定檔中,指出您希望從管理員叢集特定命名空間的密鑰取得憑證。
視需要建立其他密鑰群組和密鑰版本。
視需要更新現有使用者叢集的憑證。
視需要建立其他使用者叢集。在每個使用者叢集設定檔中,指定 Secrets 命名空間。您也可以指定要用於特定憑證的 Secret 版本。
填寫密鑰設定檔
產生 Secrets 設定檔的範本:
gkectl create-config secrets
上述指令會產生名為 secrets.yaml
的檔案。您可以視需要變更這個檔案的名稱和位置。
請先閱讀「Secrets 設定檔」文件,熟悉設定檔。建議您在另一個分頁或視窗中開啟這份文件。
在 Secrets 設定檔中,填入與您情況相關的值。你必須填入以 gke-onprem-secrets-
開頭的 namespace
值。
以下是 Secrets 設定檔範例,其中包含一個 Secret 群組。這個群組有 vCenter 憑證的值,以及四個服務帳戶金鑰:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-user-cluster-1" secrets vCenter: username: "my-vcenter-account" password: "U$icUKEW#INE" componentAccessServiceAccount: serviceAccountKeyPath: "my-key-folder/component-access-key.json" registerServiceAccount: serviceAccountKeyPath: "my-key-folder/connect-register-key.json" stackdriverServiceAccount: serviceAccountKeyPath: "my-key-folder/log-mon-key.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "my-key-folder/audit-log-key.json"
建立準備好的 Secret
在管理員叢集中建立準備好的密鑰:
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG
更改下列內容:
ADMIN_CLUSTER_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑
SECRETS_CONFIG:Secrets 設定檔的路徑
查看準備好的密鑰
在管理員叢集中列出準備好的密鑰:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
輸出內容範例:
The following secrets have been found: - namespace: gke-onprem-secrets-user-cluster-1 - secrets with name prefix: component-access-sa-creds name: component-access-sa-creds.1, version 1, age: 58s - secrets with name prefix: cloud-audit-logging-service-account-creds name: cloud-audit-logging-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: register-service-account-creds name: register-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: stackdriver-service-account-creds name: stackdriver-service-account-creds.1, version: 1, age: 58s - secrets with name prefix: vsphere-creds name: vsphere-creds.1, version: 1, age: 58s
您也可以執行 kubectl get secrets
,列出命名空間中的密鑰。例如:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets --namespace gke-onprem-secrets-user-cluster-1
輸出內容範例:
component-access-sa-creds ... cloud-audit-logging-service-account-creds ... register-service-account-creds.1 ... stackdriver-service-account-creds.1 ... vsphere-creds.1 ...
在上述輸出內容中,您可以看到每個密鑰名稱都有擴充功能,指出密鑰版本。在本範例中,所有密鑰的版本都是 1。
建立使用者叢集
按照「建立使用者叢集」中的操作說明操作。
填寫使用者叢集設定檔時,請輸入 preparedSecrets.namespace
的值。這個值必須與您先前在 Secrets 設定檔中指定的命名空間相符。
範例:
preparedSecrets: namespace: "gke-onprem-secrets-user-cluster-1"
在使用者叢集設定檔中,請勿為下列欄位指定值。Google Distributed Cloud 會從您準備的 Secret 取得憑證和金鑰,因此不需要這些欄位。
vCenter.credentials.fileRef.path
componentAccessServiceAccountKeyPath
loadBalancer.f5BigIP.credentials.fileRef.path
gkeConnect.registerServiceAccountKeyPath
stackdriver.serviceAccountKeyPath
usageMetering.bigQueryServiceAccountKeyPath
cloudAuditLogging.serviceAccountKeyPath
privateRegistry.credentials.fileRef.path
在使用者叢集設定檔中,指定您打算使用的已準備 Secret 版本。以下範例會為五個密鑰分別指定版本 1:
vCenter: credentials: secretRef: version "1" ... componentAccessServiceAccountKey: secretRef: version: "1" ... gkeConnect: registerServiceAccountKey: secretRef: version: "1" ... stackdriver: serviceAccountKey: secretRef: version: "1" ... cloudAuditLogging: serviceAccountKey: secretRef: version: "1"
version
的值必須是整數字串或「latest」字串。如未指定 version
的值,系統會使用最新版本。
按照「建立使用者叢集」一文中的說明,完成使用者叢集的建立作業。
建立其他準備好的密鑰
本節說明如何在現有命名空間中建立部分 Secret 的第 2 版。
建立名為 secrets-2.yaml
的新密鑰設定檔。指定現有命名空間,並提供所選 Secret 的憑證。
範例:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-user-cluster-1" secrets: stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-2.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-2.json"
上述範例提供 gke-onprem-secrets-user-cluster-1
命名空間中下列 Secrets 的金鑰路徑。
- 第 2 版
stackdriver-service-account-creds
Secret - 第 2 版
cloud-audit-logging-service-account-creds
Secret
建立新的 Secret:
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml
在管理員叢集中列出準備好的密鑰:
gkectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG list secrets
輸出內容範例:
The following secrets have been found: - namespace: gke-onprem-secrets-user-cluster-1 - secrets with name prefix: component-access-sa-creds name: component-access-sa-creds.1, version 1, age: 11h - secrets with name prefix: cloud-audit-logging-service-account-creds name: cloud-audit-logging-service-account-creds.1, version: 1, age: 11h name: cloud-audit-logging-service-account-creds.2, version: 2, age: 33m - secrets with name prefix: register-service-account-creds name: register-service-account-creds.1, version: 1, age: 11h - secrets with name prefix: stackdriver-service-account-creds name: stackdriver-service-account-creds.1, version: 1, age: 11h name: stackdriver-service-account-creds.2, version: 2, age: 33m - secrets with name prefix: vsphere-creds name: vsphere-creds.1, version: 1, age: 11h
在上述輸出內容中,您可以看到有兩個版本的 stackdriver-service-account-creds
Secret 和兩個版本的 cloud-audit-logging-service-account-creds
Secret。
輪替使用者叢集的憑證
本節說明如何為現有使用者叢集輪替所選憑證。
輪替憑證前,請先檢查叢集目前使用的 Secret 版本:
gkectl list secrets cluster --cluster-name USER_CLUSTER_NAME kubeconfig ADMIN_CLUSTER_KUBECONFIG
輸出內容範例:
The following prepared secrets have been used for cluster "user-cluster-1": - namespace: gke-onprem-secrets-user-cluster-1 secret: vsphere-creds.1, version: 1 secret: f5-creds.1, version: 1 secret: component-access-sa-creds.1, version 1 secret: register-service-account-creds.1, version: 1 secret: stackdriver-service-account-creds.1, version: 1 secret: cloud-audit-logging-service-account-creds.1, version: 1
將使用者叢集設定檔複製到名為 user-cluster-update.yaml
的檔案。
在 user-cluster-update.yaml
中新增 serviceAccountKey
區段。舉例來說,以下範例在 stackdriver
和 cloudAuditLogging
下方都有 serviceAccountKey
區段:
stackdriver: projectID: "my-project-123" clusterLocation: "us-central1" serviceAccountKey: secretRef: version: "2" cloudAuditLogging: projectID: "my-project-123" clusterLocation: "us-central-1" serviceAccountKey: secretRef: version: "latest"
上例指定更新使用者叢集時,將使用下列項目:
第 2 版
stackdriver-service-account-creds
Secret最新版本的
cloud-audit-logging-service-account-creds
Secret。 在本例中,即為版本 2。
更新使用者叢集的憑證:
gkectl update credentials stackdriver --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml gkectl update credentials cloudauditlogging --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config user-cluster-2.yaml
現在使用者叢集會使用下列準備好的 Secret:
- 《
vsphere-creds
》第 1 版 - 《
component-access-sa-creds
》第 1 版 - 《
register-service-account-creds
》第 1 版 stackdriver-service-account-creds
的第 2 版cloud-audit-logging-service-account-creds
的第 2 版
建立其他密鑰和使用者叢集
如果您打算建立其他使用者叢集,請考慮如何整理準備好的密鑰。您可能想為每個使用者叢集,在管理員叢集中建立個別的命名空間。或者,您可能想為多個或所有使用者叢集共用同一個準備好的 Secret 命名空間。
舉例來說,假設小艾、小柏和小若各有一個使用者叢集。您可以建立三個 Secret 群組,如本例所示:
apiVersion: v1 kind: ClusterSecrets secretGroups: - namespace: "gke-onprem-secrets-alice" secrets: vCenter: username: "alice" password: "zC7r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-a.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-a.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-a.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-a.json" - namespace: "gke-onprem-secrets-bob" secrets: vCenter: username: "bob" password: "zC8r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-b.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-b.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-b.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-b.json" - namespace: "gke-onprem-secrets-carol" secrets: vCenter: username: "carol" password: "zC9r^URDPq2t" componentAccessServiceAccount: serviceAccountKeyPath: "component-access-sa-c.json" registerServiceAccount: serviceAccountKeyPath: "register-sa-c.json" stackdriverServiceAccount: serviceAccountKeyPath: "log-mon-sa-c.json" cloudAuditLoggingServiceAccount: serviceAccountKeyPath: "audit-log-sa-c.json"
隨著時間推移,您可以在每個密鑰群組中建立其他密鑰版本。
在使用者叢集設定檔中,提供 serviceAccountKey.secretRef.version
的值,指定要使用的 Secret 版本。您可以將值設為 "latest"
、空字串或整數字串。
舉例來說,假設所有密鑰都有版本 1、2 和 3。假設這是 Alice 的使用者叢集設定檔部分內容。
apiVersion: v1 kind: UserCluster name: "user-cluster-alice" preparedSecrets: namespace: "gke-onprem-secrets-alice" ... vCenter: credentials: gkeConnect: projectID: "project-a" serviceAccountKey: secretRef: version: "2" stackdriver: projectID: "project-a" clusterLocation: "us-central1" serviceAccountKey: secretRef: version: "latest" cloudAuditLogging: projectID: "project-a" clusterLocation: "us-central-1" serviceAccountKey: secretRef: version: ""
在上述範例中,我們可以看到:
vCenter 未指定
secretRef
,因此叢集會使用gke-onprem-secrets-alice
命名空間中最新版本的vsphere-creds
Secret。叢集會使用
gke-onprem-secrets-alice
命名空間中的register-service-account-creds
Secret 第 2 版。叢集會使用
gke-onprem-secrets-alice
命名空間中最新版本的stackdriver-service-account-creds
Secret。在本例中,即為第 3 版。cloudAuditLogging
的版本為空字串,因此叢集會使用gke-onprem-secrets-alice
命名空間中cloud-audit-logging-service-account-creds
Secret 的最新版本。在本例中,即為第 3 版。元件存取服務帳戶未指定
secretRef.version
,因此叢集會使用最新版本。
刪除準備好的 Secret
如要列出所有準備好的 Secret 及其命名空間,請執行下列指令:
gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG
如果沒有任何使用者叢集使用準備好的 Secret 命名空間,您可以刪除該命名空間。
如要刪除準備好的 Secret 命名空間和其中的所有 Secret,請按照下列步驟操作:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
如果沒有任何使用者叢集使用個別準備的 Secret,您可以刪除該 Secret。
如要刪除個別準備好的密鑰,請按照下列步驟操作:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --secret-name SECRET