
LĂŒhike juhend, kuidas kasutada Keycloak'i Kubernetes'e sidumiseks teie LDAP-serveriga ning seadistada kasutajate ja rĂŒhmade importimist. See vĂ”imaldab seadistada RBAC teie kasutajatele ning kasutada auth-proxy't, et kaitsta Kubernetes Dashboardi ja teisi rakendusi, mis ei suuda iseseisvalt autoriseerimist teostada.
Keycloak'i paigaldamine
Oletame, et teil on juba LDAP-server. See vÔib olla Active Directory, FreeIPA, OpenLDAP vÔi midagi muud. Kui teil ei ole LDAP-serverit, saate pÔhimÔtteliselt luua kasutajaid otse Keycloak'i liideses vÔi kasutada avalikke oidc-teenuse pakkujaid (Google, Github, Gitlab), tulemus on peaaegu sama.
Esmalt paigaldame Keycloak'i, paigaldamine vĂ”ib toimuda eraldi vĂ”i otse Kubernetes'e klastri sisse; tavaliselt kui teil on mitu Kubernetes'e klastri, oleks lihtsam paigaldada see eraldi. Teisest kĂŒljest vĂ”ite alati kasutada ja paigaldada selle otse oma klastrisse.
Keycloak'i andmete salvestamiseks vajate andmebaasi. Vaikimisi kasutatakse h2 (kÔik andmed salvestatakse kohapeal), kuid samuti on vÔimalik kasutada postgres, mysql vÔi mariadb.
Kui te siiski otsustate installida Keycloak eraldi, leiate pÔhjalikumad juhised .
Föderatsiooni seadistamine
Esimese asjana loome uue realm'i. Realm on meie rakenduse ruum. Igal rakendusel vÔib olla oma realm, millel on erinevad kasutajad ja autoriseerimise seaded. Master realm'i kasutab Keycloak ise ja selle kasutamine millegi muu jaoks pole sobiv.
Vajutame Lisa realm
Valik
VÀÀrtus
Nimi
kubernetes
Kuva nimi
Kubernetes
HTML kuvana nimi
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kontrollib, kas kasutaja email on kinnitatud. Kuna kasutame oma LDAP-serverit, siis tagastab see kontroll tavaliselt false. LĂŒlitame selle parameetri Kubernetes'is kuvamise vĂ€lja:
Kliendi ulatused â> Email â> Mapperid â> Email kinnitatud (Kustuta)
NĂŒĂŒd seadistame föderatsiooni, selleks liigume jĂ€rgmisse kohta:
Kasutaja föderatsioon â> Lisa pakkuja⊠â> ldap
Toon nÀite FreeIPA seadistamisest:
Valik
VÀÀrtus
Konsoli kuvana nimi
freeipa.example.org
Tootja
Red Hat Directory Server
UUID LDAP atribuut
ipauniqueid
Ăhenduse URL
ldaps://freeipa.example.org
Kasutajate DN
cn=users,cn=accounts,dc=example,dc=org
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind Credential
<password>
Luba Kerberos autentimine:
on
Kerberos Realm:
EXAMPLE.ORG
Server Principal:
HTTP/freeipa.example.org@EXAMPLE.ORG
KeyTab:
/etc/krb5.keytab
Kasutaja keycloak-svc peab meie LDAP-serveris eelnevalt looma.
Active Directory puhul piisab lihtsalt valikust Tootja: Active Directory ja vajalikud seadistused sisestatakse vormi automaatselt.
Vajutame Salvesta
Liigume edasi:
Kasutaja föderatsioon â> freeipa.example.org â> Mapperid â> Eesnimi
Valik
VÀÀrtus
Ldap atribuut
givenName
NĂŒĂŒd aktiveerime grupi kaardistamise:
Kasutaja föderatsioon â> freeipa.example.org â> Mapperid â> Loo
Valik
VÀÀrtus
Nimi
groups
Mappi tĂŒĂŒp
group-ldap-mapper
LDAP grupid DN
cn=groups,cn=accounts,dc=example,dc=org
Kasutajagruppide hankimise strateegia
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Sellega on föderatsiooni seadistus lÔpetatud, liigutame kliendi seadistusse.
Kliendi seadistus
Loodame uue kliendi (rakenduse, mis saab kasutajaid Keycloakist). Liigume:
Kliendid â> Loo
Valik
VÀÀrtus
Kliendi ID
kubernetes
LigipÀÀsu tĂŒĂŒp
confidential
PÔhi URL
http://kubernetes.example.org/
Kehtivad ĂŒmbersuunamise URId
http://kubernetes.example.org/*
Admini URL
http://kubernetes.example.org/
Loodame ka grupiteenuse:
Kliendi ulatused â> Loo
Valik
VÀÀrtus
Mall
Malli ei ole
Nimi
groups
TĂ€ielik grupi tee
false
Ja seadistame kaardisti nende jaoks:
Kliendi ulatused â> groups â> Mapperid â> Loo
Valik
VÀÀrtus
Nimi
groups
Mappi tĂŒĂŒp
Grupi liikmelisus
Tokeni vÀite nimi
groups
NĂŒĂŒd peame rakendama grupi kaardistamise meie kliendi ulatuses:
Kliendid â> kubernetes â> Kliendi ulatused â> Vaikimisi kliendi ulatused
Valime groups ĂŒhes Saadaval kliendi ulatused, klikkige Lisa valitud
NĂŒĂŒd seadistame meie rakenduse autentimise, liigume:
Kliendid â> kubernetes
Valik
VÀÀrtus
Autoriseerimine lubatud
KAS
Kliki salvesta ja sellega on kliendi seadistus lĂ”petatud, nĂŒĂŒd vahekaardil
Kliendid â> kubernetes â> Krediidid
saate saada Saladus mida me hiljem kasutame.
Kubernetesi seadistamine
Kubernetes'i seadistus OIDC autoriseerimiseks on piisavalt triviaalne ja ei ole midagi keerulist. KÔik, mida vajate, on oma OIDC serveri CA-sertifikaadi paigutamine /etc/kubernetes/pki/oidc-ca.pem ja vajalikud valikud kube-apiserverile lisamine.
Selleks vÀrskendage /etc/kubernetes/manifests/kube-apiserver.yaml kÔigis teie klastrites:
...
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
...Ja uuendage ka kubeadm konfiguratsiooni klastris, et neid seadeid vÀrskenduse kÀigus mitte kaotada:
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
...Kubernetesi seadistamine on nĂŒĂŒd lĂ”petatud. VĂ”ite samu toiminguid korrata kĂ”igis teie Kubernetesi klastrites.
Algseltautentimine
PĂ€rast neid toiminguid on teil Kubernetesi klaster, millel on seadistatud OIDC-autentimine. Ainult ĂŒks asi on see, et teie kasutajatel pole veel seadistatud klienti ega oma kubeconfig'i. Selle probleemi lahendamiseks tuleb automaatselt anda kasutajatele kubeconfig pĂ€rast eduka autentimise.
Selleks vĂ”ib kasutada spetsiaalseid veebirakendusi, mis vĂ”imaldavad autentida kasutajat ja seejĂ€rel alla laadida valmis kubeconfig'i. Ăks mugavamaid on , see vĂ”imaldab ĂŒhes konfiguratsioonis kirjeldada kĂ”iki Kubernetes-klastreid ja lihtsalt nende vahel vahetada.
Kuberos'i seadistamiseks tuleb lihtsalt kirjeldada template'i kubeconfig'i jaoks ja kÀivitada jÀrgmiste parameetritega:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/templateRohkem ĂŒksikasjade saamiseks vaadake GitHubist.
Samuti on vÔimalik kasutada kui soovite autentimist teostada otse kasutaja arvutis. Sellisel juhul avaneb kasutajal brauseriaken, kus on sisselogimisvorm localhostil.
Saadud kubeconfig'i saab kontrollida veebisaidil . Lihtsalt kopeerige vÀÀrtus users[].user.auth-provider.config.id-token oma kubeconfig'ist vormi veebisaidil ja saate kohe dekrĂŒpteerimise.
RBAC-i seadistamine
RBAC-i seadistamisel on vÔimalik viidata nii kasutajanimele (vÀlja name jwt-tokenis), kui ka kasutajagruppidele (vÀlja groups jwt-tokenis). Siin on nÀidis Ôiguste seadistamiseks grupile 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-adminsRBACi rohkem nÀiteid leiate
auth-proxy seadistamine
On olemas suurepÀrane projekt , mis vÔimaldab kaitsta mis tahes rakendust, andes kasutajale vÔimaluse autentida end OIDC-serveris. NÀitan, kuidas seda seadistada Kubernetes Dashboardi nÀitel:
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: ClusterIPAllikas: habr.com
