ArgoCD
를 SSO
로 로그인하게끔 하여 직접 아이디/비밀번호
를 기억하지 않아도 되게끔 하였다. 그리고 GitHub
으로 RBAC
을 적용하여 그룹별로 접근권한을 달리해줄 수 있도록 하였다.
ArgoCD
를 외부에 등록해놓아야 한다. (안해도 되는지를 모름..ㅎㅎ)
나는 아래 링크로 ArgoCD
를 외부에 공개해놓았다.
github 에 로그인한다.
아래 링크를 클릭한다.
OAuth App
를 생성한다.
아래와 같이 등록한다.
Homepage URL
: <host>
<---- (이건 아무거나 해도 될 것 같음).
Authorization callback URL
: <host>/api/dex/callback
그 다음, Client ID
, Client secrets
의 값을 보관해둔다.
argoCD
의 ConfigMap
인 argocd-cm
을 수정한다.
# $ kubectl edit cm argocd-cm
apiVersion: v1
kind: ConfigMap
data:
...
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
clientID: <이전에 저장해둔 clientID 값>
clientSecret: <이전에 저장해둔 clientSecret 값>
# url: <argoCD host 명>
url: https://argocd.entto.shop
...
argocd-cm
의GitHub
상세 설정 설명은 아래에서 확인할 수 있다.
https://github.com/dexidp/website/blob/main/content/docs/connectors/github.md
argoCD
의 ConfigMap
인 argocd-rbac-cm
을 수정한다.scopes
, policy.csv
에 값을 추가한다. apiVersion: v1
data:
...
scopes: '[groups, email]' # <--- 기본값은 [groups] 이다.
policy.csv: |
p, role:admin, applications, *, */*, allow
p, role:admin, clusters, *, *, allow
p, role:admin, projects, *, *, allow
p, role:admin, repositories, *, *, allow
p, role:admin, certificates, *, *, allow
p, role:admin, gpgkeys, *, *, allow
p, role:admin, accounts, *, *, allow
g, sororiri@gmail.com, role:admin <---------------- 자신의 이메일을 넣는다.
...
여기까지 하면 자동으로 ArgoCD
서버에 해당 설정이 반영이 된다.
argoCD
에 GitHub
로 로그인한다.
나의 경우 최초 로그인할 때에는 로그인이 안되고 계속 로그인 페이지로 이동되었다. 한 6~7번 누르면 다음 페이지로 이동한다.
아래처럼 나오는데 수락한다.
그럼 정상적으로 접속이 되는 것을 확인할 수 있다.
조직(organization)
를 만든다.Team
을 만든다. (나는 Devops
라고 만들었다.)argoCD
의 ConfigMap
인 argocd-cm
을 수정한다.loadAllGroups: true
를 추가한다.loadAllGroups: true
을 추가하면 사용자의 그룹정보를 권한 설정(RBAC)
할 때에 사용할 수 있게 된다.# $ kubectl edit cm argocd-cm
apiVersion: v1
kind: ConfigMap
data:
...
dex.config: |
connectors:
- type: github
id: github
name: GitHub
config:
...
loadAllGroups: true <----- 새로 추가한다.
...
...
만약 특정 그룹만 로그인을 허용하게 하고 싶다면 dex.config 에 orgs 를 추가한다.
argoCD
의 ConfigMap
인 argocd-rbac-cm
을 수정한다.role:admin
을 추가하고 싶다면,policy.csv
에 g, <조직명>:<팀명>, role:admin
을 추가한다.apiVersion: v1
data:
...
policy.csv: |
...
p, role:admin, accounts, *, *, allow
...
# g, <조직명>:<팀명>, role:admin
g, memomou:Devops, role:admin
...
원하는 유저를 자신의 팀에 추가한다.
해당 유저가 ArgoCD
에 로그인하여 정상적으로 동작하는 지 확인한다.
SSO 로그인
이 안되는 경우, 아래처럼 dex-server 파드
를 디버깅하여 원인을 분석할 수 있다.
dex-server
는 argoCD
의 SSO 인증
에 관여하는 서버이다.
$ kubectl get po -n argocd | grep dex
> argocd-dex-server-7df65fb4f4-qt9ps
dex-server
의 로그를 확인한다. 해당 로그들을 보고$ kubectl logs -n argocd -f argocd-dex-server-7df65fb4f4-qt9ps
> ...
time="2024-10-17T20:49:20Z" level=info msg="login successful: connector \"github\", username=\"2sangyun\", preferred_username=\"SangYunLeee\", email=\"sororiri@gmail.com\", groups=[\"memomou\" \"memomou:Devops\"]"
...
이상으로 적용 방법 공유를 마칩니다.