본문 바로가기

개발하자

kubernetes에 배포된 mongodb의 암호 변경

반응형

kubernetes에 배포된 mongodb의 암호 변경

데이터베이스를 삭제한 후 새 암호로 다시 만들지 않으면 k8s에 배포된 MongoDB에서 기존 사용자의 암호를 변경할 수 없습니다.

db를 삭제하지 않고 mongo stateful 객체에 대해 yaml을 사용하여 비밀번호를 변경하려면 어떻게 해야 합니까?

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo-db-statefulset
  namespace: development
spec:
  serviceName: mongo-svc
  replicas: 1
  selector:
    matchLabels:
      component: mongo
  template:
    metadata:
      labels:
        component: mongo
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo:4.0.4
          volumeMounts:
            - mountPath: /data/db
              name: volume 
          ports:
            - containerPort: 27017
          env:
            - name: MONGO_INITDB_ROOT_USERNAME
              value: admin
            - name: MONGO_INITDB_ROOT_PASSWORD
             # from secrets
              value: password
            - name: MONGO_INITDB_DATABASE
              value: admin
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: database-persistent-volume-claim



내가 당신의 문제를 올바르게 이해한다면:

  • 비밀번호를 환경변수로 비밀번호를 가지고 있으며, 포드는 볼륨을 통해 비밀데이터에 액세스할 수 있습니다
  • 암호를 변경했지만 다시 시작하지 않으면 포드가 암호를 인식하지 못합니다.

다음에 따름:

암호화된 업데이트 후에는 환경 변수가 업데이트되지 않으므로 컨테이너가 이미 환경 변수의 암호를 사용하는 경우 암호화된 업데이트는 다시 시작되지 않는 한 컨테이너에 표시되지 않습니다. 비밀이 변경될 때 재시작을 트리거하는 타사 솔루션이 있습니다.

이것은 알려진 것입니다. 이것에서 더 자세히 읽을 수 있습니다.


따라서 비밀 암호를 변경한 후에는 이 값을 업데이트하기 위해 포드를 다시 시작해야 하므로 삭제할 필요가 없습니다.


문서에서 언급한 바와 같이, 비밀이 변경될 때 재시작을 트리거하는 타사 도구가 있습니다. 그 중 하나는 다음과 같습니다.

업로더는 ConfigMap 및 Secret의 변경 사항을 모니터링하고 관련된 DeploymentConfigs, Deployments, Daemonsets 및 Statefulset를 사용하여 포드에서 롤링 업그레이드를 수행할 수 있습니다.


배포를 다시 시작하는 가장 빠른 방법은 를 사용하는 것입니다. 를 사용하면 단계별 종료를 수행하고 배포 또는 상태 저장 세트의 각 컨테이너를 다시 시작할 수 있습니다.

비밀번호를 변경하고 kubectl 롤아웃을 사용하면 새 비밀번호가 작동합니다.




@kane에 대한 명령 예제. 주석으로 추가할 평판이 없습니다. kubectl -n 네임스페이스 롤아웃 다시 시작 배포/name_of_deployment

편집: 비밀로 비밀번호를 변경했지만, 쿠벡틀 롤아웃 후 다시 시작 몽고는 어떻게든 이전 비밀번호를 사용합니다. 어떻게 해야 할지 잘 모르겠습니다. 편집2: mongopod에 연결하면 변수 MONGO_INITDB_ROOT_PASSWORD가 새 암호를 표시하지만 mongodb에 연결하는 것은 이전 암호 편집3에서만 작동합니다: 결국 내가 한 일은: 1. 새로운 가치를 가진 비밀을 유지하고, 이 시점에서 중요한지 확신하지 못하는 것이었다. 2. 포드에 로그인하여 이 두 가지 명령을 실행하십시오. db = db.getSiblingDB('admin') 다음에 db.changeUserPassword("root", "NEW PASSWORD") 3. 이것이 지속적인지 테스트하기 위해 배포를 삭제했다가 다시 생성하면 새 암호가 작동합니다. 이전 암호는 더 이상 작동하지 않습니다


반응형