์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์ค€๋น„๋œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ๊ตฌ์„ฑ

์ด ๋ฌธ์„œ์—์„œ๋Š” Google Distributed Cloud์—์„œ ์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•œ ์ค€๋น„๋œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ค€๋น„๋œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ๊ด€๋ฆฌ์ž ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ณด์•ˆ ๋น„๋ฐ€์— ์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ์˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ฐ ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค๋ฅผ ๊ด€๋ฆฌ์ž ์›Œํฌ์Šคํ…Œ์ด์…˜์— ๋ณด๊ด€ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๋ณด์•ˆ ์š”์†Œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๊ด€๋ฆฌ์ž ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ ์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ด€๋ฆฌ์ž ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ค€๋น„๋œ ๋ณด์•ˆ ๋น„๋ฐ€์—์„œ ํŠน์ • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์ˆœํ™˜ํ•  ๋•Œ ์ค€๋น„๋œ ๋ณด์•ˆ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

์•„์ง ๋งŒ๋“ค์ง€ ์•Š์•˜์œผ๋ฉด ๊ด€๋ฆฌ์ž ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ ˆ์ฐจ ๊ฐœ์š”

  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"

์‚ฌ์šฉ์ž ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋‹ค์Œ ํ•„๋“œ์˜ ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. Google Distributed Cloud๊ฐ€ ์ค€๋น„๋œ ๋ณด์•ˆ ๋น„๋ฐ€์—์„œ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด์™€ ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • 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 ์„น์…˜์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์˜ˆ์‹œ์—๋Š” 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

  • 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