공부/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를 사용하면 된다.