https://engineering.lightrun.com/argocd-aws-secrets-manager-3d625aa917f7
https://awstip.com/how-to-implement-argocd-vault-plugin-with-aws-secrets-manager-80c912f3a9ee
우리는 보안 설정을 저장하기 위해 Kubernetes Secret을 사용하는데, 어떤 방식으로든 이런 Secret의 변경을 추적하고, ArgoCD가 업데이트를 해야 합니다.
다행스럽게도 Argo 개발자들은 이에 관심을 갖고 다양하고 멋진 플러그인을 생성할 수 있는 유연한 API를 제공했습니다. 그 중 하나는 Argo Vault 플러그인 입니다. 플러그인 이름에도 불구하고 AWS Secrets Manager 에서도 작동할 수 있습니다 .
argocd-repo-server
는 ArgoCD의 구성 저장소 및 GitOps 워크플로우를 관리하는 서버 컴포넌트입니다. 이 서버는 ArgoCD 애플리케이션을 위한 배포 및 Git 저장소를 관리하고, 애플리케이션 동기화, 배포 및 로깅과 같은 GitOps 기능을 제공합니다. argocd-repo-server
의 주요 역할 및 기능은 다음과 같습니다:GitOps 저장소 관리: argocd-repo-server
는 ArgoCD 애플리케이션 및 프로젝트 구성 정보를 저장하고 이 정보를 Git 저장소에 유지합니다. Git 저장소는 애플리케이션의 소스 코드, 구성 파일 및 배포 매니페스트를 저장하는 데 사용됩니다.
애플리케이션 동기화: 이 서버는 GitOps 워크플로우를 지원하여 Git 저장소에서 정의된 애플리케이션 구성을 클러스터로 동기화합니다. 변경 사항이 Git 저장소에 반영되면 argocd-repo-server
는 변경 사항을 감지하고 클러스터에 자동으로 배포 및 동기화합니다.
인증 및 권한 관리: argocd-repo-server
는 사용자와 인증된 Git 저장소 간의 인증 및 권한 관리를 담당합니다. 이를 통해 접근 제어 및 보안을 관리할 수 있습니다.
애플리케이션 및 프로젝트 설정 저장: 애플리케이션 및 프로젝트에 대한 설정 정보를 저장하고 관리합니다. 이 설정 정보는 GitOps 워크플로우의 일부로 사용되며 애플리케이션을 클러스터에 배포할 때 적용됩니다.
백업 및 복원: argocd-repo-server
는 GitOps 저장소의 백업 및 복원을 지원하여 구성 정보와 애플리케이션 상태를 안전하게 보관하고 관리할 수 있습니다.
argocd-repo-server
는 ArgoCD의 중요한 구성 요소 중 하나로, GitOps 워크플로우를 효과적으로 관리하고 배포 프로세스를 자동화하는 데 사용됩니다. Git 저장소와 함께 협력하여 애플리케이션을 지속적으로 전달하고 관리하는 데 필수적입니다.
# argocd-vault-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-repo-server
spec:
template:
spec:
containers:
- name: argocd-repo-server
env:
- name: AWS_REGION
value: ap-northeast-2
- name: AVP_TYPE
value: awssecretsmanager
- name: AWS_ACCESS_KEY_ID_VALUE
value: DKDKDKDKD # 필요에 맞게 수정
- name: AWS_SECRET_ACCESS_KEY
value: DDKDKDKDK # 필요에 맞게 수정
volumeMounts:
- name: custom-tools
mountPath: /usr/local/bin/argocd-vault-plugin
subPath: argocd-vault-plugin
volumes:
- name: custom-tools
emptyDir: {}
initContainers:
- name: download-tools
image: alpine:3.8
command: [sh, -c]
# Don't forget to update this to whatever the stable release version is
# Note the lack of the `v` prefix unlike the git tag
env:
- name: AVP_VERSION
value: "1.9.0"
args:
- >-
wget -O argocd-vault-plugin
https://github.com/argoproj-labs/argocd-vault-plugin/releases/download/v1.9.0/argocd-vault-plugin_1.9.0_linux_amd64 &&
chmod +x argocd-vault-plugin &&
mv argocd-vault-plugin /custom-tools/
volumeMounts:
- mountPath: /custom-tools
name: custom-tools
# Not strictly necessary, but required for passing AVP configuration from a secret and for using Kubernetes auth to Hashicorp Vault
# automountServiceAccountToken: true
위 yaml 파일 생성 후 아래 명령어로 deployment 수정
kubectl patch deployment argocd-repo-server -n argocd --patch-file argocd-vault-patch.yaml
patch를 진행했다면, repo-server를 재가동 해주세요.
kubectl delete pod argocd-repo-server-
argocd-cm
(ArgoCD Configuration Management)은 ArgoCD의 구성을 관리하는 ConfigMap을 의미합니다. 이 ConfigMap은 ArgoCD 서버 및 애플리케이션에 대한 중요한 설정 정보를 저장하고 제공하는 역할을 합니다. argocd-cm
의 주요 기능과 설정 항목은 다음과 같습니다:argocd-cm
는 ArgoCD 서버의 기본 설정을 포함합니다. 이 설정은 서버의 동작을 제어하고 사용자 인터페이스, 인증, 인가, 애플리케이션 동기화, 리포지토리 연동 등 다양한 측면을 구성합니다.argocd-cm
에 저장됩니다. 이를 통해 ArgoCD는 애플리케이션의 소스 코드 및 구성을 가져오고 동기화할 수 있습니다.argocd-cm
는 애플리케이션에서 사용하는 비밀 정보를 암호화하기 위한 설정을 포함할 수 있습니다. 이를 통해 보안을 강화하고 중요한 데이터를 안전하게 저장할 수 있습니다.argocd-cm
에 저장될 수 있으며, 이를 통해 ArgoCD의 동작을 세부적으로 구성할 수 있습니다.Argocd Configmap에 vault-plugin을 연동하도록 수정
# argocd-cmp-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
data:
configManagementPlugins: |
- name: argocd-vault-plugin
generate:
command: ["argocd-vault-plugin"]
args: ["generate", "./"]
- name: argocd-vault-plugin-helm
generate:
command: ["sh", "-c"]
args: ["helm template . | argocd-vault-plugin generate -"]
- name: argocd-vault-plugin-helm-with-args
generate:
command: ["sh", "-c"]
args: ["helm template ${helm_args} . | argocd-vault-plugin generate -"]
- name: argocd-vault-plugin-kustomize
generate:
command: ["sh", "-c"]
args: ["kustomize build . | argocd-vault-plugin generate -"]
위 yaml 파일 생성 후 아래 명령어로 configmap 수정
kubectl patch configmap argocd-cm -n argocd --patch-file argocd-cmp-config.yaml
기존에는 spec.source.plugin.name에 argocd-vault-plugin을 넣어야 plugin이 작동하였는데, 이 plugin 설정을 진행하면 spec.source.helm을 사용할 수가 없었습니다.
하지만 최근에는 plugin을 굳이 사용하지 않아도 자동으로 argocd-vault-plugin이 붙습니다. 따라서 아래의 설정은 안해도 됩니다!
(관련 문서는 나중에 다시.. 기록해두겠습니다)
# 안해도 되지만 기록으로 남겨둡니다.
# spec:
# source:
# plugin:
# name: argocd-vault-plugin