Tutorial cilik babagan carane nggunakake Keycloak kanggo nyambungake Kubernetes menyang server LDAP lan nyetel impor pangguna lan grup. Iki bakal ngidini sampeyan nyiyapake RBAC kanggo pangguna lan nggunakake auth-proxy kanggo nglindhungi Dashboard Kubernetes lan aplikasi liyane sing ora ngerti carane menehi wewenang.
Instalasi Keycloak
Ayo nganggep sampeyan wis duwe server LDAP. Bisa uga Active Directory, FreeIPA, OpenLDAP utawa apa wae. Yen sampeyan ora duwe server LDAP, mula sampeyan bisa nggawe pangguna langsung ing antarmuka Keycloak, utawa nggunakake panyedhiya oidc umum (Google, Github, Gitlab), asile bakal meh padha.
Kaping pisanan, ayo nginstal Keycloak dhewe, instalasi bisa ditindakake kanthi kapisah, utawa langsung menyang kluster Kubernetes, minangka aturan, yen sampeyan duwe sawetara klompok Kubernetes, bakal luwih gampang nginstal kanthi kapisah. Ing tangan liyane, sampeyan bisa tansah nggunakake
Kanggo nyimpen data Keycloak, sampeyan butuh database. Default punika h2
(kabeh data disimpen sacara lokal), nanging uga bisa digunakake postgres
, mysql
utawa mariadb
.
Yen sampeyan isih arep nginstal Keycloak kanthi kapisah, sampeyan bisa nemokake instruksi sing luwih rinci ing
Setelan Federasi
Kaping pisanan, ayo nggawe alam anyar. Realm minangka ruang aplikasi kita. Saben aplikasi bisa duwe wilayah dhewe kanthi pangguna lan setelan wewenang sing beda. Alam master digunakake dening Keycloak dhewe lan nggunakake kanggo tindakan liya salah.
Tekan Tambah ranah
pilihan
Value
jeneng
kubernetes
Tampilan Jeneng
Kubernetes
Jeneng Tampilan HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kanthi gawan mriksa manawa email pangguna wis dikonfirmasi utawa ora. Amarga kita nggunakake server LDAP dhewe, priksa iki meh mesthi bali false
. Ayo mateni perwakilan setelan iki ing Kubernetes:
Ruang lingkup klien -> email -> Mappers -> email diverifikasi (Busak)
Saiki ayo nyiyapake federasi, kanggo iki:
Federasi pangguna -> Tambah panyedhiya⦠-> ldap
Iki conto persiyapan kanggo FreeIPA:
pilihan
Value
Jeneng Tampilan Konsol
freeipa.example.org
Vendor
Red Hat Directory Server
Atribut UUID LDAP
ipauniqueid
URL sambungan
ldaps://freeipa.example.org
Panganggo DN
cn=users,cn=accounts,dc=example,dc=org
Ikatan DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Ikatan Kredensial
<password>
Allow Kerberos otentikasi:
on
Alam Kerberos:
EXAMPLE.ORG
Server Utama:
HTTP/[email protected]
tab kunci:
/etc/krb5.keytab
Pangguna keycloak-svc
kudu digawe luwih dhisik ing server LDAP kita.
Ing kasus Active Directory, cukup pilih Vendor: Active Directory lan setelan sing dibutuhake bakal dilebokake ing formulir kanthi otomatis.
Tekan Simpen
Saiki ayo nerusake:
Federasi pangguna -> freeipa.example.org -> Mappers -> Jeneng ngarep
pilihan
Value
atribut Ldap
givenName
Saiki aktifake pemetaan klompok:
Federasi pangguna -> freeipa.example.org -> Mappers -> nggawe
pilihan
Value
jeneng
groups
Tipe Mapper
group-ldap-mapper
Grup LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Strategi Njupuk Grup Panganggo
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Saiki yen persiyapan federasi wis rampung, ayo pindhah menyang nyetel klien.
Setelan klien
Ayo nggawe klien anyar (aplikasi sing bakal nampa pangguna saka Keycloak). Ayo lunga:
pelanggan -> nggawe
pilihan
Value
ID pelanggan
kubernetes
Jinis Akses
confidenrial
URL ROOT
http://kubernetes.example.org/
URI Pangalihan sing Sah
http://kubernetes.example.org/*
URL Admin
http://kubernetes.example.org/
Kita uga bakal nggawe ruang lingkup kanggo klompok:
Ruang lingkup klien -> nggawe
pilihan
Value
cithakan
No template
jeneng
groups
Path grup lengkap
false
Lan atur peta kanggo wong-wong mau:
Ruang lingkup klien -> kelompok -> Mappers -> nggawe
pilihan
Value
jeneng
groups
Tipe Mapper
Group membership
Jeneng Klaim Token
groups
Saiki kita kudu ngaktifake pemetaan klompok ing ruang lingkup klien:
pelanggan -> Kubernetes -> Ruang lingkup klien -> Cakupan Klien Default
Pilih kelompok Π² Cakupan Klien sing kasedhiyaklik Tambah sing dipilih
Saiki ayo nyiyapake otentikasi aplikasi kita, pindhah menyang:
pelanggan -> Kubernetes
pilihan
Value
Wewenang Aktif
ON
Ayo push nyimpen lan iki ngrampungake persiyapan klien, saiki ing tab
pelanggan -> Kubernetes -> Kredensial
sampeyan bisa njaluk Secret kang bakal digunakake mengko.
Konfigurasi Kubernetes
Nyiyapake Kubernetes kanggo wewenang OIDC cukup sepele lan ora rumit banget. Sampeyan mung kudu nyelehake sertifikat CA saka server OIDC sampeyan /etc/kubernetes/pki/oidc-ca.pem
lan nambah opsi sing perlu kanggo kube-apiserver.
Kanggo nindakake iki, nganyari /etc/kubernetes/manifests/kube-apiserver.yaml
marang para bendaramu kabeh:
...
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
...
Lan uga nganyari konfigurasi kubeadm ing kluster supaya ora ilang setelan kasebut sajrone nganyari:
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
...
Iki ngrampungake persiyapan Kubernetes. Sampeyan bisa mbaleni langkah iki ing kabeh klompok Kubernetes.
Wewenang wiwitan
Sawise langkah-langkah kasebut, sampeyan bakal duwe klompok Kubernetes kanthi wewenang OIDC dikonfigurasi. Intine mung pangguna sampeyan durung duwe klien sing dikonfigurasi, uga kubeconfig dhewe. Kanggo ngatasi masalah iki, sampeyan kudu ngatur penerbitan otomatis kubeconfig kanggo pangguna sawise wewenang sukses.
Kanggo nindakake iki, sampeyan bisa nggunakake aplikasi web khusus sing ngidini sampeyan otentikasi pangguna banjur download kubeconfig sing wis rampung. Salah siji sing paling trep yaiku
Kanggo ngatur Kuberos, cukup kanggo njlèntrèhaké cithakan kanggo kubeconfig lan mbukak karo paramèter ing ngisor iki:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Kanggo informasi luwih rinci ndeleng
Sampeyan uga bisa digunakake
Kubeconfig asil bisa dicenthang ing situs users[].user.auth-provider.config.id-token
saka kubeconfig menyang formulir ing situs lan entuk transkrip langsung.
Setelan RBAC
Nalika ngatur RBAC, sampeyan bisa ngrujuk menyang jeneng panganggo (field name
ing token jwt) lan kanggo klompok pangguna (field groups
ing token jwt). Iki minangka conto nyetel ijin kanggo grup 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
Conto liyane kanggo RBAC bisa ditemokake ing
Nyetel otentik-proksi
Ana proyek apik banget
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
Source: www.habr.com