Dersek kurt li ser ka hûn çawa dikarin Keycloak-ê bikar bînin da ku Kubernetes bi servera xweya LDAP-ê ve girêdin û îtxalkirina bikarhêner û koman mîheng bikin. Ev ê dihêle hûn ji bo bikarhênerên xwe RBAC-ê mîheng bikin û auth-proxy bikar bînin da ku Kubernetes Dashboard û serîlêdanên din ên ku nikaribin xwe rast bikin biparêzin.
Sazkirina Keycloak
Ka em bifikirin ku we jixwe serverek LDAP heye. Ev dibe ku Active Directory, FreeIPA, OpenLDAP an tiştek din be. Ger we serverek LDAP tune be, wê hingê di prensîbê de hûn dikarin rasterast di navgîniya Keycloak de bikarhêneran biafirînin, an pêşkêşkerên oidc yên gelemperî (Google, Github, Gitlab) bikar bînin, encam dê hema hema heman be.
Berî her tiştî, werin em Keycloak bixwe saz bikin. Sazkirin dikare ji hev cuda an rasterast di nav komek Kubernetes de were kirin. Wekî qaîdeyek, heke we çend komên Kubernetes hebin, sazkirina wê ji hev cûda hêsantir dibe. Ji hêla din ve hûn dikarin her gav bikar bînin
Ji bo hilanîna daneyên Keycloak hûn ê hewceyê databasek bin. Default e h2
(hemû daneyên herêmî têne hilanîn), lê karanîna wê jî gengaz e postgres
, mysql
an mariadb
.
Ger hûn hîn jî biryar bidin ku Keycloak ji hev cuda saz bikin, hûn ê rêwerzên berfirehtir tê de bibînin
Sazkirina Federasyonê
Berî her tiştî, bila em qadek nû ava bikin. Realm cîhê serlêdana me ye. Her serîlêdan dikare bi bikarhênerên cûda û mîhengên destûrnameyê re warê xwe hebe. Qada Master ji hêla Keycloak bixwe ve tê bikar anîn û karanîna wê ji bo tiştek din xelet e.
Push Herêmê zêde bikin
Dibe
Giranî
Nav
kubernetes
Navekî Display
Kubernetes
Navê Nîşana HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes ji hêla xwerû ve kontrol dike ka e-nameya bikarhêner hatî pejirandin an na. Ji ber ku em servera xweya LDAP bikar tînin, ev kontrol dê hema hema her gav vegere false
. Ka em nûnertiya vê vebijarkê li Kubernetes neçalak bikin:
Qadên xerîdar -> Email -> Mappers -> E-name hate piştrast kirin (Jêbibe)
Naha em federasyonê saz bikin; ji bo vê yekê, biçin:
Federasyona bikarhêner -> Pêşkêşker zêde bike… -> ldap
Li vir mînakek mîhengên ji bo FreeIPA heye:
Dibe
Giranî
Navê Nîşandana Konsolê
freeipa.example.org
Firotkar
Red Hat Directory Server
Taybetmendiya UUID LDAP
ipauniqueid
URL-ya girêdanê
ldaps://freeipa.example.org
Bikarhêner DN
cn=users,cn=accounts,dc=example,dc=org
DN girêdin
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind Credential
<password>
Destûrê bide pejirandina Kerberos:
on
Kerberos Realm:
EXAMPLE.ORG
Serekê Server:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Bikaranîvan keycloak-svc
pêdivî ye ku pêşî li ser servera meya LDAP were afirandin.
Di doza Active Directory de, hûn tenê hewce ne ku hilbijêrin Firoşkar: Active Directory û mîhengên pêwîst dê bixweber di formê de werin nivîsandin.
Push Tomar bike
Naha em herin pêş:
Federasyona bikarhêner -> freeipa.example.org -> Mappers -> Nav
Dibe
Giranî
Taybetmendiya ldap
givenName
Naha werin em nexşeya komê çalak bikin:
Federasyona bikarhêner -> freeipa.example.org -> Mappers -> Xûliqandin
Dibe
Giranî
Nav
groups
Cureyê Nexşeyê
group-ldap-mapper
Komên LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Komên Bikarhêner Stratejiya Vedigere
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Naha ku sazkirina federasyonê qediya, bila em biçin sazkirina xerîdar.
Sazkirina xerîdar
Ka em xerîdarek nû biafirînin (serlêdanek ku dê bikarhêneran ji Keycloak werbigire). Ka em pê de biçin:
Clients -> Xûliqandin
Dibe
Giranî
Nasnameya kiriyar
kubernetes
Type Access
confidenrial
URL root
http://kubernetes.example.org/
URI-yên Beralîkirina Derbasdar
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Werin em ji bo koman jî çarçoveyek çêbikin:
Qadên Xerîdar -> Xûliqandin
Dibe
Giranî
Şablon
No template
Nav
groups
Rêya koma tevahî
false
Û ji wan re nexşeyek saz bikin:
Qadên Xerîdar -> komên -> Mappers -> Xûliqandin
Dibe
Giranî
Nav
groups
Tîpa Nexşeyê
Group membership
Navê Daxwaza Token
groups
Naha divê em di çarçoveya xerîdar de koma nexşeyê çalak bikin:
Clients -> Kubernetes -> Qadên Xerîdar -> Qadên xerîdar ên xwerû
Em hilbijêre komên в Qadên Xerîdar ên Berdest, çap bikin Hilbijartî zêde bike
Naha em werin verastkirina serîlêdana xwe mîheng bikin, biçin:
Clients -> Kubernetes
Dibe
Giranî
Destûrkirin Çalak e
ON
Werin em çap bikin xilas bike û bi vê yekê sazkirina xerîdar qediya, naha li ser tabê
Clients -> Kubernetes -> şehadan
hûn dikarin bistînin Dizî ku em ê bêtir bikar bînin.
Veavakirina Kubernetes
Sazkirina Kubernetes ji bo destûrnameya OIDC pir piçûk e û ne pir tevlihev e. Ya ku hûn hewce ne bikin ev e ku sertîfîkaya CA ya servera OIDC-ya xwe têxin hundur /etc/kubernetes/pki/oidc-ca.pem
û vebijarkên pêwîst ji bo kube-apiserver zêde bikin.
Ji bo vê yekê, nûve bikin /etc/kubernetes/manifests/kube-apiserver.yaml
li ser hemû axayên xwe:
...
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
...
Di heman demê de, veavakirina kubeadm-ê di komê de nûve bikin da ku dema nûvekirinê van mîhengan winda nekin:
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
...
Ev sazkirina Kubernetes temam dike. Hûn dikarin van gavan li hemî komên xwe yên Kubernetes dubare bikin.
Destûrnameya destpêkê
Piştî van gavan, hûn ê jixwe komek Kubernetes bi destûrnameya OIDC-ya mîhengkirî hebe. Tiştek tenê ev e ku bikarhênerên we hîn ne xwediyê xerîdarek mîhengkirî an kubeconfiga xwe ne. Ji bo çareserkirina vê pirsgirêkê, hûn hewce ne ku piştî destûrnameya serketî dabeşkirina otomatîkî ya kubeconfig li bikarhêneran mîheng bikin.
Ji bo vê yekê, hûn dikarin serîlêdanên webê yên taybetî bikar bînin ku destûrê didin we ku hûn bikarhêner rast bikin û dûv re kubeconfig-a amade dakêşin. Yek ji herî hêsan e
Ji bo mîhengkirina Kuberos, tenê şablonê ji bo kubeconfig vebêjin û wê bi pîvanên jêrîn bimeşînin:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Ji bo agahdariya berfirehtir binêre
Ew jî gengaz e ku bikar bînin
Encama kubeconfig dikare li ser malperê were kontrol kirin users[].user.auth-provider.config.id-token
ji kubeconfiga xwe bigire heya forma li ser malperê û tavilê transkriptek werbigire.
Sazkirina RBAC
Dema ku hûn RBAC-ê mîheng dikin, hûn dikarin her du navê bikarhêner (qad name
di nîşana jwt de), û her komek bikarhêner (qad groups
bi nîşana jwt). Li vir mînakek sazkirina mafên ji bo komekê ye 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
Nimûneyên bêtir ji bo RBAC dikarin di nav de bêne dîtin
Sazkirina auth-proxy
Projeyek ecêb heye
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