시크릿 스토리지 구성
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 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에 대한 시크릿 스토리지를 구성합니다.
대상 cluster에 시크릿 프로비저닝 도구를 설치합니다.
시크릿 프로비저닝 도구를 선택하여 설치합니다.
외부 비밀 연산자 를 사용하려면 시크릿 프로비저닝 도구로 사용:
다음 명령을 실행하여 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` 외부 비밀이 성공적으로 실행되는지 확인합니다.
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 드라이버 를 시크릿 프로비저닝 도구로 사용하려면 다음 단계를 따르세요.
다음 명령을 실행하여 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 다음 명령을 실행하여 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" 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 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
시크릿에 액세스하려면 인증을 설정합니다.
OIDC JSON web token 및 Kubernetes 인증 을 설정하다 하려면 다음을 수행합니다.
다음 명령을 실행하여 마운트 경로에 대해 OIDC JSON 웹 토큰 인증을 활성화합니다. 여러 Kubernetes 클러스터를 설정하는 경우 각 클러스터의 마운트 경로에 대해 OIDC JSON 웹 토큰 인증을 활성화해야 합니다.
vault auth enable -path=jwt-kube01 jwt 다음 명령을 실행하여
kube01.internal.io
클러스터의 OIDC 검색 URL에 대한 인증되지 않은 액세스를 허용합니다.$ kubectl create clusterrolebinding oidc-reviewer \ --clusterrole=system:service-account-issuer-discovery \ --group=system:unauthenticated 다음 명령을 실행하여 HashiCorp Vault 를 지시합니다. 클러스터를 신뢰합니다.
https://kube01.internal.io/
의 클러스터 발급자는.well-known/openid-configuration
의 OIDC 검색 문서에 있는 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" cluster에 노출하려는 시크릿에 대한 액세스를 허용하는 정책을 생성합니다.
다음 예에서는 이후 단계에서 지정하는
external-secrets
정책을 만듭니다.echo external-secrets-policy.hcl path "secret/data/kube01/external-secrets/*" { capabilities = ["read"] } 명령을 실행하여 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" 명령을 실행하여 외부 비밀 연산자가
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" 시스템 서비스 계정에 대해 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 자격 증명 을 반환합니다.
기본 서비스 계정에 대해 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 인증 을 설정하다 하려면 다음을 수행합니다.
다음 명령을 실행하여 마운트 경로에 대해 Kubernetes 인증 을 활성화 합니다. 여러 Kubernetes 클러스터를 설정하다 하는 경우 각 클러스터의 마운트 경로에 대해 Kubernetes 인증 을 활성화 해야 합니다.
vault auth enable -path=jwt-kube01 kubernetes Helm과 함께 설치하면 클러스터 역할 바인딩이 자동으로 구성됩니다.
클러스터 에 노출하려는 시크릿에 액세스 를 허용하는 정책을 생성합니다.
다음 예시 에서는 이후 단계에서 사용되는
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 명령을 실행하여 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) 명령을 실행하여 HashiCorp Vault 를 만듭니다. 역할 을 지정하고 Kubernetes 서비스 계정을 역할 에 바인딩하여 HashiCorp Vault 내에서 서비스 계정의 액세스 를 제한합니다.
다음 명령은
default
또는mongodb-atlas-system
네임스페이스의 Kubernetes 서비스 계정에 바인딩된auth/k8s-kube01
에k8s-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"] } 시스템 서비스 계정에 대해 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) 기본값 계정에 대해 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)
자동 시크릿 프로비저닝을 설정합니다.
External Secret Operator로 시크릿을 프로비저닝하려면 다음을 수행하세요.
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 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 API 키가 포함된 시크릿을 참고하는
ExternalSecret
사용자 지정 리소스를 배포합니다. 외부 Secrets Operator가 생성한 시크릿을 찾으려면 Atlas Kubernetes Operator에 대해 값이credentials
인spec.target.template.metadata.labels
를atlas.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
을 생성합니다. 네임스페이스의 .데이터베이스 사용자 자격 증명이 포함된 시크릿을 참고하는
ExternalSecret
사용자 지정 리소스를 배포합니다. 외부 Secrets Operator가 생성한 시크릿을 찾으려면 Atlas Kubernetes Operator에 대해 값이credentials
인spec.target.template.metadata.labels
를atlas.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 다음 명령을 실행할 때 시크릿이 예상대로 반환되는지 확인합니다.
$ kubectl get -n mongodb-atlas-system secrets/mongodb-atlas-operator-api-key $ kubectl get -n default secrets/dbuser-password
Secret Store CSI로 시크릿을 프로비저닝하려면 다음을 수행합니다.
mongodb-atlas-system
네임스페이스 에SecretProviderClass
사용자 지정 리소스 를 배포합니다. Secrets Store CSI가 생성하는 시크릿을 찾으려면 Atlas Kubernetes Operator 에 대해 값이credentials
인spec.secretObjects.labels
를atlas.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
을 생성합니다. 네임스페이스의 .다음 명령을 실행하여 필요한 시크릿을 마운트하는 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 데이터베이스 사용자 자격 증명 이 포함된 시크릿을 참조하는
SecretProviderClass
사용자 지정 리소스 를 배포합니다. Secrets Store CSI가 생성하는 시크릿을 찾으려면 Atlas Kubernetes Operator 에 대한 값으로credentials
spec.target.template.metadata.labels
를atlas.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 다음 명령을 실행하여
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 다음 명령을 실행할 때 시크릿이 예상대로 반환되는지 확인합니다.
$ kubectl get -n mongodb-atlas-system secrets/mongodb-atlas-operator-api-key $ kubectl get -n default secrets/dbuser-password
Atlas Kubernetes Operator 사용자 지정 리소스를 배포합니다.
이제 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
이러한 사용자 지정 리소스에 대해 자세히 알아보려면 사용자 지정 리소스를 참조하세요 .
Atlas Kubernetes Operator 배포를 테스트합니다.
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는 데이터베이스 배포 목록을 반환합니다.