메인 콘텐츠로 건너뛰기

Kubernetes

Kubernetes 문서에 따르면, Kubernetes의 API 서버는 OpenID Connect (OIDC)를 사용하여 인증할 수 있습니다. 이 글은 Casdoor를 사용하여 Kubernetes에서 인증을 구성하는 방법에 대해 안내합니다.

환경 요구사항

시작하기 전에 다음의 환경이 있는지 확인하십시오:

  • Kubernetes 클러스터.
  • 이런 식의 Casdoor 애플리케이션 데모 웹사이트.
  • kubectl 명령 도구 (선택 사항).
노트

Kubernetes의 oidc-issuer-urlhttps:// 접두사를 사용하는 URL만 허용합니다. 따라서 Casdoor 애플리케이션은 HTTPS 웹사이트에 배포되어야 합니다.

단계 1: 인증을 위한 Casdoor 앱 및 사용자 계정 생성

Casdoor 애플리케이션으로 이동하여 Kubernetes라는 새 애플리케이션을 추가하십시오. Name, Organization, client ID, client Secret을 기억하고, 이 앱에 몇 가지 권한 유형을 추가하십시오.

Casdoor에서 애플리케이션 생성 권한 유형

다음으로, 방금 생성한 애플리케이션에 새 사용자를 추가하십시오. 여기서 사용된 OrganizationSignup application은 이전에 등록된 앱과 일치해야 합니다.

Casdoor에 사용자 추가

단계 2: OIDC 인증을 사용하여 Kubernetes API 서버 구성

OIDC 플러그인을 활성화하려면 API 서버에서 다음 플래그를 설정해야 합니다:

  • --oidc-issuer-url: API 서버가 공개 서명 키를 발견할 수 있게 하는 제공자의 URL입니다.
  • --oidc-client-id: 모든 토큰이 발행되어야 하는 클라이언트 id입니다.

이 글은 미니큐브를 사용하여 설명합니다. 다음 명령을 시작할 때 사용하여 minikube의 API 서버에 대한 OIDC 플러그인을 구성할 수 있습니다:

minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe

단계 3: OIDC 인증 테스트

인증 정보 획득

kubectl에 프론트엔드가 없기 때문에, Casdoor 서버에 POST 요청을 보내 인증을 수행할 수 있습니다. 다음은 Casdoor 서버에 POST 요청을 보내고 id_tokenrefresh_token을 검색하는 Python 코드입니다:

import requests
import json

url = "https://demo.casdoor.com/api/login/oauth/access_token"
payload = json.dumps({
"grant_type": "password",
"client_id": "Kubernetes",
"client_secret": "72c65c3912aec24a9f3ec41b65a7577114ed2bae",
"username": "user_3u94sf",
"password": "123456"
})
response = requests.request("POST", url, data=payload)

print(response.text)

이 코드를 실행한 후에는 다음과 유사한 응답을 받아야 합니다:

{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}

이제 방금 얻은 id_token을 사용하여 쿠버네티스 API 서버에 인증할 수 있습니다.

HTTP 요청 기반 인증

토큰을 요청 헤더에 추가하십시오.

curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
  • https://www.xxx.com은 쿠버네티스 API 서버 배포 주소입니다.

Kubectl 클라이언트 기반 인증

구성 파일 방법

다음 구성을 ~/.kube/config 파일에 작성합니다. 위의 구성 파일에서 각 구성 항목을 이전에 얻은 값으로 대체해야 합니다.

users:
- name: minikube
user:
auth-provider:
config:
client-id: Kubernetes
client-secret: 72c65c3912aec24a9f3ec41b65a7577114ed2bae
id-token: $(id_token)
idp-issuer-url: https://demo.casdoor.com
refresh-token: $(refresh_token)
name: oidc

이제 kubectl을 사용하여 API 서버에 직접 액세스할 수 있습니다. 테스트 명령을 실행해 보십시오.

kubectl cluster-info

명령 줄 인수 방법

또는, kubectl의 명령 줄 매개변수에 id_token을 직접 추가하여 인증할 수 있습니다.

kubectl --token=$(id_token) cluster-info