Tutorial pondok ngeunaan kumaha anjeun tiasa nganggo Keycloak pikeun nyambungkeun Kubernetes ka server LDAP anjeun sareng ngonpigurasikeun impor pangguna sareng grup. Ieu bakal ngidinan Anjeun pikeun ngonpigurasikeun RBAC pikeun pamaké anjeun sarta ngagunakeun auth-proxy pikeun ngajaga Kubernetes Dashboard jeung aplikasi sejenna nu teu bisa auténtikasi sorangan.
Pamasangan Keycloak
Anggap anjeun geus boga server LDAP. Ieu tiasa Active Directory, FreeIPA, OpenLDAP atanapi naon waé. Upami anjeun teu ngagaduhan server LDAP, teras prinsipna anjeun tiasa nyiptakeun pangguna langsung dina antarmuka Keycloak, atanapi nganggo panyadia oidc umum (Google, Github, Gitlab), hasilna bakal ampir sami.
Anu mimiti, hayu urang masang Keycloak sorangan. Pamasanganna tiasa dilakukeun nyalira atanapi langsung kana klaster Kubernetes. Sakumaha aturan, upami anjeun gaduh sababaraha klaster Kubernetes, bakal langkung gampil masangna nyalira. Di sisi séjén anjeun salawasna bisa make
Pikeun nyimpen data Keycloak anjeun peryogi database. Default nyaéta h2
(sadayana data disimpen sacara lokal), tapi oge mungkin ngagunakeun postgres
, mysql
atawa mariadb
.
Upami anjeun masih mutuskeun pikeun masang Keycloak nyalira, anjeun bakal mendakan petunjuk anu langkung rinci dina
Setélan Federation
Munggaran sadaya, hayu urang nyieun realm anyar. Realm mangrupikeun rohangan aplikasi urang. Unggal aplikasi tiasa gaduh alam sorangan sareng pangguna anu béda sareng setélan otorisasina. Alam Master dianggo ku Keycloak sorangan sareng salah ngagunakeun éta pikeun anu sanés.
Teken Tambahkeun karajaan
pilihan
ajen
nami
kubernetes
Nami tayang
Kubernetes
Ngaran Témbongkeun HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes sacara standar mariksa naha email pangguna dikonfirmasi atanapi henteu. Kusabab urang ngagunakeun server LDAP urang sorangan, cék ieu ampir sok balik false
. Hayu urang nonaktipkeun representasi pilihan ieu dina Kubernetes:
lingkup klien -> surélék -> Mappers -> Surélék diverifikasi (Mupus)
Ayeuna hayu urang nyetél federasi; pikeun ngalakukeun ieu, angkat ka:
federasi pamaké -> Tambahkeun panyadia… -> ldap
Ieu conto setelan kanggo FreeIPA:
pilihan
ajen
Ngaran Témbongkeun konsol
freeipa.example.org
jelema nu ngajual nguriling
Red Hat Directory Server
UUID LDAP atribut
ipauniqueid
URL sambungan
ldaps://freeipa.example.org
Pamaké DN
cn=users,cn=accounts,dc=example,dc=org
Ngiket DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Ngabeungkeut Kapercayaan
<password>
Ngidinan auténtikasi Kerberos:
on
Alam Kerberos:
EXAMPLE.ORG
Kepala Server:
HTTP/[email protected]
Tab konci:
/etc/krb5.keytab
Pamaké keycloak-svc
kudu dijieun sateuacanna dina server LDAP urang.
Dina kasus Active Directory, anjeun ngan ukur kedah milih Ngajual: Active Directory sareng setélan anu diperyogikeun bakal otomatis diasupkeun kana formulir.
Teken Simpen
Ayeuna hayu urang ngaléngkah:
federasi pamaké -> freeipa.example.org -> Mappers -> Nami payun
pilihan
ajen
atribut Ldap
givenName
Ayeuna hayu urang aktipkeun pemetaan grup:
federasi pamaké -> freeipa.example.org -> Mappers -> nyiptakeun
pilihan
ajen
nami
groups
Tipe Mapper
group-ldap-mapper
Grup LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Grup pamaké nimba Stratégi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Ayeuna yén setélan federasi parantos réngsé, hayu urang teraskeun kana nyetél klien.
Setélan klien
Hayu urang nyieun hiji klien anyar (hiji aplikasi nu bakal nampa pamaké ti Keycloak). Hayu urang ngaléngkah:
Klién -> nyiptakeun
pilihan
ajen
Klién KTP
kubernetes
Jenis aksés
confidenrial
URL Akar
http://kubernetes.example.org/
URI Alihan anu Sah
http://kubernetes.example.org/*
URL admin
http://kubernetes.example.org/
Hayu urang ogé nyieun wengkuan pikeun grup:
Lingkup klien -> nyiptakeun
pilihan
ajen
template
No template
nami
groups
Jalur grup pinuh
false
Sareng pasang mapper pikeun aranjeunna:
Lingkup klien -> grup -> Mappers -> nyiptakeun
pilihan
ajen
nami
groups
Tipe Mapper
Group membership
Ngaran Klaim Token
groups
Ayeuna urang kedah ngaktipkeun grup pemetaan dina lingkup klien kami:
Klién -> kubernetes -> Lingkup klien -> Lingkup Klién Default
Pilih grup в wengkuan klien sadiamalik Tambahkeun dipilih
Ayeuna hayu urang ngonpigurasikeun auténtikasi aplikasi urang, buka:
Klién -> kubernetes
pilihan
ajen
Otorisasina Diaktipkeun
ON
Hayu urang pencét nyalametkeun tur kalawan ieu setelan klien geus réngsé, ayeuna dina tab
Klién -> kubernetes -> surat kapercayaan keur utusan
anjeun bisa meunang rasiah nu urang bakal make salajengna.
Ngonpigurasikeun Kubernetes
Nyetél Kubernetes pikeun otorisasi OIDC cukup sepele sareng henteu rumit pisan. Sadaya anu anjeun kedah laksanakeun nyaéta nempatkeun sertipikat CA tina server OIDC anjeun /etc/kubernetes/pki/oidc-ca.pem
tur nambahkeun pilihan diperlukeun pikeun kube-apiserver.
Jang ngalampahkeun ieu, update /etc/kubernetes/manifests/kube-apiserver.yaml
dina sadaya master anjeun:
...
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
...
Ogé, ngapdet konfigurasi kubeadm dina kluster supados henteu kaleungitan setélan ieu nalika ngamutahirkeun:
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
...
Ieu ngalengkepan setelan Kubernetes. Anjeun tiasa ngulang léngkah-léngkah ieu dina sadaya klaster Kubernetes anjeun.
Otorisasi awal
Saatos léngkah-léngkah ieu, anjeun bakal ngagaduhan klaster Kubernetes sareng otorisasi OIDC anu dikonpigurasi. Hiji-hijina hal éta pamaké anjeun teu acan gaduh klien ngonpigurasi atanapi kubeconfig sorangan. Pikeun ngajawab masalah ieu, anjeun kudu ngonpigurasikeun distribusi otomatis kubeconfig ka pamaké sanggeus otorisasina suksés.
Jang ngalampahkeun ieu, anjeun tiasa nganggo aplikasi wéb khusus anu ngamungkinkeun anjeun pikeun ngabuktoskeun kaaslianana pangguna teras unduh kubeconfig anu siap-siap. Salah sahiji anu pang merenah nyaéta
Pikeun ngonpigurasikeun Kuberos, ngan ukur ngajelaskeun template kubeconfig sareng jalankeun ku parameter ieu:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Pikeun inpo nu leuwih wincik tingali
Ieu oge mungkin ngagunakeun
Kubeconfig hasilna bisa dipariksa dina website users[].user.auth-provider.config.id-token
ti kubeconfig anjeun ka formulir dina ramatloka jeung geura nampa transcript a.
Nyetél RBAC
Nalika ngonpigurasikeun RBAC, anjeun tiasa ngarujuk kana duanana nami pangguna (field name
dina token jwt), sareng per grup pangguna (field groups
dina token jwt). Ieu conto netepkeun hak pikeun 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 langkung seueur pikeun RBAC tiasa dipendakan dina
Nyetél auth-proxy
Aya hiji proyék éndah
dasbor-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
sumber: www.habr.com