ข้ามไปยังเนื้อหาหลัก

Kubernetes

ตามเอกสารของ Kubernetes, API Server ของ Kubernetes สามารถยืนยันตัวตนได้โดยใช้ OpenID Connect (OIDC) บทความนี้จะแนะนำวิธีการตั้งค่าการยืนยันตัวตนใน Kubernetes โดยใช้ Casdoor

ความต้องการของสภาพแวดล้อม

ก่อนที่จะเริ่มต้น โปรดตรวจสอบว่าคุณมีสภาพแวดล้อมต่อไปนี้:

  • คลัสเตอร์ Kubernetes
  • แอปพลิเคชัน Casdoor เช่นเว็บไซต์ตัวอย่างนี้ demo website
  • เครื่องมือคำสั่ง kubectl (ไม่จำเป็น)
หมายเหตุ

Kubernetes oidc-issuer-url ยอมรับเฉพาะ URL ที่ใช้คำนำหน้า https:// ดังนั้นแอปพลิเคชัน Casdoor ของคุณควรถูกปรับใช้บนเว็บไซต์ HTTPS

ขั้นตอนที่ 1: การสร้างแอปพลิเคชัน Casdoor และบัญชีผู้ใช้สำหรับการยืนยันตัวตน

ไปที่แอปพลิเคชัน Casdoor ของคุณและเพิ่มแอปพลิเคชันใหม่ที่เรียกว่า Kubernetes โปรดจำ Name, Organization, client ID, client Secret, และเพิ่มประเภทของการอนุญาตให้กับแอปนี้

สร้างแอปพลิเคชันใน Casdoor ประเภทของการอนุญาต

ต่อไป, เพิ่มผู้ใช้ใหม่ในแอปพลิเคชันที่คุณเพิ่งสร้าง โปรดทราบว่า Organization และ Signup application ที่ใช้ที่นี่ควรตรงกับแอปที่ลงทะเบียนไว้ก่อนหน้านี้

เพิ่มผู้ใช้ใน Casdoor

ขั้นตอนที่ 2: ตั้งค่า Kubernetes API Server ด้วยการยืนยันตัวตน OIDC

เพื่อเปิดใช้งานปลั๊กอิน OIDC, คุณต้องตั้งค่าธงต่อไปนี้บน API server:

  • --oidc-issuer-url: URL ของผู้ให้บริการที่อนุญาตให้ API server ค้นหากุญแจสาธารณะ
  • --oidc-client-id: ไอดีลูกค้าที่ทุกโทเค็นต้องถูกออกให้

บทความนี้ใช้ minikube เพื่อการสาธิต คุณสามารถตั้งค่าปลั๊กอิน OIDC สำหรับ API server ของ minikube โดยใช้คำสั่งต่อไปนี้เมื่อเริ่มต้น:

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

ขั้นตอนที่ 3: ทดสอบการยืนยันตัวตน OIDC

รับข้อมูลการยืนยันตัวตน

เนื่องจาก kubectl ไม่มี frontend, การยืนยันตัวตนสามารถทำได้โดยการส่งคำขอ POST ไปยังเซิร์ฟเวอร์ Casdoor นี่คือโค้ดในภาษา Python ที่ส่งคำขอ POST ไปยังเซิร์ฟเวอร์ Casdoor และเรียกคืน id_token และ refresh_token:

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 server ของ Kubernetes

การยืนยันตัวตนที่พึ่งพา HTTP Request

เพิ่มโทเค็นไปยังส่วนหัวของคำขอ

curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
  • https://www.xxx.com เป็นที่อยู่การปรับใช้ของ API server ของ Kubernetes

การยืนยันตัวตนที่พึ่งพา Kubectl Client

วิธีการใช้ไฟล์การตั้งค่า

เขียนการตั้งค่าต่อไปนี้ลงในไฟล์ ~/.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

ตอนนี้คุณสามารถเข้าถึง API server ของคุณโดยตรงโดยใช้ kubectl ลองรันคำสั่งทดสอบดู

kubectl cluster-info

วิธีการใช้พารามิเตอร์บรรทัดคำสั่ง

หรือคุณสามารถยืนยันตัวตนได้โดยการเพิ่ม id_token โดยตรงเข้ากับพารามิเตอร์บรรทัดคำสั่งของ kubectl

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