
Një udhëzues i vogël se si mund të lidhni Kubernetes me serverin tuaj LDAP duke përdorur Keycloak dhe si të konfiguroni importimin e përdoruesve dhe grupeve. Kjo do t'ju lejojë të konfiguroni RBAC për përdoruesit tuaj dhe të përdorni auth-proxy për të mbrojtur Kubernetes Dashboard dhe aplikacione të tjera që nuk dinë të realizojnë autorizimin vetë.
Instalimi i Keycloak
Supozoni që keni një server LDAP. Ky mund të jetë Active Directory, FreeIPA, OpenLDAP apo diçka tjetër. Nëse nuk keni një server LDAP, në parim mund të krijoni përdorues direkt në ndërfaqen e Keycloak, ose të përdorni ofrues publik oidc (Google, Github, Gitlab), rezultati do të jetë pothuajse i njëjtë.
Së pari, do të instalojmë Keycloak-in, instalimi mund të kryhet ndaras ose menjëherë në klasterin Kubernetes. Në përgjithësi, nëse keni disa klasterë Kubernetes, do të ishte më e lehtë ta instaloni ndaras. Nga ana tjetër, gjithmonë mund të përdorni dhe ta instaloni direkt në klasterin tuaj.
Për ruajtjen e të dhënave të Keycloak-it, do t'ju nevojitet një bazë të dhënash. Nga e drejta, përdoret h2 (të gjitha të dhënat ruhen lokal), por është e mundur të përdorni gjithashtu postgres, mysql ose mariadb.
Nëse vendosni të instaloni Keycloak ndaras, do të gjeni udhëzime më të detajuara në .
Konfigurimi i federatës
SĂ« pari, do tĂ« krijojmĂ« njĂ« realm tĂ« ri. Realm Ă«shtĂ« hapĂ«sira e aplikacionit tonĂ«. Ădo aplikacion mund tĂ« ketĂ« realm tĂ« vet me pĂ«rdorues dhe konfigurime tĂ« ndryshme tĂ« autorizimit. Realm-i Master pĂ«rdoret nga Keycloak vetĂ« dhe pĂ«rdorimi i tij pĂ«r diçka tjetĂ«r Ă«shtĂ« i gabuar.
Klikoni Shto realm
Opsioni
Vlera
Emri
kubernetes
Emri i Shfaqjes
Kubernetes
Emri i Shfaqjes HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes në parim kontrollon nëse përdoruesi ka verifikuar email-in e tij ose jo. Sepse po përdorim serverin tonë LDAP, kjo verifikim do të kthejë pothuajse gjithmonë false. Le të çaktivizojmë shfaqjen e këtij parametri në Kubernetes:
PĂ«rmasat e klientĂ«ve â> Email â> Mappers â> Email i verifikuar (Fshij)
Tani do të konfiguroni federatën, për këtë do të kalojmë në:
Federata e pĂ«rdoruesve â> Shto ofrues⊠â> ldap
Ja një shembull konfigurimi për FreeIPA:
Opsioni
Vlera
Emri i Shfaqjes në Konsolë
freeipa.example.org
Prodhuesi
Red Hat Directory Server
Atributi UUID LDAP
ipauniqueid
URL i lidhjes
ldaps://freeipa.example.org
DN-të e përdoruesve
cn=users,cn=accounts,dc=example,dc=org
DN i lidhjes
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Kredenciali i lidhjes
<password>
Lejo autentifikimin Kerberos:
në
Rrethi Kerberos:
EXAMPLE.ORG
Princi i Serverit:
HTTP/freeipa.example.org@EXAMPLE.ORG
KeyTab:
/etc/krb5.keytab
Përdoruesi keycloak-svc duhet krijuar paraprakisht në serverin tonë LDAP.
Në rastin e Active Directory, mjafton të zgjidhni Ofruesi: Active Directory dhe cilat cilësime do të plotësohen automatikisht në formë.
Klikoni Ruaj
Tani le të kalojmë te:
Federata e pĂ«rdoruesve â> freeipa.example.org â> Mappers â> Emri
Opsioni
Vlera
Atributi Ldap
emri i dhënë
Tani do të aktivizojmë mapping-un e grupeve:
Federata e pĂ«rdoruesve â> freeipa.example.org â> Mappers â> Krijo
Opsioni
Vlera
Emri
grupet
Tipi i Mapper-it
mapper-grup-ldap
LDAP Groups DN
cn=grupet,cn=llogaritë,dc=example,dc=org
Strategjia e Marrjes së Grupeve të Përdoruesve
MERR_GRUPET_NGA_USER_MEMBEROF_ATTRIBUTE
Me këtë përfundon konfigurimi i federatës, le të kalojmë te konfigurimi i klientit.
Konfigurimi i klientit
Do të krijojmë një klient të ri (aplikacioni që do të marrë përdoruesit nga Keycloak). Kalojmë te:
KlientĂ«t â> Krijo
Opsioni
Vlera
ID e Klientit
kubernetes
Tipi i Qasjes
konfidencial
URL e Rrënjës
http://kubernetes.example.org/
URI-të e Miratuara të Shkarkimit
http://kubernetes.example.org/*
URL e Administratorit
http://kubernetes.example.org/
Po ashtu do të krijojmë një scope për grupet:
Shkala e Klientit â> Krijo
Opsioni
Vlera
Shablloni
Asnjë shabllon
Emri
grupet
Rruga e plotë e grupit
false
Dhe do të konfiguroni mapper-in për to:
Shkala e Klientit â> grupet â> Mappers â> Krijo
Opsioni
Vlera
Emri
grupet
Tipi i Mapper-it
Anëtarësia në Grup
Emri i Kërkesës për Token
grupet
Tani na nevojitet të aktivizojmë mapping-un e grupeve në shkallën tonë të klientit:
KlientĂ«t â> kubernetes â> Shkala e Klientit â> ShkallĂ«t e Klientit tĂ« Paracaktuara
Zgjidhni grupet në Shkallët e Klientit në Disponibël, klikojmë Shto të përzgjedhurat
Tani do të konfiguroni autentifikimin e aplikacionit tonë, kalojmë te:
KlientĂ«t â> kubernetes
Opsioni
Vlera
Autorizimi i Aktivizuar
PO
Shtypni ruaj dhe kështu përfundon konfigurimi i klientit, tani në skedën
KlientĂ«t â> kubernetes â> Kredencialet
do të jeni në gjendje të merrni Sekreti të cilin do ta përdorim më vonë.
Konfigurimi i Kubernetes
Konfigurimi i Kubernetes për autorizimin OIDC është mjaft i thjeshtë dhe nuk është diçka shumë e komplikuar. E gjithë çfarë ju nevojitet është të vendosni CA-në e sertifikatës së serverit tuaj OIDC në /etc/kubernetes/pki/oidc-ca.pem dhe të shtoni opsionet e nevojshme për kube-apiserver.
Për këtë, azhurnoni /etc/kubernetes/manifests/kube-apiserver.yaml në të gjithë masterat tuaj:
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=\/etc\/kubernetes\/pki\/oidc-ca.pem
- --oidc-client-id=kubernetes
- --oidc-groups-claim=grupet
- --oidc-issuer-url=https:\/\/keycloak.example.org\/auth\/realms\/kubernetes
- --oidc-username-claim=email
...Gjithashtu azhurnoni konfigurimin e kubeadm në klasër, për të mos humbur këto konfigurime gjatë azhurnimeve:
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: grupet
oidc-issuer-url: https:\/\/keycloak.example.org\/auth\/realms\/kubernetes
oidc-username-claim: email
...Me këtë përfundon konfigurimi i Kubernetes. Ju mund të përsërisni këto veprime në të gjithë klasterët tuaj Kubernetes.
Autorizimi Fillestar
Pas këtyre veprimeve do të keni një klasër Kubernetes me autorizim OIDC të konfiguruar. Një nga gjërat e vetme është se përdoruesit tuaj ende nuk kanë një klient të konfiguruar as një kubeconfig të vetin. Për të zgjidhur këtë problem, duhet të konfiguroni dhënien automatike të kubeconfig për përdoruesit pas autorizimit të suksesshëm.
Për këtë mund të përdoren aplikacione të veçanta web, që lejojnë autentifikimin e përdoruesit dhe më pas shkarkimin e kubeconfig të gatshëm. Një nga më të lehtat është , ai lejon në një konfigurim të përshkruhet të gjitha Kubernetes-krathet dhe të kaloni lehtësisht midis tyre.
Për të konfiguruar Kuberos mjafton të përshkruani një template për kubeconfig dhe të ekzekutoni me parametrat e mëposhtëm:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/templatePër informacion më të detajuar shihni në Github.
Gjithashtu është e mundur të përdorni nëse dëshironi të bëni autentifikimin direkt në kompjuterin e përdoruesit. Në këtë rast, përdoruesi do të hapë një shfletues me formën e autentifikimit në localhost.
Kubeconfig i marrë mund të kontrollohet në faqen . Thjesht kopjoni vlerën users[].user.auth-provider.config.id-token nga kubeconfig juaj në formën në faqe dhe menjëherë do të merrni dekodimin.
Konfigurimi i RBAC
Gjatë konfigurimit të RBAC mund të referoheni si në emrin e përdoruesit (në fushën emri në jwt-token), ashtu edhe në grupin e përdoruesve (në fushën grupet në jwt-token). Ja një shembull i konfigurimit të të drejtave për grupin 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-adminsMë shumë shembuj për RBAC mund të gjenden në
Konfigurimi i auth-proxy
Ka një projekt të shkëlqyer , i cili lejon të mbrohet çdo aplikacion, duke i dhënë përdoruesit mundësinë të autentifikohet në OIDC-server. Do të tregoj se si mund ta konfiguroj atë duke përdorur shembullin e Kubernetes Dashboard:
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=
- --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: ClusterIPBurimi: habr.com
