Tutorial qasir dwar kif tista' tuża Keycloak biex tikkonnettja Kubernetes mas-server LDAP tiegħek u tikkonfigura l-importazzjoni ta' utenti u gruppi. Dan jippermettilek tikkonfigura RBAC għall-utenti tiegħek u tuża auth-proxy biex tipproteġi Kubernetes Dashboard u applikazzjonijiet oħra li ma jistgħux jawtentikaw lilhom infushom.
Installazzjoni Keycloak
Ejja nassumu li diġà għandek server LDAP. Dan jista 'jkun Active Directory, FreeIPA, OpenLDAP jew xi ħaġa oħra. Jekk ma jkollokx server LDAP, allura fil-prinċipju tista 'toħloq utenti direttament fl-interface Keycloak, jew tuża fornituri pubbliċi tal-oidc (Google, Github, Gitlab), ir-riżultat ikun kważi l-istess.
L-ewwelnett, ejja ninstallaw Keycloak innifsu.L-installazzjoni tista 'titwettaq separatament jew direttament fi cluster Kubernetes.Bħala regola, jekk għandek diversi clusters Kubernetes, ikun aktar faċli li tinstallah separatament. Min-naħa l-oħra dejjem tista 'tuża
Biex taħżen id-data Keycloak ser ikollok bżonn database. Default huwa h2
(id-dejta kollha hija maħżuna lokalment), iżda huwa wkoll possibbli li tintuża postgres
, mysql
jew mariadb
.
Jekk xorta tiddeċiedi li tinstalla Keycloak separatament, issib struzzjonijiet aktar dettaljati fi
Setup tal-Federazzjoni
L-ewwelnett, ejja noħolqu qasam ġdid. L-isfera hija l-ispazju tal-applikazzjoni tagħna. Kull applikazzjoni jista 'jkollha l-isfera tagħha stess b'utenti differenti u settings ta' awtorizzazzjoni. L-isfera Master tintuża minn Keycloak innifsu u huwa ħażin li tużah għal kull ħaġa oħra.
Imbotta Żid isfera
Għażla
valur
isem
kubernetes
wiri Isem
Kubernetes
Isem tal-Wiri HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes awtomatikament jiċċekkja jekk l-email tal-utent hijiex ikkonfermata jew le. Peress li aħna nużaw is-server LDAP tagħna stess, dan il-kontroll kważi dejjem jerġa' lura false
. Ejja tiddiżattiva r-rappreżentazzjoni ta' din l-għażla f'Kubernetes:
Ambiti tal-klijenti -> email -> Mappers -> Email verifikata (Ħassar)
Issa ejja nwaqqfu l-federazzjoni; biex tagħmel dan, mur fuq:
Federazzjoni tal-utenti -> Żid il-fornitur... -> LDAP
Hawn eżempju ta 'settings għal FreeIPA:
Għażla
valur
Isem tal-Wiri tal-Konsola
freeipa.example.org
Vendor
Red Hat Directory Server
Attribut UUID LDAP
ipauniqueid
URL tal-konnessjoni
ldaps://freeipa.example.org
Utenti DN
cn=users,cn=accounts,dc=example,dc=org
Rabta DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Irbit Kredenzjali
<password>
Ħalli l-awtentikazzjoni Kerberos:
on
L-Isfera ta' Kerberos:
EXAMPLE.ORG
Prinċipal tas-Server:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Utent keycloak-svc
jeħtieġ li jinħolqu minn qabel fuq is-server LDAP tagħna.
Fil-każ ta 'Active Directory, għandek bżonn biss li tagħżel Bejjiegħa: Direttorju Attiv u s-settings meħtieġa jiddaħħlu fil-formola awtomatikament.
Imbotta Ħlief
Issa ejja nkomplu:
Federazzjoni tal-utenti -> freeipa.example.org -> Mappers -> Isem
Għażla
valur
Attribut Ldap
givenName
Issa ejja nippermettu l-immappjar tal-grupp:
Federazzjoni tal-utenti -> freeipa.example.org -> Mappers -> Oħloq
Għażla
valur
isem
groups
Tip mapper
group-ldap-mapper
Gruppi LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Gruppi ta 'Utenti Irkupra Strateġija
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Issa li s-setup tal-federazzjoni hija kompluta, ejja ngħaddu għat-twaqqif tal-klijent.
Setup tal-klijent
Ejja noħolqu klijent ġdid (applikazzjoni li se tirċievi utenti minn Keycloak). Ejja nkomplu:
Klijenti -> Oħloq
Għażla
valur
ID tal-Klijent
kubernetes
Tip ta 'Aċċess
confidenrial
URL tal-Għerq
http://kubernetes.example.org/
URIs validi ta' indirizz mill-ġdid
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Ejja noħolqu wkoll ambitu għal gruppi:
Ambiti tal-Klijent -> Oħloq
Għażla
valur
Template
No template
isem
groups
Mogħdija tal-grupp sħiħ
false
U waqqaf mapper għalihom:
Ambiti tal-Klijent -> gruppi -> Mappers -> Oħloq
Għażla
valur
isem
groups
Tip ta' Mapper
Group membership
Isem talba tat-Token
groups
Issa rridu nippermettu l-grupp tal-mapping fl-ambitu tal-klijent tagħna:
Klijenti -> kubernetes -> Ambiti tal-Klijent -> Ambiti tal-Klijent Default
Agħżel gruppi в Ambiti tal-Klijent Disponibbli, agħfas Żid magħżula
Issa ejja kkonfiguraw l-awtentikazzjoni tal-applikazzjoni tagħna, mur:
Klijenti -> kubernetes
Għażla
valur
Awtorizzazzjoni Ippermettiet
ON
Ejja nagħfas jiffranka u b'dan tlestiet is-setup tal-klijent, issa fuq it-tab
Klijenti -> kubernetes -> kredenzjali
tista 'tikseb Sigriet li se nużaw aktar.
Konfigurazzjoni ta' Kubernetes
It-twaqqif ta' Kubernetes għall-awtorizzazzjoni OIDC huwa pjuttost trivjali u mhux ikkumplikat ħafna. Kull ma trid tagħmel hu li tpoġġi ċ-ċertifikat CA tas-server OIDC tiegħek /etc/kubernetes/pki/oidc-ca.pem
u żid l-għażliet meħtieġa għal kube-apiserver.
Biex tagħmel dan, aġġorna /etc/kubernetes/manifests/kube-apiserver.yaml
fuq il-kaptani kollha tiegħek:
...
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
...
Ukoll, aġġorna l-konfigurazzjoni kubeadm fil-cluster sabiex ma titlifx dawn is-settings meta taġġorna:
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
...
Dan itemm il-konfigurazzjoni ta' Kubernetes. Tista' tirrepeti dawn il-passi fil-clusters kollha tiegħek ta' Kubernetes.
Awtorizzazzjoni inizjali
Wara dawn il-passi, diġà jkollok cluster Kubernetes b'awtorizzazzjoni OIDC konfigurata. L-unika ħaġa hija li l-utenti tiegħek għad m'għandhomx klijent konfigurat jew il-kubeconfig tagħhom stess. Biex issolvi din il-problema, għandek bżonn tikkonfigura d-distribuzzjoni awtomatika ta 'kubeconfig lill-utenti wara awtorizzazzjoni b'suċċess.
Biex tagħmel dan, tista 'tuża applikazzjonijiet tal-web speċjali li jippermettulek jawtentika lill-utent u mbagħad tniżżel il-kubeconfig lest. Wieħed mill-aktar konvenjenti huwa
Biex tikkonfigura Kuberos, iddeskrivi biss il-mudell għal kubeconfig u mexxih bil-parametri li ġejjin:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Għal aktar informazzjoni dettaljata ara
Huwa wkoll possibbli li tuża
Il-kubeconfig li jirriżulta jista' jiġi ċċekkjat fuq il-websajt users[].user.auth-provider.config.id-token
mill-kubeconfig tiegħek għall-formola fuq il-websajt u immedjatament tirċievi traskrizzjoni.
Twaqqif ta' RBAC
Meta tikkonfigura RBAC, tista' tirreferi kemm għall-isem tal-utent (field name
fit-token jwt), u għal kull grupp ta' utenti (field groups
f'jwt token). Hawn eżempju ta' kif jiġu stabbiliti drittijiet għal grupp 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
Aktar eżempji għal RBAC jistgħu jinstabu fi
L-issettjar tal-prokura tal-awt
Hemm proġett mill-isbaħ
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
Sors: www.habr.com