本文說明如何為 Google Distributed Cloud 中的使用者叢集設定準備好的憑證。
準備好憑證後,您就可以將使用者叢集的憑證儲存在管理員叢集的 Secrets 中。這項功能可提供安全保障,因為您不必在管理工作站上保留密碼和服務帳戶金鑰,即可建立使用者叢集。
請注意,進階叢集有下列限制:
- 1.31 版:進階叢集不支援準備好的憑證。
- 1.32 以上版本:進階叢集支援預先準備的憑證。
請預先在管理員叢集中準備密鑰。然後在建立使用者叢集時,您可以指定要從管理員叢集中準備好的 Secret 取得特定憑證。在使用者叢集中輪替憑證時,也可以使用準備好的 Secrets。
事前準備
如果還沒有管理員叢集,請建立管理員叢集。
程序總覽
填入 Secrets 設定檔。
在管理員叢集中建立密鑰群組。每個 Secret 群組都位於自己的 Kubernetes 命名空間中。
建立使用者叢集。在使用者叢集設定檔中,指出您希望從管理員叢集特定命名空間的密鑰取得憑證。
視需要建立其他 Secret 群組和 Secret 版本。
視需要更新現有使用者叢集的憑證。
視需要建立其他使用者叢集。在每個使用者叢集設定檔中,指定 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
在管理員叢集中建立準備好的 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 ...
在上述輸出內容中,您可以看到每個 Secret 名稱都有擴充功能,指出 Secret 的版本。在本例中,所有 Secret 的版本都是 1。
建立使用者叢集
按照「建立使用者叢集」中的操作說明操作。
填寫使用者叢集設定檔時,請輸入 preparedSecrets.namespace 的值。這個值必須與您先前在 Secrets 設定檔中指定的命名空間相符。
範例:
preparedSecrets: namespace: "gke-onprem-secrets-user-cluster-1"
在使用者叢集設定檔中,請勿為下列欄位指定值。Google Distributed Cloud 會從您準備的 Secret 取得憑證和金鑰,因此不需要這些欄位。
vCenter.credentials.fileRef.pathcomponentAccessServiceAccountKeyPathloadBalancer.f5BigIP.credentials.fileRef.pathgkeConnect.registerServiceAccountKeyPathstackdriver.serviceAccountKeyPathusageMetering.bigQueryServiceAccountKeyPathcloudAuditLogging.serviceAccountKeyPathprivateRegistry.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-credsSecret - 第 2 版
cloud-audit-logging-service-account-credsSecret
建立新的 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-credsSecret最新版
cloud-audit-logging-service-account-credsSecret。 在本範例中,即為版本 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"
隨著時間推移,您可以在每個 Secret 群組中建立其他版本的 Secret。
在使用者叢集設定檔中,提供 serviceAccountKey.secretRef.version 的值,指定要使用的 Secrets 版本。您可以將值設為 "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-credsSecret。叢集會使用
gke-onprem-secrets-alice命名空間中的register-service-account-credsSecret 第 2 版。叢集會使用
gke-onprem-secrets-alice命名空間中最新版本的stackdriver-service-account-credsSecret。在本例中,即為第 3 版。cloudAuditLogging的版本為空字串,因此叢集會使用gke-onprem-secrets-alice命名空間中cloud-audit-logging-service-account-credsSecret 的最新版本。在本例中,這是指第 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