
Tutorial singkat tentang cara menggunakan Kubernet dengan Keycloak untuk mengikat ke server LDAP Anda dan mengonfigurasi impor pengguna dan grup. Ini akan memungkinkan Anda untuk mengkonfigurasi RBAC untuk pengguna Anda dan menggunakan auth-proxy untuk melindungi Dashboard Kubernetes dan aplikasi lain yang tidak dapat mengotorisasi sendiri.
Instal Keycloak
Misalkan Anda sudah memiliki server LDAP. Ini bisa berupa Active Directory, FreeIPA, OpenLDAP atau yang lainnya. Jika Anda tidak memiliki server LDAP, maka pada prinsipnya Anda dapat membuat pengguna langsung di antarmuka Keycloak, atau menggunakan penyedia oidc publik (Google, Github, Gitlab), hasilnya akan hampir sama.
Pertama-tama, kita akan menginstal Keycloak itu sendiri, instalasi dapat dilakukan secara terpisah, dan segera di cluster Kubernetes, sebagai aturan, jika Anda memiliki beberapa cluster Kubernetes, akan lebih mudah untuk menginstalnya secara terpisah. Di sisi lain, Anda selalu dapat menggunakan grafik helm resmi dan menginstalnya langsung di cluster Anda.
Untuk menyimpan data Keycloak, Anda memerlukan database. Secara default, h2
digunakan (semua data disimpan secara lokal), tetapi juga dimungkinkan untuk menggunakan postgres
, mysql
atau mariadb
.
Jika Anda masih memutuskan untuk menginstal Keycloak secara terpisah, Anda akan menemukan instruksi lebih rinci dalam dokumentasi resmi .
Pengaturan Federasi
Pertama, buat ranah baru. Ranah adalah ruang aplikasi kita. Setiap aplikasi dapat memiliki ranah sendiri dengan berbagai pengguna dan pengaturan otorisasi. Wilayah master digunakan oleh Keycloak sendiri dan tidak benar untuk menggunakannya untuk hal lain.
Klik Tambahkan ranah
Opsi | Nilai |
---|
Nama | kubernetes |
Nama tampilan | Kubernetes |
Nama Tampilan HTML | <img src="https://kubernetes.io/images/nav_logo.svg" width="400" \> |
Kubernetes secara default memeriksa apakah pengguna memiliki email atau tidak. Karena kami menggunakan server LDAP kami sendiri, maka pemeriksaan ini hampir selalu menghasilkan false
. Mari matikan representasi parameter ini di Kubernetes:
Lingkup klien -> Email -> Pemetaan -> Email diverifikasi (Hapus)
Sekarang konfigurasikan federasi, untuk ini kita akan pergi ke:
Federasi pengguna -> Tambahkan penyedia ... -> ldap
Berikut adalah contoh pengaturan untuk FreeIPA:
Opsi | Nilai |
---|
Nama Tampilan Konsol | freeipa.example.org |
Vendor | Red Hat Directory Server |
Atribut LDAP UUID | ipauniqueid |
URL koneksi | ldaps://freeipa.example.org |
Pengguna DN | cn=users,cn=accounts,dc=example,dc=org |
Bind dn | uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org |
Mengikat kredensial | <password> |
Izinkan otentikasi Kerberos: | on |
Kerberos Realm: | EXAMPLE.ORG |
Server Principal: | HTTP/freeipa.example.org@EXAMPLE.ORG |
KeyTab: | /etc/krb5.keytab |
Pengguna keycloak-svc
harus dibuat terlebih dahulu di server LDAP kami.
Dalam kasus Active Directory, cukup pilih Vendor: Active Directory dan pengaturan yang diperlukan secara otomatis dimasukkan ke dalam formulir.
Klik Simpan
Sekarang mari kita lanjutkan:
Federasi pengguna -> freeipa.example.org -> Pemetaan -> Nama Depan
Opsi | Nilai |
---|
Atap ldap | givenName |
Sekarang aktifkan pemetaan grup:
Federasi pengguna -> freeipa.example.org -> Pemetaan -> Buat
Opsi | Nilai |
---|
Nama | groups |
Tipe mapper | group-ldap-mapper |
Grup LDAP DN | cn=groups,cn=accounts,dc=example,dc=org |
Grup Pengguna Ambil Strategi | GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE |
Ini melengkapi konfigurasi federasi, mari beralih ke pengaturan klien.
Pengaturan klien
Buat klien baru (aplikasi yang akan menerima pengguna dari Keycloak). Kami lulus:
Klien -> Buat
Opsi | Nilai |
---|
ID Klien | kubernetes |
Jenis akses | confidenrial |
Root URL | http://kubernetes.example.org/ |
URI Pengalihan Valid | http://kubernetes.example.org/* |
URL admin | http://kubernetes.example.org/ |
Juga buat ruang lingkup untuk grup:
Lingkup Klien -> Buat
Opsi | Nilai |
---|
Templat | No template |
Nama | groups |
Jalur grup penuh | false |
Dan konfigurasikan mapper untuk mereka:
Lingkup Klien -> grup -> Pemetaan -> Buat
Opsi | Nilai |
---|
Nama | groups |
Tipe mapper | Group membership |
Nama Klaim Token | groups |
Sekarang kita perlu mengaktifkan grup pemetaan dalam lingkup klien kami:
Klien -> kubernetes -> Lingkup Klien -> Lingkup Klien Default
Pilih grup dalam Lingkup Klien Yang Tersedia , klik Tambahkan yang dipilih
Sekarang konfigurasikan otentikasi aplikasi kami, buka:
Klien -> kubernetes
Opsi | Nilai |
---|
Otorisasi Diaktifkan | ON |
Klik simpan dan ini menyelesaikan pengaturan klien, sekarang di tab
Klien -> kubernetes -> Kredensial
Anda bisa mendapatkan Rahasia yang akan kami gunakan di masa depan.
Konfigurasikan Kubernet
Mengkonfigurasi Kubernetes untuk otentikasi OIDC cukup sepele dan tidak terlalu rumit. Yang perlu Anda lakukan adalah memasukkan sertifikat CA server OIDC Anda di /etc/kubernetes/pki/oidc-ca.pem
dan tambahkan opsi yang diperlukan untuk kube-apiserver.
Untuk melakukan ini, perbarui /etc/kubernetes/manifests/kube-apiserver.yaml
di semua penyihir Anda:
... spec: containers: - command: - kube-apiserver ... - --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem - --oidc-client-id=kubernetes - --oidc-groups-claim=groups - --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes - --oidc-username-claim=email ...
Dan juga perbarui konfigurasi kubeadm di kluster, agar tidak kehilangan pengaturan ini saat memperbarui:
kubectl edit -n kube-system configmaps kubeadm-config
... data: ClusterConfiguration: | apiServer: extraArgs: oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem oidc-client-id: kubernetes oidc-groups-claim: groups oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes oidc-username-claim: email ...
Ini menyelesaikan pengaturan Kubernetes. Anda dapat mengulangi langkah-langkah ini di semua cluster Kubernetes Anda.
Otorisasi awal
Setelah langkah-langkah ini, Anda sudah memiliki kluster Kubernetes dengan otentikasi OIDC yang dikonfigurasi. Satu-satunya titik adalah bahwa pengguna Anda belum memiliki klien yang dikonfigurasi serta kubeconfig mereka sendiri. Untuk mengatasi masalah ini, Anda perlu mengonfigurasi penerbitan kubeconfig otomatis untuk pengguna setelah otorisasi berhasil.
Untuk melakukan ini, Anda dapat menggunakan aplikasi web khusus yang memungkinkan Anda untuk mengotentikasi pengguna dan kemudian mengunduh kubeconfig yang sudah selesai. Salah satu yang paling nyaman adalah Kuberos , yang memungkinkan Anda untuk menggambarkan semua cluster Kubernetes dalam satu konfigurasi dan dengan mudah beralih di antara mereka.
Untuk mengkonfigurasi Kuberos, cukup jelaskan templat untuk kubeconfig dan jalankan dengan parameter berikut:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Lihat Penggunaan pada Github untuk detail lebih lanjut.
Dimungkinkan juga untuk menggunakan kubelogin jika Anda ingin mengotorisasi langsung di komputer pengguna. Dalam hal ini, pengguna membuka browser dengan formulir otorisasi di localhost.
Kubeconfig yang dihasilkan dapat diperiksa di jwt.io. Cukup salin nilai users[].user.auth-provider.config.id-token
dari kubeconfig Anda ke formulir di situs dan segera dapatkan dekripsi.
Pengaturan RBAC
Saat menyiapkan RBAC, Anda bisa merujuk ke nama pengguna (bidang name
di token jwt) dan grup pengguna (bidang groups
di token jwt). Berikut adalah contoh pengaturan izin untuk grup kubernetes-default-namespace-admins
:
kubernetes-default-namespace-adminins.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: default-admins namespace: default rules: - apiGroups: - '*' resources: - '*' verbs: - '*' --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kubernetes-default-namespace-admins namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: default-admins subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: kubernetes-default-namespace-admins
Lebih banyak contoh untuk RBAC dapat ditemukan di dokumentasi resmi Kubernetes.
Konfigurasikan auth-proxy
Ada proyek keycloak-gatekeeper yang luar biasa yang memungkinkan Anda melindungi aplikasi apa pun, memberi pengguna kemampuan untuk mengautentikasi dengan server OIDC. Saya akan menunjukkan bagaimana Anda dapat mengonfigurasinya menggunakan Kubernetes Dashboard sebagai contoh:
dashboard-proxy.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kubernetes-dashboard-proxy spec: replicas: 1 template: metadata: labels: app: kubernetes-dashboard-proxy spec: containers: - args: - --listen=0.0.0.0:80 - --discovery-url=https://keycloak.example.org/auth/realms/kubernetes - --client-id=kubernetes - --client-secret=<your-client-secret-here> - --redirection-url=https://kubernetes-dashboard.example.org - --enable-refresh-tokens=true - --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh - --upstream-url=https://kubernetes-dashboard.kube-system - --resources=uri=/* image: keycloak/keycloak-gatekeeper name: kubernetes-dashboard-proxy ports: - containerPort: 80 livenessProbe: httpGet: path: /oauth/health port: 80 initialDelaySeconds: 3 timeoutSeconds: 2 readinessProbe: httpGet: path: /oauth/health port: 80 initialDelaySeconds: 3 timeoutSeconds: 2 --- apiVersion: v1 kind: Service metadata: name: kubernetes-dashboard-proxy spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: kubernetes-dashboard-proxy type: ClusterIP