Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ /
Atlas 쿠버네티스 운영자
/

시크릿 스토리지 구성

Atlas Kubernetes Operator 관리하는 구성 요소에 대한 민감한 정보를 저장 위치를 선택할 수 있지만, Atlas Kubernetes Operator 예상하는 Kubernetes 시크릿 을 찾아야 합니다. 다음 방법을 포함하여 여러 가지 방법으로 Atlas Kubernetes Operator 의 시크릿을 저장 수 있습니다.

  • 민감한 정보를 Kubernetes 시크릿에 직접 입력하세요. Atlas Kubernetes Operator 설명서의 모든 튜토리얼은 기본값 으로 Kubernetes 시크릿을 사용합니다. Kubernetes 시크릿을 사용하려면 튜토리얼의 단계를 따르세요.

  • GitOps 흐름에 따라 민감한 정보를 Github 리포지토리 에 넣습니다. 민감한 데이터를 git에 안전하게 저장 하려면 의도한 대상 클러스터 의 시크릿을 암호화하는 'Sealed Secrets'와 같은 도구를 사용할 수 있습니다.

  • 민감한 정보는 HashiCorp Vault 또는 하이퍼스케일러 네이티브 비밀 관리 솔루션과 같은 외부 비밀 저장 도구에 보관하세요. 중간 시크릿 프로비저닝 도구는 외부 시크릿 저장 도구에서 민감한 정보를 가져와서 민감한 정보로부터 Kubernetes 시크릿을 생성합니다. 시크릿 프로비저닝 도구에 대해 자세히 학습 고려 사항을 참조하세요.

이 튜토리얼에서는 Atlas Kubernetes Operator와 함께 사용할 외부 비밀 저장소 도구를 설정합니다. 이 튜토리얼에서는 Atlas Kubernetes Operator가 시크릿을 Kubernetes 클러스터에 프로비저닝하기 위해 시크릿을 생성하고 저장할 필요가 없는 '시크릿이 없는' 설정에 중점을 둡니다.

다음 튜토리얼에서는 다음 도구 및 옵션을 설치하거나 구성합니다.

  • 시크릿 프로비저닝 도구입니다. 시크릿 프로비저닝 도구는 하나 이상의 인증 메커니즘을 사용하여 시크릿 관리 서비스에서 자격 증명 조회 하고 Atlas Kubernetes Operator 사용할 수 있는 시크릿을 생성합니다. 이 튜토리얼에서는 다음 오픈 소스 시크릿 프로비저닝 도구 중 하나를 설치합니다.

  • 시크릿 액세스 위한 인증. 다양한 방법을 사용하여 HashiCorp Vault의 시크릿 액세스 할 수 있는 서비스 계정 및 네임스페이스를 인증할 수 있습니다.

    • External Secrets Operator의 경우 이 튜토리얼에서는 OIDC JWT 인증 사용합니다. 자세한 학습 은 JWT/OIDC 인증 참조하세요.

    • Secrets Store CSI 드라이버 의 경우 이 튜토리얼에서는 Kubernetes 인증 사용합니다.

    또는 클라우드 공급자의 KMS 에서 네이티브 IAM 시스템을 사용하여 이러한 인증을 제공할 수 있지만, 이는 이 튜토리얼에서 다루지 않습니다. 인증을 위해 클라우드 공급자의 KMS 를 구성하는 방법을 알아보려면 External Secrets 연산자 설명서에서 다음 리소스를 참조하세요.

이 튜토리얼을 완료하려면 다음 도구와 구성이 필요합니다.

  • Kubernetes, Atlas Kubernetes Operator, Atlas에 대한 서비스 계정을 실행하고 이를 구성할 수 있는 충분한 권한.

    x86-64, AMD64 또는 ARM64 아키텍처의 프로세서를 실행하는 노드가 포함된 실행 중인 Kubernetes cluster가 필요합니다. 이 튜토리얼에서 Kubernetes cluster는 기본 포트(443)에서 수신 대기 중인 https://kube01.internal.io 입니다.

    GitHub에서 Atlas Kubernetes Operator 프로젝트에 액세스할 수 있습니다.

    Atlas CLI를 사용하여 Atlas Kubernetes Operator를 설치하려면 다음 명령을 실행하세요.

    atlas kubernetes operator install [options]

    명령 구문 및 매개변수에 관한 자세한 사항은 Atlas Kubernetes Operator 설치에 대한 Atlas CLI 문서를 참조하십시오.

    참조: 관련 링크

    Atlas Kubernetes Operator 를 배포 하려면 다음 명령을 실행 합니다. <version> 를 최신 출시하다 번호로 바꿉니다.

    kubectl apply -f https://raw.githubusercontent.com/mongodb/mongodb-atlas-kubernetes/<version>/deploy/all-in-one.yaml

    Atlas 계정을 등록하려면 Atlas 계정 생성을 참조하세요.

  • API 키. API 키를 생성 하고 API Access List 를 구성해야 합니다.

    Atlas에 대한 Atlas Kubernetes Operator 액세스 권한을 구성하려면 다음의 공개 API 키, 비공개 API 키 및 조직 ID 정보가 필요합니다.

    • Atlas Kubernetes Operator 가 새 Atlas 프로젝트 를 생성하도록 하려면Grant Programmatic Access to an Organization(조직에 프로그래밍 방식 액세스 권한을 부여합니다)을 클릭합니다. 조직 에서 Atlas 관리 API 에 대한 IP 액세스 목록 이 필요한 경우 API 액세스 목록도 구성해야 합니다.

      중요

      API 키를 Organization Project Creator 조직 역할 이상으로 할당해야 합니다.

    • 기존 Atlas 프로젝트 로 작업하려면 프로젝트에서 프로젝트액세스를 추가합니다. 조직 에서 Atlas 관리 API 에 대한 IP 액세스 목록 이 필요한 경우 API 액세스 목록도 구성해야 합니다.

      중요

      API 키에 Project Owner 프로젝트 역할을 할당해야 합니다.

  • 비밀 저장 입니다. 이 튜토리얼에서는 에서 실행 비밀 저장 위한 타사 서비스인 HashiCorp Vault를 https://vault.internal.io 사용합니다.

    필요에 따라 AWS, Azure 및 Google의 Cloud KMS를 포함하여 Atlas Kubernetes Operator와 함께 다른 비밀 저장소를 사용할 수 있습니다.

  • 내부 액세스 전용 입니다. 공용 인터넷을 통해 민감한 정보가 노출되는 것을 방지하기 위해 비밀 저장소 솔루션의 다음 구성 요소는 내부 액세스만 허용합니다.

    • HashiCorp Vault 또는 KMS 서비스.

    • Kubernetes cluster API 서비스입니다.

    • 내부 네트워크. 이 튜토리얼에서는 internal.io 을(를) 사용합니다.

    이전 구성 요소는 내부 액세스만 허용했지만, 서로에 대한 액세스를 허용하며 팀이나 조직 내의 모든 사용자가 액세스할 수 있도록 허용합니다. 이는 보안을 위한 권장사항입니다.

  • 공공 CA(인증 기관). 공용 CA를 사용하면 사용자 지정 CA 루트 인증서의 관리 및 배포를 방지할 수 있습니다.

    다음 도구 중 하나를 사용하여 CA 인증서 관리 및 갱신을 자동화할 수 있습니다.

    이 튜토리얼에서는 다음을 수행합니다.

    • 모든 internal.io HTTPS 서비스는 내부 주소이지만 HTTPS 사이트는 공용 CA에서 서명한 자동으로 갱신된 인증서를 보유하고 있습니다.

    • 서버 측 HTTPS 유효성 검사만 수행하므로 이 통합에는 상호 TLS(mTLS)가 필요하지 않습니다.

    • 클라이언트는 추가 인증서 프로비저닝 없이 이러한 서비스 인증서를 신뢰할 수 있습니다.

다음 단계에 따라 Atlas Kubernetes Operator에 대한 시크릿 스토리지를 구성합니다.

1

시크릿 프로비저닝 도구를 선택하여 설치합니다.

External Secrets Operator를 시크릿 프로비저닝 도구로 사용하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 Atlas Charts가 포함된 External Secret 연산자를 설치하고 서비스를 시작합니다.

    helm repo add external-secrets https://charts.external-secrets.io
    helm upgrade -i --atomic \
    -n external-secrets --create-namespace --set extraArgs.loglevel=debug \
    external-secrets external-secrets/external-secrets`
  2. 외부 비밀이 성공적으로 실행되는지 확인합니다.

    kubectl get pod -n external-secrets -l app.kubernetes.io/name=external-secrets
    NAME READY STATUS RESTARTS AGE
    external-secrets-5779d5d6f6-2lhgd 1/1 Running 0 70s

Secrets Store CSI 드라이버 를 시크릿 프로비저닝 도구로 사용하려면 다음 단계를 따르세요.

  1. 다음 명령을 실행하여 Helm Charts 가 포함된 Secret Store CSI 드라이버 를 설치하고 서비스를 시작합니다.

    helm repo add secrets-store-csi-driver https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
    helm upgrade -i --atomic --set syncSecret.enabled=true \
    -n kube-system csi-secrets-store secrets-store-csi-driver/secrets-store-csi-driver
  2. 다음 명령을 실행하여 Helm Charts 와 함께 Secrets Store CSI HashiCorp Vault 플러그인을 설치합니다. HashiCorp Vault 서버 나 시크릿 인젝터를 설치할 필요가 없습니다.

    helm install vault hashicorp/vault \
    --set "server.enabled=false" --set "injector.enabled=false" \
    --set "csi.enabled=true"
  3. Secret Store CSI가 성공적으로 실행되는지 확인합니다.

    kubectl get pod -n kube-system -l app.kubernetes.io/name=secrets-store-csi-driver
    NAME READY STATUS RESTARTS AGE
    csi-secrets-store-secrets-store-csi-driver-6dcm8 3/3 Running 0 2m2s
  4. HashiCorp Vault CSI 제공자 성공적으로 실행되는지 확인합니다.

    kubectl get pods -l app.kubernetes.io/name=vault-csi-provider
    NAME READY STATUS RESTARTS AGE
    vault-csi-provider-j7xbr 2/2 Running 0 5m39s
2

OIDC JSON web token 및 Kubernetes 인증 을 설정하다 하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 마운트 경로에 대해 OIDC JSON 웹 토큰 인증을 활성화합니다. 여러 Kubernetes 클러스터를 설정하는 경우 각 클러스터의 마운트 경로에 대해 OIDC JSON 웹 토큰 인증을 활성화해야 합니다.

    vault auth enable -path=jwt-kube01 jwt
  2. 다음 명령을 실행하여 kube01.internal.io 클러스터의 OIDC 검색 URL에 대한 인증되지 않은 액세스를 허용합니다.

    $ kubectl create clusterrolebinding oidc-reviewer \
    --clusterrole=system:service-account-issuer-discovery \
    --group=system:unauthenticated
  3. 다음 명령을 실행하여 HashiCorp Vault가 클러스터 신뢰하도록 지시합니다. 에 있는 클러스터 의 발급자는 에 있는 https://kube01.internal.io/ OIDC 검색 문서 의 URL 일치해야 .well-known/openid-configuration 합니다.

    curl https://kube01.internal.io/.well-known/openid-configuration | jq .issuer
    https://kube01.internal.io/
    vault write auth/jwt-kube01/config jwks_url="https://kube01.internal.io/openid/v1/jwks"
  4. cluster에 노출하려는 시크릿에 대한 액세스를 허용하는 정책을 생성합니다.

    다음 예에서는 이후 단계에서 지정하는 external-secrets 정책을 만듭니다.

    echo external-secrets-policy.hcl
    path "secret/data/kube01/external-secrets/*" {
    capabilities = ["read"]
    }
  5. 명령을 실행하여 HashiCorp Vault 역할 생성하고 Kubernetes 서비스 계정을 역할 에 바인딩하여 HashiCorp Vault 내에서 서비스 계정의 액세스 제한합니다.

    다음 명령은 jwt-kube01-system 대상에 대한 JWT(OIDC) 유형의 역할 vault 생성합니다. 이 명령은 sub 사용자 클레임과 default 네임스페이스 의 Kubernetes 서비스 계정을 바인딩된 mongodb-atlas-system 주체로 지정합니다. 이 명령은 역할 external-secrets HashiCorp Vault내의 정책 권한 설정하다 에 연결합니다.

    vault write auth/jwt-kube01/role/jwt-kube01-system role_type="jwt" bound_audiences=vault \
    user_claim="sub" bound_subject="system:serviceaccount:mongodb-atlas-system:default" \
    policies="external-secrets"
  6. 명령을 실행하여 외부 비밀 연산자가 default 네임스페이스에 액세스할 수 있는 다른 역할을 만듭니다.

    다음 명령은 jwt-kube01-default 대상에 대한 JWT(OIDC) 유형의 역할 vault 생성합니다. 이 명령은 sub 사용자 클레임과 default 네임스페이스 의 Kubernetes 서비스 계정을 바인딩된 default 주체로 지정합니다. 이 명령은 역할 external-secrets HashiCorp Vault내의 정책 권한 설정하다 에 연결합니다.

    vault write auth/jwt-kube01/role/jwt-kube01-default role_type="jwt" bound_audiences=vault \
    user_claim="sub" bound_subject="system:serviceaccount:default:default" \
    policies="external-secrets"
  7. 시스템 서비스 계정에 대해 OIDC 인증이 성공적으로 실행되는지 확인합니다.

    export TEST_JWT_TOKEN=$(kubectl -n mongodb-atlas-system create token default --audience "vault")
    vault write auth/jwt-kube01/login role=jwt-kube01-system jwt=$(TEST_JWT_TOKEN)

    Atlas Kubernetes Operator 는 시스템 서비스 계정에 대한 OIDC JSON web token 자격 증명 을 반환합니다.

  8. 기본 서비스 계정에 대해 OIDC 인증이 성공적으로 실행되는지 확인합니다.

    export TEST_JWT_TOKEN=$(kubectl -n default create token default --audience "vault")
    vault write auth/jwt-kube01/login role=jwt-kube01-default jwt=$(TEST_JWT_TOKEN)

    Atlas Kubernetes Operator 는 기본값 서비스 계정에 대한 OIDC JSON web token 자격 증명 을 반환합니다.

Kubernetes 인증 을 설정하다 하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 마운트 경로에 대해 Kubernetes 인증 을 활성화 합니다. 여러 Kubernetes 클러스터를 설정하다 하는 경우 각 클러스터의 마운트 경로에 대해 Kubernetes 인증 을 활성화 해야 합니다.

    vault auth enable -path=jwt-kube01 kubernetes

    Helm과 함께 설치하면 클러스터 역할 바인딩이 자동으로 구성됩니다.

  2. 클러스터 에 노출하려는 시크릿에 액세스 를 허용하는 정책을 생성합니다.

    다음 예시 이후 단계에서 사용되는 정책을 만듭니다.vault-secret vault Helm Chart CSI 제공자 설정한 HashiCorp Vault 서비스 계정에 바인딩된 Kubernetes 시크릿인 를 사용합니다.

    echo vault-secret.yaml
    apiVersion: v1
    kind: Secret
    metadata:
    name: vault
    annotations:
    kubernetes.io/service-account.name: vault
    type: kubernetes.io/service-account-token
    $ kubectl apply -f vault-secret.yaml
  3. 명령을 실행하여 Kubernetes 클러스터 를 신뢰하고 Kubernetes 인증 을 사용합니다.

    export VAULT_JWT ?= $(shell kubectl get secret/vault -o jsonpath='{.data.token}' |base64 -d)
    vault write auth/k8s-kube01/config kubernetes_host="kube01.internal.io" token_reviewer_jwt=$(VAULT_JWT)
  4. 명령을 실행하여 HashiCorp Vault 역할 생성하고 Kubernetes 서비스 계정을 역할 에 바인딩하여 HashiCorp Vault 내에서 서비스 계정의 액세스 제한합니다.

    다음 명령은 k8s-kube01 auth/k8s-kube01 또는 네임스페이스의 Kubernetes 서비스 계정에 바인딩된 default 에 역할 mongodb-atlas-system 생성합니다. 이 역할 secrets-store HashiCorp Vault내의 권한 정책에 연결됩니다.

    vault write auth/k8s-kube01/role/k8s-kube01-role \
    bound_service_account_names=default,mongodb-atlas-operator \
    bound_service_account_namespaces=default,mongodb-atlas-system \
    policies=secrets-store

    정책이 존재하고 시크릿에 액세스 를 허용해야 합니다. 다음 예시 정책은 kube01/secrets-store 경로 아래에 있는 KV v2 시크릿에 액세스 를 허용합니다.

    path "secret/data/kube01/secrets-store/*" {
    capabilities = ["read"]
    }
  5. 시스템 서비스 계정에 대해 Kubernetes 인증 이 성공적으로 실행되는지 확인합니다.

    export TEST_JWT_TOKEN=$( kubectl create -n mongodb-atlas-system token mongodb-atlas-operator)
    vault write auth/jwt-kube01/login role=jwt-kube01-system jwt=$(TEST_JWT_TOKEN)
  6. 기본값 계정에 대해 Kubernetes 인증 이 성공적으로 실행되는지 확인합니다.

    export TEST_JWT_TOKEN=$(kubectl -n default create token default)
    vault write auth/jwt-kube01/login role=jwt-kube01-default jwt=$(TEST_JWT_TOKEN)
3

External Secret Operator로 시크릿을 프로비저닝하려면 다음을 수행하세요.

  1. mongodb-atlas-system 네임스페이스의 default 서비스 계정에 대한 SecretStore 사용자 지정 리소스를 배포합니다.

    $ cat external-secrets/vault-system.yaml
    apiVersion: external-secrets.io/v1beta1
    kind: SecretStore
    metadata:
    name: vault-store
    namespace: mongodb-atlas-system
    spec:
    provider:
    vault:
    server: "https://vault.internal.io"
    path: "secret"
    version: "v2"
    auth:
    jwt:
    path: "jwt-kube01"
    role: "jwt-kube01-system"
    kubernetesServiceAccountToken:
    expirationSeconds: 600
    serviceAccountRef:
    name: "default"
    audiences:
    - vault
    $ kubectl apply -f external-secrets/vault-system.yaml
  2. default 네임스페이스의 default 서비스 계정에 대한 SecretStore 사용자 지정 리소스를 배포합니다.

    $ cat external-secrets/vault-default.yaml
    apiVersion: external-secrets.io/v1beta1
    kind: SecretStore
    metadata:
    name: vault-store
    namespace: default
    spec:
    provider:
    vault:
    server: "https://vault.internal.io"
    path: "secret"
    version: "v2"
    auth:
    jwt:
    path: "jwt-kube01"
    role: "jwt-role"
    kubernetesServiceAccountToken:
    expirationSeconds: 600
    serviceAccountRef:
    name: "default"
    audiences:
    - vault
    $ kubectl apply -f external-secrets/vault-default.yaml
  3. API 키가 포함된 시크릿을 참고하는 ExternalSecret 사용자 지정 리소스를 배포합니다. 외부 Secrets Operator가 생성한 시크릿을 찾으려면 Atlas Kubernetes Operator에 대해 값이 credentialsspec.target.template.metadata.labelsatlas.mongodb.com/type 로 설정해야 합니다.

    다음 명령을 실행 전에 HashiCorp Vault의 Kv V 경로 에 다음 속성으로 시크릿이 채워져 있는지2 secret/data/kube01/external-secrets/atlas-account 확인합니다.

    • orgId

    • publicApiKey

    • privateApiKey

    $ cat external-secrets/atlas.yaml
    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
    name: atlas
    namespace: mongodb-atlas-system
    spec:
    refreshInterval: "15s"
    secretStoreRef:
    name: vault-store
    kind: SecretStore
    target:
    name: mongodb-atlas-operator-api-key
    template:
    metadata:
    labels:
    atlas.mongodb.com/type: credentials
    data:
    - secretKey: orgId
    remoteRef:
    key: secret/data/kube01/external-secrets/atlas-account
    property: orgId
    - secretKey: publicApiKey
    remoteRef:
    key: secret/data/kube01/external-secrets/atlas-account
    property: publicApiKey
    - secretKey: privateApiKey
    remoteRef:
    key: secret/data/kube01/external-secrets/atlas-account
    property: privateApiKey
    $ kubectl apply -f external-secrets/atlas.yaml

    이 명령은 네임스페이스 에 Kubernetes 시크릿 mongodb-atlas-operator-api-key 생성합니다.mongodb-atlas-system

  4. 데이터베이스 사용자 자격 증명이 포함된 시크릿을 참고하는 ExternalSecret 사용자 지정 리소스를 배포합니다. 외부 Secrets Operator가 생성한 시크릿을 찾으려면 Atlas Kubernetes Operator에 대해 값이 credentialsspec.target.template.metadata.labelsatlas.mongodb.com/type 로 설정해야 합니다.

    다음 명령을 실행 전에 HashiCorp Vault의 Kv V 경로2 에 secret/data/kube01/external-secrets/db-user 속성 으로 채워진 시크릿이 있는지 password 확인합니다.

    $ cat external-secrets/dbuser.yaml
    apiVersion: external-secrets.io/v1beta1
    kind: ExternalSecret
    metadata:
    name: dbuser
    namespace: default
    spec:
    refreshInterval: "15s"
    secretStoreRef:
    name: vault-store
    kind: SecretStore
    target:
    name: dbuser-password
    template:
    metadata:
    labels:
    atlas.mongodb.com/type: credentials
    data:
    - secretKey: password
    remoteRef:
    key: secret/data/kube01/external-secrets/db-user
    property: password
    $ kubectl apply -f external-secrets/atlas.yaml
  5. 다음 명령을 실행할 때 시크릿이 예상대로 반환되는지 확인합니다.

    $ kubectl get -n mongodb-atlas-system secrets/mongodb-atlas-operator-api-key
    $ kubectl get -n default secrets/dbuser-password

Secret Store CSI로 시크릿을 프로비저닝하려면 다음을 수행합니다.

  1. mongodb-atlas-system 네임스페이스 에 SecretProviderClass 사용자 지정 리소스 를 배포합니다. Secrets Store CSI가 생성하는 시크릿을 찾으려면 Atlas Kubernetes Operator 에 대해 값이 credentialsspec.secretObjects.labelsatlas.mongodb.com/type 로 설정하다 해야 합니다.

    다음 명령을 실행 전에 HashiCorp Vault의 Kv V 경로 에 다음 속성으로 시크릿이 채워져 있는지2 secret/data/kube01/external-secrets/atlas-account 확인합니다.

    • orgId

    • publicApiKey

    • privateApiKey

    $ cat secrets-store/atlas.yaml
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
    name: atlas
    namespace: mongodb-atlas-system
    spec:
    provider: vault
    secretObjects:
    - data:
    - key: orgId
    objectName: atlas-org
    - key: publicApiKey
    objectName: atlas-pub-key
    - key: privateApiKey
    objectName: atlas-secret-key
    secretName: mongodb-atlas-operator-api-key
    type: Opaque
    labels:
    atlas.mongodb.com/type: credentials
    parameters:
    vaultAddress: https://vault.internal.io
    vaultKubernetesMountPath: k8s-kube01
    roleName: k8s-kube01-role
    objects: |
    - objectName: atlas-org
    secretPath: secret/data/kube01/secrets-store/atlas-account
    secretKey: orgId
    - objectName: atlas-pub-key
    secretPath: secret/data/kube01/secrets-store/atlas-account
    secretKey: publicApiKey
    - objectName: atlas-secret-key
    secretPath: secret/data/kube01/secrets-store/atlas-account
    secretKey: privateApiKey
    $ kubectl apply -f secrets-store/atlas.yaml

    이 명령은 네임스페이스 에 Kubernetes 시크릿 mongodb-atlas-operator-api-key 생성합니다.mongodb-atlas-system

  2. 다음 명령을 실행하여 필요한 시크릿을 마운트하는 pod를 추가합니다.

    $ cat secrets-store/ako-patch.yaml
    template:
    spec:
    containers:
    - name: system-secret-placeholder
    image: mongodb/atlas
    command: ["sleep", "infinity"]
    volumeMounts:
    - name: secrets-store-mount
    mountPath: "/mnt/secrets-store"
    readOnly: true
    volumes:
    - name: secrets-store-mount
    csi:
    driver: secrets-store.csi.k8s.io
    readOnly: true
    volumeAttributes:
    secretProviderClass: atlas
    $ kubectl apply -f secrets-store/ako-patch.yaml
  3. 데이터베이스 사용자 자격 증명 이 포함된 시크릿을 참조하는 SecretProviderClass 사용자 지정 리소스 를 배포합니다. Secrets Store CSI가 생성하는 시크릿을 찾으려면 Atlas Kubernetes Operator 에 대한 값으로 credentials spec.target.template.metadata.labelsatlas.mongodb.com/type 로 설정하다 해야 합니다.

    다음 명령을 실행 전에 HashiCorp Vault의 Kv V 경로2 에 secret/data/kube01/external-secrets/db-user 속성 으로 채워진 시크릿이 있는지 password 확인합니다.

    $ cat external-secrets/dbuser.yaml
    apiVersion: external-secrets.io/v1beta1
    kind: SecretProviderClass
    metadata:
    name: dbuser
    namespace: default
    spec:
    provider: vault
    secretObjects:
    - data:
    - key: password
    objectName: dbuser
    secretName: dbuser-password
    type: Opaque
    labels:
    atlas.mongodb.com/type: credentials
    parameters:
    vaultAddress: https://vault.internal.io
    vaultKubernetesMountPath: k8s-kube01
    roleName: k8s-kube01-role
    objects: |
    - objectName: "dbuser"
    secretPath: "secret/data/kube01/secrets-store/db-user"
    secretKey: "password"
    $ kubectl apply -f secrets-store/dbuser.yaml
  4. 다음 명령을 실행하여 secret-placeholder 센티널 포드를 생성하면 Secrets Store CSI 운전자 가 dbuser 자격 증명 을 가져와 Kubernetes 에 동기화 합니다.

    $ cat secrets-store/placeholder.yaml
    kind: Pod
    apiVersion: v1
    metadata:
    name: secret-placeholder
    spec:
    containers:
    - image: mongodb/atlas
    command: ["sleep", "infinity"]
    name: secret-placeholder
    volumeMounts:
    - name: secrets-store-mount
    mountPath: "/mnt/secrets-store"
    readOnly: true
    volumes:
    - name: secrets-store-mount
    csi:
    driver: secrets-store.csi.k8s.io
    readOnly: true
    volumeAttributes:
    secretProviderClass: dbuser
    $ kubectl apply -f secrets-store/placeholder.yaml
  5. 다음 명령을 실행할 때 시크릿이 예상대로 반환되는지 확인합니다.

    $ kubectl get -n mongodb-atlas-system secrets/mongodb-atlas-operator-api-key
    $ kubectl get -n default secrets/dbuser-password
4

이제 Atlas Kubernetes Operator 사용자 지정 리소스를 배포 할 수 있습니다. Atlas Kubernetes Operator HashiCorp Vault를 참조하는 Kubernetes 시크릿으로 인증합니다.timeout 배포에 필요한 대로 값을 조정합니다.

kubectl apply -f ako/project.yaml
kubectl apply -f ako/deployment.yaml
kubectl apply -f ako/user.yaml
kubectl wait --for=condition=ready atlasdeployment/serverless-deployment --timeout=10m
kubectl wait --for=condition=ready atlasdatabaseuser/user --timeout=10m

이러한 사용자 지정 리소스에 대해 자세히 알아보려면 사용자 지정 리소스를 참조하세요 .

5

Atlas Kubernetes Operator 배포를 테스트하려면 다음 명령을 실행합니다.

export ATLAS_DEPLOYMENT_CONN_STR=$(kubectl get secrets/test-atlas-operator-project-test-serverless-deployment-dbuser -o jsonpath='{.data.connectionStringStandardSrv}' |base64 -d)
mongosh $(ATLAS_DEPLOYMENT_CONN_STR) --apiVersion 1 --eval "show dbs"

Atlas Kubernetes Operator는 데이터베이스 배포 목록을 반환합니다.

돌아가기

Atlas Access

이 페이지의 내용