Sahkan dalam Kubernetes menggunakan GitHub OAuth dan Dex
Saya menyampaikan kepada perhatian anda tutorial untuk menjana akses kepada gugusan Kubernetes menggunakan Dex, dex-k8s-authenticator dan GitHub.
Meme tempatan daripada sembang Kubernetes berbahasa Rusia masuk Telegram
Pengenalan
Kami menggunakan Kubernetes untuk mencipta persekitaran dinamik untuk pembangunan dan pasukan QA. Jadi kami ingin memberi mereka akses kepada kluster untuk kedua-dua papan pemuka dan kubectl. Tidak seperti OpenShift, vanilla Kubernetes tidak mempunyai pengesahan asli, jadi kami menggunakan alat pihak ketiga untuk ini.
GitHub - semata-mata kerana kami menggunakan GitHub dalam syarikat kami
Kami cuba menggunakan Google OIDC, tetapi malangnya kami gagal untuk memulakannya dengan kumpulan, jadi penyepaduan dengan GitHub sangat sesuai untuk kami. Tanpa pemetaan kumpulan, dasar RBAC tidak akan dapat dibuat berdasarkan kumpulan.
Jadi, bagaimanakah proses kebenaran Kubernetes kami berfungsi dalam perwakilan visual:
Proses kebenaran
Sedikit lebih terperinci dan titik demi titik:
Pengguna log masuk ke dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator memajukan permintaan kepada Dex (dex.k8s.example.com)
Dex mengubah hala ke halaman log masuk GitHub
GitHub menjana maklumat kebenaran yang diperlukan dan mengembalikannya kepada Dex
Dex menghantar maklumat yang diterima kepada dex-k8s-authenticator
Pengguna menerima token OIDC daripada GitHub
dex-k8s-authenticator menambah token ke kubeconfig
kubectl menghantar token kepada KubeAPIServer
KubeAPIServer mengembalikan akses kepada kubectl berdasarkan token yang diluluskan
Pengguna mendapat akses daripada kubectl
Tindakan persediaan
Sudah tentu, kami sudah memasang kluster Kubernetes (k8s.example.com), dan turut disertakan dengan HELM yang diprapasang. Kami juga mempunyai organisasi di GitHub (super-org).
Jika anda tidak mempunyai HELM, pasangkannya sangat mudah.
Mula-mula kita perlu menyediakan GitHub.
Pergi ke halaman tetapan organisasi, (https://github.com/organizations/super-org/settings/applications) dan buat aplikasi baharu (Apl OAuth Dibenarkan):
Mencipta aplikasi baharu pada GitHub
Isikan medan dengan URL yang diperlukan, contohnya:
URL halaman utama: https://dex.k8s.example.com
URL panggilan balik kebenaran: https://dex.k8s.example.com/callback
Berhati-hati dengan pautan, adalah penting untuk tidak kehilangan garis miring.
Sebagai tindak balas kepada borang yang lengkap, GitHub akan menjana Client ID ΠΈ Client secret, simpan di tempat yang selamat, ia akan berguna kepada kita (contohnya, kita gunakan Bilik Kebal untuk menyimpan rahsia):
Pergi ke halaman log masuk (https://login.k8s.example.com) dan log masuk menggunakan akaun GitHub anda:
Halaman log masuk
Halaman log masuk diubah hala ke GitHub
Ikuti arahan yang dijana untuk mendapatkan akses
Selepas menyalin-tampal daripada halaman web, kami boleh menggunakan kubectl untuk mengurus sumber kluster kami:
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 ia berfungsi, semua pengguna GitHub dalam organisasi kami boleh melihat sumber dan log masuk ke pod, tetapi mereka tidak mempunyai hak untuk mengubahnya.