공부/Kubernetes
kubectl에서 user token 사용하기 (keycloak oidc)
토고미
2022. 10. 10. 00:39
kubectl에서 --token 옵션은 service account 토큰만 가능하다.
하지만 만약 k8s가 oidc 연동 중이라면 kubectl로 user token도 사용할 수 있다.
방법은 service account 토큰 사용법과는 조금 다르다.
1. kube-apiserver.yaml 확인
apiVersion: v1
kind: Pod
metadata:
...
spec:
containers:
- command:
...
- --oidc-issuer-url=https://{KEYCLOAK 주소}/auth/realms/{REALM 이름}
- --oidc-client-id=my-client
- --oidc-username-claim=preferred_username
- --oidc-username-prefix=-
- --oidc-groups-claim=group
/etc/kubernetes/manifests/kube-apiserver.yaml 경로의 파일에서 k8s 클러스터의 oidc 연동 설정을 확인한다.
여기서 --oidc-issuer-url과 --oidc-client-id 정보를 kubectl 설정에 넣어줘야한다.
2. user token 이용해 kubectl user 생성
kubectl config set-credentials togomi \
--auth-provider=oidc \
--auth-provider-arg=idp-issuer-url="https://{KEYCLOAK 주소}/auth/realms/{REALM 이름}" \
--auth-provider-arg=client-id="my-client" \
--auth-provider-arg=id-token="$ID_TOKEN" \
--auth-provider-arg=refresh-token="$REFRESH_TOKEN"
id-token과 refresh-token을 발급 받은 뒤, 위에 ID_TOKEN, REFRESH_TOKEN 변수에 넣으면 된다.
(참고) keycloak으로 user token 발급 받는 방법
https://{KEYCLOAK 주소}/auth/realms/{REALM 이름}/protocol/openid-connect/token의 주소로 POST 콜을 보내면 된다.
body는 아래 항목을 채워넣는다.
grant_type=password
scope=openid
client_id={클라이언트 id}
username={유저 네임}
password={유저 비밀번호}
client_secret={시크릿} (client acces-type이 confidential 이라면 넣어준다.)
3. context 설정
kubectl config set-context my-context --user=togomi --cluster=kubernetes
kubectl config use-context my-context
2번에서 생성한 유저를 이용해 context를 만들고 해당 context를 사용하면 된다.