Kubernetes
Kubernetes 문서에 따르면, Kubernetes의 API 서버는 OpenID Connect (OIDC)를 사용하여 인증할 수 있습니다. 이 글은 Casdoor를 사용하여 Kubernetes에서 인증을 구성하는 방법에 대해 안내합니다.
환경 요구사항
시작하기 전에 다음의 환경이 있는지 확인하십시오:
- Kubernetes 클러스터.
- 이런 식의 Casdoor 애플리케이션 데모 웹사이트.
- kubectl 명령 도구 (선택 사항).
Kubernetes의 oidc-issuer-url
은 https://
접두사를 사용하는 URL만 허용합니다. 따라서 Casdoor 애플리케이션은 HTTPS 웹사이트에 배포되어야 합니다.
단계 1: 인증을 위한 Casdoor 앱 및 사용자 계정 생성
Casdoor 애플리케이션으로 이동하여 Kubernetes라는 새 애플리케이션을 추가하십시오. Name
, Organization
, client ID
, client Secret
을 기억하고, 이 앱에 몇 가지 권한 유형을 추가하십시오.
다음으로, 방금 생성한 애플리케이션에 새 사용자를 추가하십시오. 여기서 사용된 Organization
과 Signup application
은 이전에 등록된 앱과 일치해야 합니다.
단계 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_token
과 refresh_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