このドキュメントでは、GKE on VMware のユーザー クラスタ用に準備された認証情報を構成する方法について説明します。
準備された認証情報を使用すると、管理クラスタで Secret にユーザー クラスタ用の認証情報を保存できます。これにより、セキュリティ要素が提供されます。これは、ユーザー クラスタの作成時に、管理ワークステーションにパスワードとサービス アカウント キーを保持する必要がないためです。
Secret は、管理クラスタで事前に準備します。その後、ユーザー クラスタを作成する際、管理クラスタに準備された Secret から特定の認証情報を取得するように指定できます。ユーザー クラスタで認証情報をローテーションするときに、準備された Secret を使用することもできます。
始める前に
管理クラスタを作成します(まだ作成していない場合)。
手順の概要
Secret 構成ファイルに入力します。
管理クラスタで、Secret のグループを作成します。各 Secret グループは、独自の Kubernetes 名前空間にあります。
ユーザー クラスタを作成する。ユーザー クラスタの構成ファイルで、管理クラスタ内の特定の名前空間の Secret から認証情報を取得するように指定します。
必要に応じて、追加の Secret グループと Secret の追加バージョンを作成します。
必要に応じて、既存のユーザー クラスタの認証情報を更新します。
必要に応じて、追加のユーザー クラスタを作成します。各ユーザー クラスタの構成ファイルで、Secret の名前空間を指定します。特定の認証情報に使用する Secret のバージョンを指定することもできます。
Secret 構成ファイルに入力する
Secret 構成ファイルのテンプレートを生成する。
gkectl create-config secrets
上記のコマンドにより、secrets.yaml
という名前のファイルが生成されます。このファイルの名前と場所は必要に応じて変更できます。
Secret 構成ファイルのドキュメントを読み、構成ファイルの内容を把握します。このドキュメントは、別のタブやウィンドウで開くこともできます。
Secret の構成ファイルに、実際の状況に合う値を入力します。namespace
には gke-onprem-secrets-
で始まる値を記入する必要があります。
以下に、Secret のグループが 1 つ存在する Secret 構成ファイルの例を示します。グループには、vCenter 認証情報と 4 つのサービス アカウント キーの値があります。
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: Secret 構成ファイルのパス
準備された Secret の表示
管理クラスタで準備しれた Secret を一覧表示します。
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
を実行して、名前空間内の Secret を一覧表示することもできます。次に例を示します。
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
の値を入力します。この値は、Secret 構成ファイルで前に指定した名前空間と一致する必要があります。
例:
preparedSecrets: namespace: "gke-onprem-secrets-user-cluster-1"
ユーザー クラスタの構成ファイルでは、次のフィールドに値を指定しないでください。GKE on VMware は準備した Secret から認証情報と鍵を取得するため、これらのフィールドは不要です。
vCenter.credentials.fileRef.path
componentAccessServiceAccountKeyPath
loadBalancer.f5BigIP.credentials.fileRef.path
gkeConnect.registerServiceAccountKeyPath
stackdriver.serviceAccountKeyPath
usageMetering.bigQueryServiceAccountKeyPath
cloudAuditLogging.serviceAccountKeyPath
privateRegistry.credentials.fileRef.path
ユーザー クラスタの構成ファイルで、使用する準備済み Secret のバージョンを指定します。次の例では、5 つの 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 の Secret をいくつか作成する方法について説明します。
secrets-2.yaml
という名前の新しい Secret 構成ファイルを作成します。既存の名前空間を指定し、選択した 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
名前空間内の次の Secret のキーパスを示します。
stackdriver-service-account-creds
Secret のバージョン 2cloud-audit-logging-service-account-creds
Secret のバージョン 2
新しい Secret を作成します。
gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config secrets-2.yaml
管理クラスタで準備しれた Secret を一覧表示します。
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
上記の出力では、2 つのバージョンの stackdriver-service-account-creds
Secret と 2 つのバージョンの 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"
上の例では、ユーザー クラスタを更新する際に以下を使用するように指定しています。
stackdriver-service-account-creds
バージョン 2 の Secretcloud-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 を使用するようになりました。
- バージョン 1 の
vsphere-creds
- バージョン 1 の
component-access-sa-creds
- バージョン 1 の
register-service-account-creds
- バージョン 2 の
stackdriver-service-account-creds
- バージョン 2 の
cloud-audit-logging-service-account-creds
追加の Secret とユーザー クラスタを作成する
追加のユーザー クラスタを作成する予定がある場合は、準備した Secret の整理方法を検討してください。管理クラスタには、ユーザー クラスタごとに個別の名前空間を作成することができます。あるいは、複数またはすべてのユーザー クラスタに対して、同じ準備した Secret の名前空間を共有することもできます。
たとえば、Alice、Bob、Carol のそれぞれがユーザー クラスタを持つとします。次の例に示すように、3 つの 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
の値を指定して、使用する Secret のバージョンを指定します。値は "latest"
、空の文字列、または整数文字列に設定できます。
たとえば、すべての Secret がバージョン 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 を削除できます。
準備された個々の Secret を削除するには:
gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --secret-name SECRET