Docs Menu
Docs Home
/ /
MongoDB Atlas Kubernetes Operator
/

시크릿 스토리지 구성

이 페이지의 내용

  • 고려 사항
  • 전제 조건
  • 절차

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

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

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

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

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

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

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

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

    • 외부 비밀 연산자 의 경우 이 튜토리얼에서는 OIDC JSON 웹 토큰 인증을 사용합니다. 자세한 내용은 JSON web token/OIDC 인증을 참조하세요.

    • Secret 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 Vaulthttps://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

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

외부 비밀 연산자 를 사용하려면 시크릿 프로비저닝 도구로 사용:

  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. 다음 명령을 실행하여 Secrets Store CSI HashiCorp Vault 를 설치합니다. 플러그인을 Helm Charts 와 함께 사용할 수 있습니다. 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/ 의 클러스터 발급자는 .well-known/openid-configurationOIDC 검색 문서에 있는 URL과 일치해야 합니다.

    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 내에서 서비스 계정의 액세스 를 제한합니다.

    다음 명령은 vault 대상에 대한 JSON 웹 토큰 (OIDC) 유형의 jwt-kube01-system 역할을 생성합니다. 이 명령은 sub 사용자 클레임과 mongodb-atlas-system 네임스페이스의 default Kubernetes 서비스 계정을 바인딩된 주체로 지정합니다. 이 명령은 역할을 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 네임스페이스에 액세스할 수 있는 다른 역할을 만듭니다.

    다음 명령은 vault 대상에 대한 JSON 웹 토큰 (OIDC) 유형의 jwt-kube01-default 역할을 생성합니다. 이 명령은 sub 사용자 클레임과 default 네임스페이스의 default Kubernetes 서비스 계정을 바인딩된 주체로 지정합니다. 이 명령은 역할을 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 정책을 만듭니다. Kubernetes 시크릿 을(를)사용합니다. HashiCorp Vault 바인딩 Helm Chart CSI 제공자 가 설정하는 서비스 계정입니다.vault

    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 내에서 서비스 계정의 액세스 를 제한합니다.

    다음 명령은 default 또는 mongodb-atlas-system 네임스페이스의 Kubernetes 서비스 계정에 바인딩된 auth/k8s-kube01k8s-kube01 역할 을 생성합니다. 이 역할 은 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 V2 경로 에 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 V2 경로 에 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는 Kubernetes 시크릿 으로 인증합니다.HashiCorp Vault 를 참조합니다. . 배포에 필요한 대로 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

이 페이지의 내용