Otentikasi di Kubernetes menggunakan GitHub OAuth dan Dex
Saya mempersembahkan kepada Anda tutorial untuk menghasilkan akses ke cluster Kubernetes menggunakan Dex, dex-k8s-authenticator, dan GitHub.
Meme lokal dari obrolan Kubernetes berbahasa Rusia Telegram
pengenalan
Kami menggunakan Kubernetes untuk menciptakan lingkungan dinamis untuk tim pengembangan dan QA. Jadi kami ingin memberi mereka akses ke cluster untuk dashboard dan kubectl. Tidak seperti OpenShift, vanilla Kubernetes tidak memiliki autentikasi asli, jadi kami menggunakan alat pihak ketiga untuk ini.
GitHub - hanya karena kami menggunakan GitHub di perusahaan kami
Kami mencoba menggunakan Google OIDC, tapi sayangnya kami gagal untuk memulainya dengan grup, jadi integrasi dengan GitHub cocok untuk kami. Tanpa pemetaan kelompok, tidak mungkin tercipta kebijakan RBAC yang berbasis kelompok.
Jadi, bagaimana proses otorisasi Kubernetes kami bekerja dalam representasi visual:
Proses otorisasi
Sedikit lebih detail dan poin demi poin:
Pengguna masuk ke dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator meneruskan permintaan ke Dex (dex.k8s.example.com)
Dex mengalihkan ke halaman login GitHub
GitHub menghasilkan informasi otorisasi yang diperlukan dan mengembalikannya ke Dex
Dex meneruskan informasi yang diterima ke dex-k8s-authenticator
Pengguna menerima token OIDC dari GitHub
dex-k8s-authenticator menambahkan token ke kubeconfig
kubectl meneruskan token ke KubeAPIServer
KubeAPIServer mengembalikan akses ke kubectl berdasarkan token yang diteruskan
Pengguna mendapat akses dari kubectl
Tindakan persiapan
Tentu saja, kami sudah menginstal cluster Kubernetes (k8s.example.com), dan juga dilengkapi dengan HELM yang sudah diinstal sebelumnya. Kami juga memiliki organisasi di GitHub (super-org).
Jika Anda tidak memiliki HELM, instal sangat sederhana.
Pertama kita perlu menyiapkan GitHub.
Buka halaman pengaturan organisasi, (https://github.com/organizations/super-org/settings/applications) dan buat aplikasi baru (Aplikasi OAuth Resmi):
Membuat aplikasi baru di GitHub
Isi kolom dengan URL yang diperlukan, misalnya:
URL beranda: https://dex.k8s.example.com
URL panggilan balik otorisasi: https://dex.k8s.example.com/callback
Hati-hati dengan tautan, penting untuk tidak kehilangan garis miring.
Menanggapi formulir yang sudah diisi, GitHub akan menghasilkan Client ID ΠΈ Client secret, simpanlah di tempat yang aman, karena akan berguna bagi kita (misalnya kita gunakan Kubah untuk menyimpan rahasia):
Buka halaman masuk (https://login.k8s.example.com) dan masuk menggunakan akun GitHub Anda:
Halaman masuk
Halaman login dialihkan ke GitHub
Ikuti instruksi yang dihasilkan untuk mendapatkan akses
Setelah menyalin-menempelkan halaman web, kita dapat menggunakan kubectl untuk mengelola sumber daya cluster kita:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
Dan ini berhasil, semua pengguna GitHub di organisasi kami dapat melihat sumber daya dan masuk ke pod, tetapi mereka tidak memiliki hak untuk mengubahnya.