Sops와 ArgoCD의 비밀

ArgoCD은 Kubernetes에 애플리케이션을 배포하기 위한 gitops 철학을 구현하는 도구입니다. 간단하고 사람이 읽을 수 있는 매니페스트 파일을 사용하여 애플리케이션의 원하는 상태를 정의하는 선언적 Git 기반 배포 시스템입니다. 이 기사에서는 ArgoCD를 Sops과 함께 사용하여 gitops 워크플로에서 비밀을 관리하는 방법을 살펴보겠습니다.

sops with GCP KMS 을 사용합니다. 가장 먼저 필요한 것은 roles/cloudkms.cryptoKeyDecrypter 역할을 가진 서비스 계정이고 Kubernetes에 비밀을 생성합니다.
kubectl create secret generic google-sa --from-file sa.json
아이디어는 ArgoConfig Management Plugin를 사용하여 비밀을 해독하고 모든 Kubernetes 개체(배포, 서비스 등)가 포함된 평면 yaml을 생성하고 Sops 및 기타 필요한 도구를 설치하는 데 사용Cumstom Tooling하는 것입니다.

그 과정에서 몇 가지 문제가 발생했으며 그 중 하나는 출력 yaml의 형식을 올바르게 지정하고 다음과 같은 오류를 방지하기 위해 yq를 사용해야 한다는 것입니다. error converting YAML to JSON: yaml: line 4: did not find expected ',' or ']'.
Helm에서 argo-cd를 설치하기 위한 값입니다. 구성에서는 모든 암호가 yaml을 사용한 파일 코딩secrets.enc에 있다고 가정합니다.

server:
  config:
    configManagementPlugins: |
      - name: sops
        init:
          command: ["/bin/sh", "-c"]
          args: ["echo '---' > secrets.yaml && sops -d --input-type yaml --output-type yaml secrets.enc >> secrets.yaml"]
        generate:
          command: ["/bin/sh", "-c"]
          args: ["source /virtualenv-python/bin/activate; pip install yq; cat *.yaml | yq -y"]
repoServer:
  volumes:
    - name: custom-tools
      emptyDir: {}
    - name: virtualenv-python
      emptyDir: {}
    - name: google-sa
      secret:
        secretName: google-sa
        items:
          - key: sa.json
            path: sa.json
  volumeMounts:
    - mountPath: /usr/local/bin/sops
      name: custom-tools
      subPath: sops
    - mountPath: /usr/local/bin/jq
      name: custom-tools
      subPath: jq
    - mountPath: /etc/secrets/sa.json
      name: google-sa
      subPath: sa.json
    - mountPath: /virtualenv-python
      name: virtualenv-python
  env:
    - name: GOOGLE_APPLICATION_CREDENTIALS
      value: /etc/secrets/sa.json
  initContainers:
    - name: custom-tools
      image: alpine:3.8
      command: ["/bin/sh", "-c"]
      args:
        - wget https://github.com/mozilla/sops/releases/download/v3.7.3/sops-v3.7.3.linux.amd64;
          chmod a+x sops-v3.7.3.linux.amd64;
          mv sops-v3.7.3.linux.amd64 /custom-tools/sops;
          wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64;
          chmod a+x jq-linux64;
          mv jq-linux64 /custom-tools/jq;
      volumeMounts:
        - mountPath: /custom-tools
          name: custom-tools
    - name: virtualenv-python
      image: python:3.7
      command: ["/bin/sh", "-c"]
      args:
        - python3 -m venv /virtualenv-python
      volumeMounts:
        - mountPath: /virtualenv-python
          name: virtualenv-python

helm upgrade sops argo/argo-cd --values values-sops.yaml
그리고 그것을 시도하는 응용 예.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: secrets
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/Callepuzzle/manifests
    targetRevision: main
    path: poc-argocd
    plugin:
      name: sops
  destination:
    name: ''
    namespace: ''
    server: 'https://kubernetes.default.svc'

좋은 웹페이지 즐겨찾기