반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- seldon core
- MLflow
- mlops
- Kubernetes 인증
- gitops
- Kopf
- tekton
- blue/green
- CANARY
- serving
- Argo
- Pulumi
- argo rollout
- Litmus
- Continuous Deployment
- 카오스 엔지니어링
- CI/CD
- kubernetes operator
- 오퍼레이터
- Model Serving
- knative
- argocd
- Kubeflow
- Kubernetes
- gitea
- opentelemetry
- keda
- nginx ingress
- opensearch
- operator
Archives
- Today
- Total
Kubernetes 이야기
Dex와 OIDC 인증 본문
반응형
Dex는 OpenID Connect를 사용하는 ID 서비스이다.
Dex의 흐름은 다음과 같다.
- 사용자가 클라이언트 앱을 방문
- 클라이언트 앱은 OAuth2 요청을 통해 사용자를 dex로 리디렉션
- Dex는 사용자의 신원을 결정
- Dex는 코드를 사용하여 사용자를 클라이언트로 리디렉션
- 클라이언트는 코드를 dex와 id_token으로 교환
설치
---
apiVersion: v1
kind: Namespace
metadata:
name: dex
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: dex
name: dex
namespace: dex
spec:
replicas: 1
selector:
matchLabels:
app: dex
template:
metadata:
labels:
app: dex
spec:
serviceAccountName: dex # This is created below
containers:
- image: ghcr.io/dexidp/dex:v2.35.3
name: dex
command: ["/usr/local/bin/dex", "serve", "/etc/dex/cfg/config.yaml"]
ports:
- name: https
containerPort: 5556
volumeMounts:
- name: config
mountPath: /etc/dex/cfg
readinessProbe:
httpGet:
path: /healthz
port: 5556
scheme: HTTP
volumes:
- name: config
configMap:
name: dex-config
items:
- key: config.yaml
path: config.yaml
---
apiVersion: v1
kind: Service
metadata:
name: dex
namespace: dex
spec:
selector:
app: dex
ports:
- name: http
protocol: TCP
port: 5556
targetPort: 5556
가끔 dex pod가 0/1 Running 상태로 호출이 안되는 경우가 발생한다. 원인은 /healthz 페이지가 404 not found에러가 발생하는데 정확한 원인을 찾지는 못했다.
dex에 사용할 configmap은 다음과 같다. 이 configmap은 nginx -> oauth2-proxy -> dex -> keycloak 로 연결되는 설정이다.
nginx->oauth2-proxy 설정 방법은 다음을 참고한다.
https://kmaster.tistory.com/150
apiVersion: v1
kind: ConfigMap
metadata:
name: dex-config
data:
config.yaml: |-
issuer: <http://dex>
storage:
type: kubernetes
config:
inCluster: true
web:
http: 0.0.0.0:5556
staticClients:
- id: test # oauth2에서 이 이름을 입력해야 한다.
secret: test-secret # oauth2에서 이 이름을 입력해야 한다.
name: test
redirectURIs:
- <http://nginx/oauth2/callback>
connectors:
- type: oidc
id: keycloak
name: keycloak
config:
clientID: {{ CLIENT_ID }}
clientSecret: {{ CLIENT_SECRET }}
idpIssuerURL: {{ KEYCLOAK_URL }}/auth/realms/{{ REALM_NAME }}
redirectURI: <http://dex/callback>
insecure: false
expiry:
idTokens: 5m
refreshTokens:
absoluteLifetime: 1h
reuseInterval: 3s
oauth2:
skipApprovalScreen: true
Service Account 와 role을 위해 다음을 생성한다.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: dex
name: dex
namespace: dex
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: dex
rules:
- apiGroups: ["dex.coreos.com"] # API group created by dex
resources: ["*"]
verbs: ["*"]
- apiGroups: ["apiextensions.k8s.io"]
resources: ["customresourcedefinitions"]
verbs: ["create"] # To manage its own resources, dex must be able to create customresourcedefinitions
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dex
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: dex
subjects:
- kind: ServiceAccount
name: dex # Service account assigned to the dex pod, created above
namespace: dex # The namespace dex is running in
이제 nginx 를 브라우저로 호출 후 로그인 하면 다음 화면으로 이동한다.
만약 grant 화면을 조회하지 않고 싶으면
oauth2: skipApprovalScreen: true 옵션을 설정한다.
반응형
'Kubernetes > 일반' 카테고리의 다른 글
Strimzi로 Kubernetes에 Apache Kafka 설치 (1) | 2023.12.10 |
---|---|
Kubernetes Gateway API (0) | 2023.12.10 |
OAuth2 Proxy와 Keycloak 연동 (0) | 2023.02.11 |
Chaos Mesh 에서 Physical Machines 카오스 엔지니어링 (0) | 2023.02.08 |
KubeVela (0) | 2023.01.26 |
Comments