Tutorial kecil tentang cara menggunakan Keycloak untuk menyambungkan Kubernetes ke pelayan LDAP anda dan menyediakan import pengguna dan kumpulan. Ini akan membolehkan anda menyediakan RBAC untuk pengguna anda dan menggunakan proksi auth untuk melindungi Papan Pemuka Kubernetes dan aplikasi lain yang tidak tahu cara membenarkan diri mereka sendiri.
Pemasangan Keycloak
Katakan anda sudah mempunyai pelayan LDAP. Ia boleh menjadi Active Directory, FreeIPA, OpenLDAP atau apa sahaja. Jika anda tidak mempunyai pelayan LDAP, maka pada dasarnya anda boleh membuat pengguna secara langsung dalam antara muka Keycloak, atau menggunakan penyedia oidc awam (Google, Github, Gitlab), hasilnya akan hampir sama.
Pertama sekali, mari kita pasang Keycloak sendiri, pemasangan boleh dilakukan secara berasingan, atau terus ke gugusan Kubernetes, sebagai peraturan, jika anda mempunyai beberapa gugusan Kubernetes, lebih mudah untuk memasangnya secara berasingan. Sebaliknya, anda sentiasa boleh menggunakan
Untuk menyimpan data Keycloak, anda memerlukan pangkalan data. Lalainya ialah h2
(semua data disimpan secara tempatan), tetapi ia juga boleh digunakan postgres
, mysql
atau mariadb
.
Jika anda masih memutuskan untuk memasang Keycloak secara berasingan, anda boleh mendapatkan arahan yang lebih terperinci dalam
Persediaan Persekutuan
Pertama sekali, mari kita cipta alam baharu. Alam adalah ruang permohonan kami. Setiap aplikasi boleh mempunyai alam sendiri dengan pengguna yang berbeza dan tetapan kebenaran. Alam induk digunakan oleh Keycloak sendiri dan menggunakannya untuk perkara lain adalah salah.
Tolak Tambah alam
Lebih Baik
nilai
Nama
kubernetes
Nama Paparan
Kubernetes
Nama Paparan HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes secara lalai menyemak sama ada e-mel pengguna disahkan atau tidak. Memandangkan kami menggunakan pelayan LDAP kami sendiri, semakan ini hampir selalu akan kembali false
. Mari lumpuhkan perwakilan tetapan ini dalam Kubernetes:
Skop pelanggan -> E-mel -> Pemeta -> e-mel disahkan (Padam)
Sekarang mari kita tubuhkan persekutuan, untuk ini kita pergi ke:
Persekutuan pengguna -> Tambahkan pembekal⦠-> ldap
Berikut ialah contoh persediaan untuk FreeIPA:
Lebih Baik
nilai
Nama Paparan Konsol
freeipa.example.org
Penjual
Red Hat Directory Server
Atribut UUID LDAP
ipauniqueid
URL sambungan
ldaps://freeipa.example.org
DN pengguna
cn=users,cn=accounts,dc=example,dc=org
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Ikat Tauliah
<password>
Benarkan pengesahan Kerberos:
on
Alam Kerberos:
EXAMPLE.ORG
Pengetua Pelayan:
HTTP/[email protected]
tab kunci:
/etc/krb5.keytab
Pengguna keycloak-svc
mesti dibuat terlebih dahulu pada pelayan LDAP kami.
Dalam kes Active Directory, hanya pilih Penjual: Active Directory dan tetapan yang diperlukan akan dimasukkan ke dalam borang secara automatik.
Tolak Jimat
Sekarang mari kita teruskan:
Persekutuan pengguna -> freeipa.example.org -> Pemeta -> Nama Awalan
Lebih Baik
nilai
Atribut Ldap
givenName
Sekarang dayakan pemetaan kumpulan:
Persekutuan pengguna -> freeipa.example.org -> Pemeta -> Buat
Lebih Baik
nilai
Nama
groups
Jenis Mapper
group-ldap-mapper
Kumpulan LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Strategi Dapatkan Kumpulan Pengguna
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Ini melengkapkan persediaan persekutuan, mari kita teruskan untuk menyediakan pelanggan.
Persediaan pelanggan
Mari buat klien baharu (aplikasi yang akan menerima pengguna daripada Keycloak). Mari pergi:
Pelanggan -> Buat
Lebih Baik
nilai
ID pelanggan
kubernetes
Jenis Akses
confidenrial
URL akar
http://kubernetes.example.org/
URI Ubah hala yang sah
http://kubernetes.example.org/*
URL Pentadbir
http://kubernetes.example.org/
Kami juga akan membuat skop untuk kumpulan:
Skop pelanggan -> Buat
Lebih Baik
nilai
Templat
No template
Nama
groups
Laluan kumpulan penuh
false
Dan sediakan pemeta untuk mereka:
Skop pelanggan -> kumpulan -> Pemeta -> Buat
Lebih Baik
nilai
Nama
groups
Jenis Pemeta
Group membership
Nama Tuntutan Token
groups
Kini kami perlu mendayakan pemetaan kumpulan dalam skop pelanggan kami:
Pelanggan -> Kubernetes -> Skop pelanggan -> Skop Pelanggan Lalai
pilih kumpulan Π² Skop Pelanggan Tersedia, tekan Tambah yang dipilih
Sekarang mari kita sediakan pengesahan aplikasi kita, pergi ke:
Pelanggan -> Kubernetes
Lebih Baik
nilai
Keizinan Didayakan
ON
Jom tolak menyelamatkan dan ini melengkapkan persediaan pelanggan, kini pada tab
Pelanggan -> Kubernetes -> Bukti kelayakan
anda boleh dapatkan Rahsia yang akan kami gunakan nanti.
Mengkonfigurasi Kubernetes
Menyediakan Kubernetes untuk kebenaran OIDC agak remeh dan bukan sesuatu yang sangat rumit. Apa yang anda perlu lakukan ialah meletakkan sijil CA pelayan OIDC anda /etc/kubernetes/pki/oidc-ca.pem
dan tambahkan pilihan yang diperlukan untuk kube-apiserver.
Untuk melakukan ini, kemas kini /etc/kubernetes/manifests/kube-apiserver.yaml
pada semua tuanmu:
...
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 kemas kini konfigurasi kubeadm dalam kluster supaya tidak kehilangan tetapan ini semasa kemas kini:
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 melengkapkan persediaan Kubernetes. Anda boleh mengulangi langkah ini merentas semua kluster Kubernetes anda.
Keizinan Awal
Selepas langkah ini, anda akan mempunyai gugusan Kubernetes dengan keizinan OIDC dikonfigurasikan. Satu-satunya perkara ialah pengguna anda belum mempunyai pelanggan yang dikonfigurasikan, serta kubeconfig mereka sendiri. Untuk menyelesaikan masalah ini, anda perlu mengkonfigurasi pengeluaran automatik kubeconfig kepada pengguna selepas kebenaran berjaya.
Untuk melakukan ini, anda boleh menggunakan aplikasi web khas yang membolehkan anda mengesahkan pengguna dan kemudian memuat turun kubeconfig yang telah siap. Salah satu yang paling mudah ialah
Untuk mengkonfigurasi Kuberos, cukup untuk menerangkan templat untuk kubeconfig dan menjalankannya dengan parameter berikut:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Untuk butiran lanjut lihat
Ia juga boleh digunakan
Kubeconfig yang terhasil boleh disemak di tapak users[].user.auth-provider.config.id-token
daripada kubeconfig anda kepada borang di tapak dan dapatkan transkrip dengan segera.
Persediaan RBAC
Apabila mengkonfigurasi RBAC, anda boleh merujuk kepada kedua-dua nama pengguna (medan name
dalam token jwt) dan untuk sekumpulan pengguna (field groups
dalam token jwt). Berikut ialah contoh menetapkan kebenaran untuk kumpulan kubernetes-default-namespace-admins
:
kubernetes-default-namespace-admins.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 boleh didapati dalam
Menetapkan proksi pengesahan
Terdapat projek yang indah
papan pemuka-proksi.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
Sumber: www.habr.com