사용자 클러스터에 대해 준비된 사용자 인증 정보 구성

이 문서에서는 VMware용 GKE에서 사용자 클러스터에 대해 준비된 사용자 인증 정보를 구성하는 방법을 보여줍니다.

준비된 사용자 인증 정보가 있으면 관리자 클러스터의 보안 비밀에 사용자 클러스터의 사용자 인증 정보를 저장할 수 있습니다. 이렇게 하면 사용자 클러스터를 만들 때 비밀번호 및 서비스 계정 키를 관리자 워크스테이션에 보관할 필요가 없으므로 하나의 보안 요소가 제공됩니다.

미리 관리자 클러스터에서 보안 비밀을 준비합니다. 그런 후 사용자 클러스터를 만들 때 관리자 클러스터의 준비된 보안 비밀에서 특정 사용자 인증 정보를 가져오도록 지정할 수 있습니다. 또한 사용자 클러스터에서 사용자 인증 정보를 순환할 때 준비된 보안 비밀을 사용할 수도 있습니다.

시작하기 전에

아직 만들지 않았으면 관리자 클러스터를 만듭니다.

절차 개요

  1. 보안 비밀 구성 파일을 작성합니다.

  2. 관리자 클러스터에서 보안 비밀 그룹을 만듭니다. 각 보안 비밀 그룹은 자체 Kubernetes 네임스페이스에 있습니다.

  3. 사용자 클러스터를 만듭니다. 사용자 클러스터 구성 파일에서 관리자 클러스터의 특정 네임스페이스에 있는 보안 비밀에서 사용자 인증 정보를 가져오도록 표시합니다.

  4. 필요에 따라 추가 보안 비밀 그룹과 추가 보안 비밀 버전을 만듭니다.

  5. 필요에 따라 기존 사용자 클러스터에 대해 사용자 인증 정보를 업데이트합니다.

  6. 원하는 대로 추가 사용자 클러스터를 만듭니다. 각 사용자 클러스터 구성 파일에 보안 비밀 네임스페이스를 지정합니다. 또한 특정 사용자 인증 정보에 사용하려는 보안 비밀의 버전을 지정할 수 있습니다.

보안 비밀 구성 파일 작성

보안 비밀 구성 파일의 템플릿을 생성합니다.

gkectl create-config secrets

위 명령어는 secrets.yaml이라는 파일을 생성합니다. 원하는 경우 이 파일의 이름과 위치를 변경할 수 있습니다.

보안 비밀 구성 파일 문서를 살펴보고 구성 파일을 숙지합니다. 이 문서를 개별 탭 또는 창으로 열어 두는 것이 좋습니다.

보안 비밀 구성 파일에서 해당 상황에 적합한 값을 입력합니다. gke-onprem-secrets-로 시작하는 namespace 값을 입력해야 합니다.

다음은 보안 비밀 그룹이 하나 있는 보안 비밀 구성 파일 예시입니다. 이 그룹에는 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"

준비된 보안 비밀 만들기

관리자 클러스터에 준비된 보안 비밀을 만듭니다.

gkectl prepare secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG --secret-config SECRETS_CONFIG

다음을 바꿉니다.

  • ADMIN_CLUSTER_KUBECONFIG: 관리자 클러스터 kubeconfig 파일의 경로입니다.

  • SECRETS_CONFIG: 보안 비밀 구성 파일의 경로입니다.

준비된 보안 비밀 보기

관리자 클러스터의 준비된 보안 비밀을 나열합니다.

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 값을 입력합니다. 이 값은 보안 비밀 구성 파일에 이전에 지정한 네임스페이스와 일치해야 합니다.

예를 들면 다음과 같습니다.

preparedSecrets:
  namespace: "gke-onprem-secrets-user-cluster-1"

사용자 클러스터 구성 파일에 다음 필드의 값을 지정하지 마세요. VMware용 GKE가 준비된 보안 비밀에서 사용자 인증 정보 및 키를 가져오므로 이러한 필드가 필요하지 않습니다.

  • vCenter.credentials.fileRef.path
  • componentAccessServiceAccountKeyPath
  • loadBalancer.f5BigIP.credentials.fileRef.path
  • gkeConnect.registerServiceAccountKeyPath
  • stackdriver.serviceAccountKeyPath
  • usageMetering.bigQueryServiceAccountKeyPath
  • cloudAuditLogging.serviceAccountKeyPath
  • privateRegistry.credentials.fileRef.path

사용자 클러스터 구성 파일에서 사용하려는 준비된 보안 비밀의 버전을 지정합니다. 다음은 보안 비밀 5개 각각에 대해 버전 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 값을 지정하지 않으면 최신 버전이 사용됩니다.

사용자 클러스터 만들기에 설명된 대로 사용자 클러스터 만들기를 완료합니다.

준비된 추가 보안 비밀 만들기

이 섹션에서는 기존 네임스페이스에서 일부 보안 비밀의 버전 2를 만드는 방법을 보여줍니다.

secrets-2.yaml이라는 새로운 보안 비밀 구성 파일을 만듭니다. 기존 네임스페이스를 지정하고 선택한 보안 비밀에 대해 사용자 인증 정보를 제공합니다.

예를 들면 다음과 같습니다.

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 네임스페이스에서 다음 보안 비밀의 키 경로를 제공합니다.

  • stackdriver-service-account-creds 보안 비밀의 버전 2
  • cloud-audit-logging-service-account-creds 보안 비밀의 버전 2

새 보안 비밀을 만듭니다.

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 보안 비밀의 2개 버전과 cloud-audit-logging-service-account-creds 보안 비밀의 2개 버전이 있는 것을 알 수 있습니다.

사용자 클러스터에 대한 사용자 인증 정보 순환

이 섹션에서는 기존 사용자 클러스터에 대해 선택한 사용자 인증 정보를 순환하는 방법을 보여줍니다.

사용자 인증 정보를 순환하기 전에 클러스터에 사용된 현재 보안 비밀 버전을 확인합니다.

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 섹션을 추가합니다. 예를 들어 다음 예시에는 stackdrivercloudAuditLogging 아래에 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

  • cloud-audit-logging-service-account-creds 보안 비밀의 최신 버전. 이 예시에서는 버전 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

이제 사용자 클러스터에 다음과 같은 준비된 보안 비밀이 사용됩니다.

  • 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

추가 보안 비밀 및 사용자 클러스터 만들기

추가 사용자 클러스터를 만들려면 준비된 보안 비밀을 구성할 방법을 고려해야 합니다. 각 사용자 클러스터에 대해 관리자 클러스터에 개별 네임스페이스를 만들어야 할 수 있습니다. 또는 여러 또는 모든 사용자 클러스터에 대해 동일한 준비된 보안 비밀 네임스페이스를 공유해야 할 수 있습니다.

예를 들어 Alice, Bob, Carol에게 각각 하나의 사용자 클러스터가 포함된다고 가정해보세요. 이 예시에 표시된 것처럼 3개의 보안 비밀 그룹을 만들 수 있습니다.

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에 대한 값을 제공하여 사용하려는 보안 비밀의 버전을 지정합니다. 값을 "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가 지정되지 않았으므로 클러스터가 vsphere-creds 보안 비밀의 최신 버전을 gke-onprem-secrets-alice 네임스페이스에 사용합니다.

  • 클러스터가 gke-onprem-secrets-alice 네임스페이스에서 register-service-account-creds 보안 비밀의 버전 2를 사용합니다.

  • 클러스터가 gke-onprem-secrets-alice 네임스페이스에서 stackdriver-service-account-creds 보안 비밀의 최신 버전을 사용합니다. 이 예시에서는 버전 3입니다.

  • cloudAuditLogging의 버전이 빈 문자열이므로 클러스터가 gke-onprem-secrets-alice 네임스페이스에서 cloud-audit-logging-service-account-creds 보안 비밀의 최신 버전을 사용합니다. 이 예시에서는 버전 3입니다.

  • 구성요소 액세스 서비스 계정에 secretRef.version이 지정되지 않았으므로 클러스터가 최신 버전을 사용합니다.

준비된 보안 비밀 삭제

준비된 모든 보안 비밀과 네임스페이스를 나열하려면 다음 안내를 따르세요.

gkectl list secrets --kubeconfig ADMIN_CLUSTER_KUBECONFIG

준비된 보안 비밀 네임스페이스가 사용자 클러스터에서 사용되지 않는 경우 네임스페이스를 삭제할 수 있습니다.

준비된 보안 비밀 네임스페이스와 그 안의 모든 보안 비밀을 삭제하려면 다음 안내를 따르세요.

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG

준비된 개별 보안 비밀이 사용자 클러스터에서 사용되지 않는 경우 보안 비밀을 삭제할 수 있습니다.

준비된 개별 보안 비밀을 삭제하려면 다음 안내를 따르세요.

gkectl delete secret –namespace PREPARED_SECRET_NAMESPACE \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --secret-name SECRET