일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kubernetes operator
- 카오스 엔지니어링
- 오퍼레이터
- operator
- Argo
- seldon core
- gitops
- opentelemetry
- Kubernetes 인증
- Continuous Deployment
- eBPF
- CANARY
- keda
- Kubeflow
- mlops
- Kopf
- CI/CD
- Model Serving
- Litmus
- serving
- nginx ingress
- knative
- Pulumi
- MLflow
- tekton
- opensearch
- xdp
- argocd
- blue/green
- Kubernetes
- Today
- Total
Kubernetes 이야기
argocd와 keycloak을 사용하여 SSO 구축하기 본문
KeyClock
KeyCloak은 다음과 같은 기능을 제공한다.
- 싱글 사인온 (SSO) : 개별 애플리케이션에서 각각 사용자 인증과 저장을 처리할 필요가 없다. Keycloak에 로그인하면 사용자는 다른 애플리케이션에 액세스하기 위해 다시 로그인할 필요가 없다.
- OpenID / SAML 2.0 지원 : Keycloak은 또한 기존 OpenID Connect 또는 SAML 2.0 ID 제공자를 사용하여 사용자를 인증할 수 있어 Social Network 의 연동이 쉽다.
- User Federation : LDAP이나 Active directory 와 연동하여 SSO 처리가 가능하다.
- 관리 콘솔 : UI을 통해 애플리케이션과 서비스를 생성 및 관리하고 세분화된 권한 부여 정책을 정의할 수 있다.
Keycloak 설치
아래와 같이 chart를 다운로드 받은 후 values를 수정한 후 설치한다.
# git clone https://github.com/bitnami/charts.git
# cd charts/bitnami/keycloak
# helm install keycloak bitnami/keycloak -f values.yaml --namespace keycloak --create-namespace
혹은
helm install --namespace keycloak --create-namespace keycloak bitnami/keycloak --values - <<EOF
auth:
adminPassword: "password"
managementPassword: "password"
postgresql:
enabled: true
auth:
username: keycloak
password: "keycloak"
database: keycloak
existingSecret: ""
architecture: standalone
EOF
설치 후 아래와 같이 Pod가 생성되었는지 확인한다.
# k get all -n keycloak
NAME READY STATUS RESTARTS AGE
pod/keycloak-0 1/1 Running 0 2m7s
pod/keycloak-postgresql-0 1/1 Running 0 2m7s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/keycloak LoadBalancer 10.96.209.133 <pending> 80:31794/TCP,443:31145/TCP 2m7s
service/keycloak-headless ClusterIP None <none> 80/TCP 2m7s
service/keycloak-postgresql ClusterIP 10.96.24.137 <none> 5432/TCP 2m7s
service/keycloak-postgresql-hl ClusterIP None <none> 5432/TCP 2m7s
NAME READY AGE
statefulset.apps/keycloak 1/1 2m7s
statefulset.apps/keycloak-postgresql 1/1 2m7s
[keycloak ingress 생성]
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: keycloak-ingress
namespace: keycloak
annotations:
cert-manager.io/cluster-issuer: selfsigned-cluster-issuer
spec:
rules:
- host: "keycloak.172.21.251.79.nip.io"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: keycloak
port:
number: 80
tls:
- hosts:
- keycloak.172.21.251.79.nip.io
secretName: keycloak-cert
이제 브라우저에서 keycloak 콘솔로 접속해 보자.
로그인을 하면 위와 같은 화면을 보게 될 것이다. 그럼 argocd를 위한 keycloak 설정을 해보자.
우선 keyclock의 용어를 잠시 살펴보자.
용어 | 설명 |
Realms | 사용자, 자격 증명, 역할 및 그룹 집합을 관리한다. 사용자가 이 Realm에 속하고 로그인한다. Realm은 서로 격리되어 있으며 자신이 제어하는 사용자만 관리하고 인증할 수 있다. |
Clients | Client는 Keycloak에 사용자 인증을 요청할 수 있는 객체이다. 대부분의 경우 클라이언트는 Keycloak을 사용하여 자신을 보호하고 싱글 사인온 솔루션을 제공하려는 애플리케이션 및 서비스이다. 클라이언트는 또한 Keycloak으로 보호되는 네트워크의 다른 서비스를 안전하게 호출할 수 있도록 ID 정보 또는 액세스 토큰을 요청하려는 객체일 수도 있다. |
Roles | 역할은 사용자의 유형 또는 범주를 식별한다. Admin, user, manager및 employee는 모두 조직에 존재할 수 있는 일반적인 역할이다. 사용자를 다루는 것은 너무 세분화되고 관리하기 어려울 수 있으므로 애플리케이션은 종종 개별 사용자가 아닌 특정 역할에 액세스 및 권한을 할당한다 |
Users | 사용자는 시스템에 로그인할 수 있는 객체이다. 이메일, 사용자 이름, 주소, 전화번호, 생년월일 등 자신과 관련된 속성을 가질 수 있다. 그룹 구성원이 할당될 수 있으며 특정 역할이 할당된다. |
Groups | 그룹은 사용자 그룹을 관리한다. 속성은 그룹에 대해 정의할 수 있다. 역할을 그룹에 매핑할 수도 있다. 그룹의 구성원이 된 사용자는 그룹이 정의하는 속성 및 역할 매핑을 상속한다. |
identity token | 사용자에 대한 ID 정보를 제공하는 토큰. OpenID Connect 사양의 일부이다. |
access token | 호출되는 서비스에 대한 액세스 권한을 부여하는 HTTP 요청의 일부로 제공될 수 있는 토큰. 이것은 OpenID Connect 및 OAuth 2.0 사양의 일부이다. |
identity provider (IDP) | IDP(Identity Provider)는 사용자를 인증할 수 있는 서비스이다. Keycloak은 IDP이다. |
client role | 클라이언트는 자신에게 특정한 역할을 정의할 수 있다. 이것은 기본적으로 클라이언트 전용의 역할 이름 공간이다. |
1. Realm 생성
2. User 와 Group, Role 설정
그룹을 아래와 같이 2개 생성한다.
사용자를 등록한다.
client scope를 생성한다.
사용자 Client Scopes 설정
3. Client 생성
4. secert 저장
ArgoCD 와 Keyclcok 연동
ArgoCD 설치는 아래를 참고한다.
https://kmaster.tistory.com/76
ArgoCD OIDC 설정
위에서 저장한 Keycloak Client Secret을 base64 인코딩한다.
# echo -n 'JW5DgssNd1DbQFxPBNjHiNc02YnddV1D' | base64
Slc1RGdzc05kMURiUUZ4UEJOakhpTmMwMlluZGRWMUQ=
argocd-secret을 다음과 같이 수정한다.
# kubectl edit secret argocd-secret -n argocd
apiVersion: v1
data:
...
oidc.keycloak.clientSecret: Slc1RGdzc05kMURiUUZ4UEJOakhpTmMwMlluZGRWMUQ=
...
argocd-cm configmap을 다음과 같이 수정한다.
# kubectl edit configmap argocd-cm -n argocd
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
data:
url: https://argocd.172.21.251.79.nip.io
oidc.config: |
name: Keycloak
issuer: https://keycloak.172.21.251.79.nip.io/realms/argocd
clientID: argocd
clientSecret: $oidc.keycloak.clientSecret
requestedScopes: ["openid", "profile", "email", "groups"]
keycloak 17+ 버전부터 issuer 이 변경되었다. 기존에 ~/auth/realms/ 에서 ~/realms/ 로 변경되었다.
마지막으로 argocd-rbac-cm configmap을 수정한다.
# kubectl edit configmap argocd-rbac-cm -n argocd
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
data:
policy.csv: |
g, /argocd-admin, role:admin
이제 로그인을 해보자.
로그인 버튼을 클릭하면 아래와 같은 나타난다.
로그인 후 아래와 같이 정상적으로 argocd로 로그인 할 수 있다.
참고
https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/keycloak/
'Kubernetes > devops' 카테고리의 다른 글
argocd (활용 - helm chart 및 Kustomize 배포) (0) | 2022.05.18 |
---|---|
argocd (활용 - Git 연동) (0) | 2022.05.17 |
argocd (설치) (0) | 2022.05.13 |
GitOps and Flux (0) | 2022.05.07 |
Argo Event (0) | 2022.05.03 |