연재 시리즈

ArgoCD 9편 - Project 상세내용

악분 2022. 10. 23. 17:01
반응형

영상: https://youtu.be/rx-G89XGObA

 

1. Project란?

Project는 Application을 그룹으로 관리하는 개념입니다. Appliction은 생성할 때 Project를 선택해야 하고 Project는 0개 이상 Application을 가질 수 있습니다. 


Application을 그룹핑하여 공통으로 사용하는 설정을 관리하는 장점과 Applicatoin 권한을 제한하여 안정적으로 Argo CD를 운영할 수 있게 합니다. Argo CD를 설치하면 default Project가 기본으로 생성 되어 있습니다.

 

2. 구성요소

Project는 여러가지 정보로 구성됩니다. Git repo, sync할 쿠버네티스 클러스터 정보, Role 등이 있습니다. Project에 속한 Application의 대부분 설정은 Project에 설정된 정보만 사용할 수 있습니다. Project에 종속성(Dependency)이 생기는 특성을 이용하여 Appliction을 그룹핑하여 관리할 수 있습니다. 

 

3. 활용 예

애플리케이션을 목적에 따라 Project를 구성할 수 있습니다.

 

예를 들어 Team이름단위로 Project를 만들 수 있습니다. 또 다른 예는 배포환경(dev, stg, prd)에 따라 Project를 분리할 수 있습니다.

 

4. Project 생성방법

WEB UI에서는 [왼쪽 메뉴 2번째 → Project]메뉴에서 생성할 수 있습니다.

 

Project목록과 함께 Project를 생성할 수 있는 버튼이 있습니다. Argo CD를 설치하면 default Project가 기본으로 있습니다.

 

프로젝트 생성은 간단합니다. 이름과 설명만 입력하면 생성됩니다

 

5. Project 설정

project 생성은 쉽지만 설정은 매우 많습니다. Project생성은 단순히 그룹이름을 만드는 것이고, Project에 속한 Appliction에 대한 세부내용은 Project 설정에서 합니다.

 

5.1 Default Project

default project를 설정을 살펴볼게요.  default Project는 모든 설정이 풀려있어 Application을 제한 없이 생성할 수 있습니다.

 

project목록에서 default를 클릭합니다.

 

핵심 설정만 살펴볼게요. [Source Repositories]는 applicatoin이 사용한 git repo주소를 제한합니다. 별표(아스타)로 되어 있기 때문에 default는 모든 git repo을 사용할 수 있습니다.

 

[Destinations]은 sync를 허용할 쿠버네티스 클러스터 목록입니다. default project는 별표(아스타)로 되어 있어서 모든 쿠버네티스 클러스터에 sync할 수 있습니다.

 

[Cluster Resource Allow List]는 sync할 때 허용할 쿠버네티스 리소스 목록입니다. default project는 별표(아스타)로 되어 있어서 모든 쿠버네티스 리소스를 sync할 수 있습니다.

 

5.2 Project 설정세부 내용

test이름을 갖는 Project를 생성합니다.

 

Project를 생성하면 Project설정화면으로 자동으로 이동합니다.

 

5.2.1 Destination 설정

Destination필드는 Project에 속한 Appliction이 어디 클러스터에 동기화 될 수 있는지를 설정합니다. [Destinations]에 별표(아스타)를 입력하여 모든 쿠버네티스 클러스터에 sync하도록 설정합니다.

 

5.2.2 Cluster resource allow list 설정

Cluster resource allow list는 동기화 할 쿠버네티스 namespace와 리소스를 제한합니다. [Cluster resource allow list]에 모두 별표(아스타)를 입력하여 모든 쿠버네티스 리소스와 모든 namespace에 sync할 수 있도록 설정합니다.

 

6. Project Role

Project Role은 특정 Project에만 유효한 Role입니다. 예를 들어 test1 Project에 생성한 Role은 test1에만 유효하고 다른 Project에는 사용할 수 없습니다. 그리고 web UI로그인은 못하고 JWT방식만 지원합니다. 

 

Argo CD전체 관리 권한보다는 Project만 관리할 수 있는 제한된 권한을 설정할 때 적합합니다.

 

6.1 Role생성 방법

web UI, Argo CD CLI, appproject CRD 모두 가능합니다. web UI에서는 Project화면 왼쪽 위에 생성버튼이 있습니다.

 

Role이름과 설명을 입력하면 Role을 생성할 수 있습니다.

 

생성된 Role은 Project Role탭에서 확인할 수 있습니다.

 

지금 생성한 Role은 권한설정이 안되어 있어 권한이 아무것도 없습니다. 권한 설정은 Project를 설정 후에 Global Role(https://app.gitbook.com/s/OI7SkWblrvyvFgQ1YM6d/~/changes/o6OprDmcVODhscy0dEzQ/user/role)처럼 설정하면 됩니다.

 

6.2 JWT 생성

Project Role은 곧바로 Project에 적용되어 사용되지 않고 JWT를 발급받아 사용할 수 있습니다. JWT는 Project Role설정 화면에서 생성할 수 있습니다. 성성된 JWT는 설정화면이 닫힌 후에 알 수 없으므로 잘 보관해야 합니다.

 

6.3 JWT 사용방법

JWT는 WEB UI에 사용할 수 없고 Argo CLI 또는 REST API, SDK에서 사용할 수 있습니다. 저는 Argo CD CLI 사용 예를 소개드릴게요.

 

먼저 생성한 JWT를 환경변수에 설정합니다. 

TOKEN=<TOKEN>

 

argocd account can-i로 test1 Project의 Application 조회(get)이 가능한지 확인할 수 있습니다. Argo CD login을 하지 않아도 TOKEN으로 인증과 인가가 가능해졌습니다!.

argocd account can-i get applications 'test1/*' --auth-token $TOKENl

 

WEB UI에서 test1 Project의 Appliction을 생성할 수 있도록 create Policy를 추가합니다.

 

그리고 다시 Application 생성 권한을 검사하면 yes가 나옵니다.

argocd account can-i create  applications 'test1/*' --auth-token $TOKEN

반응형