Artikel ini ditulis untuk memperluas yang sudah ada , tetapi berbicara tentang fitur bundel dengan Microsoft ActiveDirectory, serta melengkapinya.Pada artikel ini saya akan memberi tahu Anda cara menginstal dan mengkonfigurasi:- Keycloak adalah proyek sumber terbuka. Yang menyediakan titik masuk tunggal untuk aplikasi. Ia bekerja dengan banyak protokol, termasuk LDAP dan OpenID yang menarik minat kami.
- Gatekeeper Keycloak - aplikasi proxy terbalik yang memungkinkan Anda untuk mengintegrasikan otorisasi melalui Keycloak.
- Gangway - aplikasi yang menghasilkan konfigurasi untuk kubectl yang dengannya Anda dapat login dan terhubung ke API Kubernetes via OpenID
Bagaimana hak bekerja di Kubernetes.
Kita dapat mengelola hak pengguna / grup menggunakan RBAC, banyak artikel telah dibuat tentang ini, saya tidak akan membahas ini secara rinci. Masalahnya adalah Anda bisa menggunakan RBAC untuk membatasi hak pengguna, tetapi Kubernetes tidak tahu apa-apa tentang pengguna. Ternyata Anda membutuhkan mekanisme pengiriman pengguna di Kubernetes. Untuk melakukan ini, kami akan menambahkan penyedia OpenID ke Kuberntes, yang akan mengatakan bahwa pengguna seperti itu benar-benar ada, dan Kubernetes sendiri akan memberikan hak kepadanya.Latihan- Anda membutuhkan cluster Kubernetes atau minikube
- Direktori Aktif
- Domain:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Sertifikat untuk domain atau sertifikat yang ditandatangani sendiri
Saya tidak akan membahas cara membuat sertifikat yang ditandatangani sendiri, Anda harus membuat 2 sertifikat, ini adalah root (Certificate Authority) dan wildcard client untuk domain * .example.orgSetelah Anda menerima / menulis sertifikat, klien harus ditambahkan ke Kubernetes, untuk ini buat rahasia untuk itu:kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Selanjutnya kita akan menggunakannya untuk pengontrol Ingress kitaInstal Keycloak
Saya memutuskan bahwa cara termudah untuk menggunakan solusi siap pakai untuk ini, yaitu helm chart-s.Instal repositori dan perbarui:helm repo add codecentric https://codecentric.imtqy.com/helm-charts
helm repo update
Buat file keycloak.yml dengan konten berikut:keycloak.ymlkeycloak:
#
username: "test_admin"
#
password: "admin"
# Keycloak web .
, .
extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled"
# ingress, secrets
ingress:
enabled: true
path: /
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/affinity: cookie
hosts:
- keycloak.example.org
tls:
- hosts:
- keycloak.example.org
secretName: tls-keycloak
# Keycloak , Postgresql Kuberntes, !
persistence:
deployPostgres: true
dbVendor: postgres
postgresql:
postgresUser: keycloak
postgresPassword: ""
postgresDatabase: keycloak
persistence:
enabled: true
Pengaturan Federasi
Selanjutnya, buka antarmuka web keycloak.example.orgDi sudut kiri, klik Tambahkan ranahKami mematikan verifikasi konfirmasi email pengguna: Ruanglingkup klien -> Email -> Pemetaan -> Email diverifikasi (Hapus) Kamimengkonfigurasi federasi untuk mengimpor pengguna dari ActiveDirectory, saya akan meninggalkan tangkapan layar di bawah, saya pikir itu akan menjadi lebih jelas.Federasi pengguna -> Tambahkan penyedia ... -> ldapJika semuanya baik-baik saja, maka setelah mengklik tombol Sinkronkan semua pengguna , Anda akan menerima pesan tentang keberhasilan impor pengguna.Selanjutnya, kita perlu memetakan grup kamiFederasi pengguna -> ldap_localhost -> Pemetaan -> BuatPengaturan klien
Diperlukan untuk membuat klien, dalam hal Keycloak adalah aplikasi yang akan diotorisasi olehnya. Saya akan menyoroti poin-poin penting dalam tangkapan layar berwarna merah.Klien -> BuatBuat pembesar untuk grup:Lingkup Klien -> BuatDan konfigurasikan mapper untuk mereka:Lingkup Klien -> grup -> Pemetaan -> BuatTambahkan pemetaan grup kami ke Cakupan Klien Default:Klien -> kubernetes -> Cakupan Klien -> Cakupan Klien DefaultPilih grup dalam Cakupan Klien Yang Tersedia , klik Tambahkan yang dipilih.Kami mendapatkan rahasia (dan menulisnya di utas) yang akan kami gunakan untuk otorisasi di Keycloak:Klien -> kubernetes -> Kredensial -> RahasiaIni adalah akhir dari pengaturan, tetapi saya mendapatkan kesalahan ketika setelah otorisasi yang berhasil saya mendapat kesalahan 403. Laporan bug .Perbaiki:Cakupan Klien -> peran -> Pemetaan -> BuatKode skrip
token.addAudience(token.getIssuedFor());
token.getIssuer();
Konfigurasikan Kubernet
Kami perlu menunjukkan di mana sertifikat root kami dari situs berada, dan di mana penyedia OIDC berada.Untuk melakukan ini, edit file /etc/kubernetes/manifests/kube-apiserver.yamlkube-apiserver.yaml
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
Perbarui kubeadm config di cluster:konfigurasi kubeadmkubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
Konfigurasikan auth-proxy
Anda dapat menggunakan gatekeeper keycloak untuk melindungi aplikasi web Anda. Selain fakta bahwa proksi terbalik ini akan mengotorisasi pengguna sebelum menampilkan halaman, sehingga proksi juga akan mengirimkan informasi tentang Anda di header ke aplikasi terakhir. Dengan demikian, jika aplikasi Anda mendukung OpenID, maka pengguna segera masuk. Mari kita lihat contoh Dashboard KubernetesInstal Kubernetes Dashboard
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
values_dashboard.yamlenableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Pengaturan izin:
Buat ClusterRoleBinding yang akan memberikan hak admin cluster (standar ClusterRole cluster-admin) untuk pengguna di grup DataOPS.
kubectl apply -f rbac.yaml
rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dataops_group
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: DataOPS
Instal keycloak gatekeeper:
helm repo add gabibbo97 https://gabibbo97.imtqy.com/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml
values_proxy.yaml
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
path: /
hosts:
- kubernetes-dashboard.example.org
tls:
- secretName: tls-keycloak
hosts:
- kubernetes-dashboard.example.org
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
ClientID: "kubernetes"
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
skipOpenidProviderTlsVerify: true
rules:
- "uri=/*|groups=DataOPS"
Setelah itu, ketika Anda mencoba membuka kubernetes-dashboard.example.org , Anda akan dialihkan ke Keycloak dan, jika otorisasi berhasil, kami sudah akan masuk ke Dashboard.Instalasi gangway
Untuk kenyamanan, Anda dapat menambahkan gangway yang akan menghasilkan file config untuk kubectl, yang dengannya kita sudah akan masuk ke Kubernetes di bawah pengguna kami.
helm install --name gangway stable/gangway -f values_gangway.yaml
values_gangway.yaml
gangway:
clusterName: "my-k8s"
authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
clientID: "kubernetes"
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
usernameClaim: "sub"
apiServerURL: "https://192.168.99.111:8443"
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
path: /
hosts:
- gangway.example.org
tls:
- secretName: tls-keycloak
hosts:
- gangway.example.org
trustedCACert: |-
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
-----END CERTIFICATE-----
Itu terlihat seperti ini. Memungkinkan Anda untuk segera mengunduh file konfigurasi dan membuatnya menggunakan seperangkat perintah: