Argo CD 사용자 계정 및 기본 설정과 Gitlab 연동으로 자동화 운영
Argo CD 초기 설치 후 기본계정 외 사용자 계정을 추가하는 방법입니다. 여기서는 CLI를 사용한 방법과 Argo CD의 사용자 관리 기능에 대해 설명하겠습니다.
- CLI를 통한 사용자 추가: Argo CD CLI를 사용하여 사용자를 추가할 수 있습니다. 이 방법은 주로 Argo CD 서버의 관리자가 사용합니다. 예를 들어, 새로운 사용자를 추가하려면 다음과 같은 명령어를 사용할 수 있습니다:이 명령은 새 사용자를 시스템에 추가합니다. 단, 이 방법은 Argo CD가 RBAC로 설정되어 있어야 하며, 사용자를 올바르게 관리할 수 있는 권한이 설정되어 있어야 합니다.
argocd account add-user <username> --password <password>
- Argo CD 웹 인터페이스를 통한 사용자 관리: Argo CD는 웹 인터페이스를 통해서도 사용자를 관리할 수 있습니다. 관리자는 웹 UI에서 직접 사용자를 추가하고, 해당 사용자에게 특정 역할을 할당할 수 있습니다. 이 방법은 시각적이고 직관적인 방법을 선호하는 사용자에게 적합합니다.
- 외부 인증 제공자를 통한 사용자 관리: Argo CD는 LDAP, SAML, OIDC 등 다양한 외부 인증 제공자를 지원합니다. 이를 통해 기업이나 조직의 기존 사용자 인증 시스템을 Argo CD에 통합할 수 있으며, 사용자 계정을 별도로 추가하지 않아도 됩니다.
사용하고 있는 Argo CD의 설정과 환경에 따라 사용 가능한 옵션이 다를 수 있습니다. 웹 인터페이스에서 사용자 계정을 관리하는 메뉴 위치도 Argo CD 버전에 따라 약간씩 다를 수 있습니다. 하지만 일반적인 절차를 기준으로 설명드리겠습니다. 사용자 계정을 추가하거나 관리하기 위해 필요한 메뉴는 주로 "Settings" 섹션에 위치합니다. 다음은 Argo CD 웹 인터페이스를 사용하여 사용자 계정을 관리하기 위한 일반적인 절차입니다.
- Argo CD 웹 인터페이스 접속: 브라우저에서 Argo CD 웹 인터페이스 URL을 입력하여 접속합니다. URL은 Argo CD를 설치할 때 설정한 주소입니다.
- 로그인: Argo CD에 설정된 관리자 계정 또는 인증된 사용자 계정으로 로그인합니다.
- 설정 메뉴 접근: 화면 왼쪽에 있는 메뉴 바에서 "Settings" (설정) 아이콘을 찾습니다. 이 아이콘은 보통 톱니바퀴 모양입니다.
- 사용자 관리: "Settings" 메뉴 내에서 "Accounts" (계정) 또는 "Users" (사용자) 섹션을 찾습니다. 여기서 새 사용자를 추가하거나 기존 사용자의 권한을 수정할 수 있습니다.
- 사용자 추가 또는 수정: "Add New User" (새 사용자 추가) 버튼을 클릭하여 새 사용자를 추가하거나 기존 사용자 목록에서 특정 사용자를 선택하여 수정할 수 있습니다.
만약 "Settings" 메뉴에서 직접적인 사용자 관리 옵션이 보이지 않는다면, Argo CD 인스턴스가 외부 인증 시스템을 사용하고 있을 수 있으며, 이 경우 사용자 관리는 외부 시스템에서 이루어집니다.
Kubernetes 환경에 배포할 때 내부 Redis 대신 외부 Redis 서버를 사용하도록 설정하는 것은 몇 가지 설정을 수정해야 합니다. 아래는 Argo CD의 argocd-cm
ConfigMap과 argocd-redis
Deployment를 변경하여 외부 Redis 서버를 사용하도록 설정하는 예제 매니페스트입니다. 이 예제에서는 외부 Redis 서버의 주소가 external-redis.example.com
이고, 포트는 6379
로 가정합니다.
1. Argo CD ConfigMap 수정 (argocd-cm)
argocd-cm
ConfigMap에서 Redis 서버의 주소와 포트를 지정해야 합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
redis: external-redis.example.com:6379
# 다른 필요한 설정들은 이곳에 계속 추가
2. Redis Deployment 삭제 (argocd-redis)
내부 Redis 대신 외부 Redis를 사용할 것이므로, 기존의 argocd-redis
Deployment를 삭제하거나 비활성화합니다.
# 이 섹션은 기존 Redis Deployment를 삭제하거나 비활성화하는 예제입니다.
# 실제로 Kubernetes에서 Deployment를 삭제할 때는 kubectl delete 명령을 사용하면 됩니다.
# 이 YAML 파일은 illustrative purposes만을 위한 것입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-redis
namespace: argocd
spec:
replicas: 0 # Deployment를 비활성화하려면 replicas를 0으로 설정
주의 사항
- 보안: 외부 Redis 서버를 사용할 때는 네트워크 보안과 Redis 인스턴스 자체의 보안 설정에 주의해야 합니다. 가능하면 TLS를 활용하여 데이터 전송을 암호화하고, 인증 메커니즘을 활용하세요.
- 연결:
redis
필드에서는 Redis 서버의 주소와 포트만 지정했습니다. Redis 서버가 인증을 필요로 한다면, 인증 키나 비밀번호를 추가적으로 구성할 필요가 있습니다. 이 경우 추가적인 보안 조치를 고려해야 합니다.
이 예제는 기본적인 설정을 다루고 있으며, 실제 환경에 맞게 세부적인 구성은 조정될 필요가 있습니다. Kubernetes 환경에 따라 세부적인 구성이나 네트워크 정책, 보안 설정 등을 추가로 고려해야 할 수 있습니다.
Kubernetes에서 ConfigMap을 업데이트할 때, kubectl apply
명령을 사용하는 경우 전체 ConfigMap을 대체하기 때문에 기존에 설정된 다른 데이터가 손실될 수 있습니다. 기존 ConfigMap에 추가적인 변경사항만 적용하고 싶다면, ConfigMap을 부분적으로 업데이트할 수 있는 방법을 사용해야 합니다.
Kubernetes에서는 몇 가지 방법으로 ConfigMap을 안전하게 업데이트할 수 있습니다.
1. kubectl patch 사용
kubectl patch
명령을 사용하면 기존의 ConfigMap에 특정 변경만을 적용할 수 있습니다. 예를 들어, Redis 설정만을 변경하고자 한다면 다음과 같이 할 수 있습니다.
kubectl patch configmap argocd-cm -n argocd --type merge -p '{"data":{"redis":"external-redis.example.com:6379"}}'
이 명령은 argocd-cm
ConfigMap의 data
필드에 redis
항목만을 업데이트합니다.
2. ConfigMap YAML 파일 수정 후 kubectl apply
전체 ConfigMap YAML 파일을 수정하여 필요한 부분만 변경한 후, 이 파일을 kubectl apply
로 적용하는 방법입니다. 이 방법을 사용할 때는 전체 ConfigMap을 로컬에서 관리하고 있어야 하며, 파일의 나머지 부분은 기존 설정을 그대로 유지해야 합니다.
기존 ConfigMap 파일을 다음과 같이 수정한 다음
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
redis: external-redis.example.com:6379
# 기존에 있던 다른 설정들도 이곳에 포함
수정된 전체 파일을 다시 적용합니다.
kubectl apply -f argocd-cm.yaml
이 방법을 사용하면 기존 설정을 유지하면서 새로운 설정을 추가하거나 변경할 수 있습니다. 항상 전체 ConfigMap 구성을 확인하고 관리하는 것이 중요합니다. ConfigMap을 업데이트하기 전에는 반드시 기존 ConfigMap의 백업을 수행하거나, 변경 사항을 정확히 알고 있어야 합니다.
GitLab과 Argo CD를 연동하여 Kubernetes에 자동으로 배포하는 구성을 설정하기 위해 몇 가지 주요 단계를 따라야 합니다. 이 과정에서 GitLab 저장소 설정부터 Argo CD의 Application 설정까지 포함됩니다. 다음은 자세한 단계별 가이드입니다.
1. GitLab 저장소 준비
저장소 생성
- GitLab에서 새 프로젝트를 생성합니다.
- 프로젝트 이름과 설명을 입력하고, 접근 권한 설정 후 생성 버튼을 클릭합니다.
Kubernetes 매니페스트 및 Helm 차트
- Kubernetes 배포를 위한 YAML 매니페스트 파일을 준비하거나 Helm 차트를 구성합니다.
- 파일 예제:
deployment.yaml
: 애플리케이션의 배포를 정의합니다.service.yaml
: 애플리케이션 서비스를 정의합니다.ingress.yaml
: 외부에서 접근 가능한 인그레스를 정의합니다.
저장소에 파일 업로드
- 준비된 파일들을 GitLab 저장소에 업로드합니다. 초기 구성에는 최소한 Dockerfile 또는 이미지를 참조하는 deployment.yaml이 포함되어야 합니다.
2. Argo CD에 저장소 연결
Argo CD 설치
- 이미 설치되어 있지 않다면, Argo CD를 Kubernetes 클러스터에 설치합니다.
저장소 연결
- Argo CD UI 또는 CLI를 사용하여 GitLab 저장소를 Argo CD에 연결합니다.
- CLI 예제
argocd repo add https://gitlab.com/<username>/<project-name>.git --username <your-username> --password <your-password>
- 이렇게 하면 Argo CD가 GitLab 저장소의 변경을 감지할 준비가 됩니다.
3. Argo CD 애플리케이션 설정
애플리케이션 생성
- Argo CD를 사용하여 GitLab 저장소와 연동된 새 애플리케이션을 생성합니다.
- CLI 예제
argocd app create <app-name> \ --repo https://gitlab.com/<username>/<project-name>.git \ --path <path-to-k8s-manifests> \ --dest-server https://kubernetes.default.svc \ --dest-namespace <namespace>
path-to-k8s-manifests
는 저장소 내의 Kubernetes 매니페스트 파일이 위치한 디렉토리 경로입니다.- 이 애플리케이션 설정을 통해 Argo CD는 지정된 경로의 매니페스트를 사용하여 Kubernetes에 자동 배포를 수행합니다.
4. 자동 동기화 설정
- Argo CD에서 자동 동기화를 설정하면, GitLab 저장소에 새로운 변경사항이 push될 때마다 자동으로 클러스터에 배포가 진행됩니다.
- CLI로 자동 동기화 활성화
argocd app set <app-name> --sync-policy automated
5. 최종 확인
- 모든 설정이 완료되면, GitLab에 코드를 push하고 Argo CD가 변경사항을 감지하여 Kubernetes 클러스터에 자동으로 배포하는지 확인합니다.
이 프로세스를 통해 GitLab과 Argo CD를 연동하여 Kubernetes에 효과적으로 자동 배포를 구성할 수 있습니다. 각 단계에서 필요한 추가 구성은 프로젝트의 요구사항에 따라 조정될 수 있습니다.