
LĂŒhike juhend selle kohta, kuidas kasutada Keycloaki, et siduda Kubernetes teie LDAP-serveriga ja seadistada kasutajate ja rĂŒhmade importimist. See vĂ”imaldab konfigureerida RBAC teie kasutajate jaoks ja kasutada auth-proxy't, et kaitsta Kubernetes Dashboardi ja teisi rakendusi, mis ei oska iseseisvalt autoriseerida.
Keycloaki paigaldamine
Oletame, et teil on juba LDAP-server. See vÔib olla Active Directory, FreeIPA, OpenLDAP vÔi midagi muud. Kui LDAP-serverit pole, saate pÔhimÔtteliselt luua kasutajaid otse Keycloaki liideses vÔi kasutades avalikke oidc-teenusepakkujaid (Google, Github, Gitlab), tulemus saab olema peaaegu sama.
Esmalt paigaldame Keycloaki, paigaldamine vÔib toimuda eraldi vÔi otse Kubernetes-klastris, tavaliselt kui teil on mitu Kubernetes-klastrit, oleks lihtsam paigaldada see eraldi. Teiselt poolt saate alati kasutada ja paigaldada selle otse oma klastrisse.
Keycloaki andmete salvestamiseks vajate andmebaasi. Vaikimisi kasutatakse h2 (kÔik andmed salvestatakse kohapeal), kuid vÔimalik on kasutada ka postgres, mysql vÔi mariadb.
Kui siiski otsustate Keycloaki eraldi paigaldada, leiate ĂŒksikasjalikumad juhised .
Föderatsiooni seadistamine
Esmalt loome uue realm'i. Realm on meie rakenduse ruum. Igal rakendusel vÔib olla oma realm erinevate kasutajate ja autoriseerimiseseadeustega. Master realm'i kasutab Keycloak ise ja selle kasutamine millegi muuna pole Ôige.
KlÔpsame Lisa realm
Valik
VÀÀrtus
Nimi
kubernetes
Kuvamise nimi
Kubernetes
HTML kuvamise nimi
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kontrollib vaikimisi, kas kasutaja e-kiri on kinnitatud vĂ”i mitte. Kuna kasutame oma LDAP-serverit, siis see kontroll tagastab peaaegu alati false. LĂŒlitame selle parameetri kuvamise Kuberneteses vĂ€lja:
Kliendi ulatuste â> E-post â> Mapper'id â> E-kiri on kinnitatud (Kustuta)
NĂŒĂŒd seadistame föderatsiooni, selleks liigume:
Kasutaja föderatsioon â> Lisa teenusepakkuja⊠â> ldap
Toon nÀite FreeIPA seadistuse kohta:
Valik
VÀÀrtus
Konsoli kuvamise nimi
freeipa.example.org
Tootja
Red Hat Directory Server
UUID LDAP atribuudi
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>
Lubage Kerberose autentimine:
on
Kerberose realm:
EXAMPLE.ORG
Serveri peamine:
HTTP/freeipa.example.org@EXAMPLE.ORG
KeyTab:
/etc/krb5.keytab
Kasutajat keycloak-svc tuleb eelnevalt meie LDAP-serveris luua.
Active Directory puhul piisab lihtsalt valimisest Tootja: Active Directory ja vajalikud seaded tÀiendavad vormi automaatselt.
KlÔpsame Salvesta
Liigume edasi:
Kasutaja föderatsioon â> freeipa.example.org â> Mapper'id â> Eesnimi
Valik
VÀÀrtus
Ldap atribuut
givenName
NĂŒĂŒd lĂŒlitame sisse grupide mappimise:
Kasutaja föderatsioon â> freeipa.example.org â> Mapper'id â> Loo
Valik
VÀÀrtus
Nimi
groups
Mappimise tĂŒĂŒp
group-ldap-mapper
LDAP Gruppide DN
cn=groups,cn=accounts,dc=example,dc=org
Kasutaja Gruppide Retrieve Strateegia
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Sellega on föderatsiooni seadistus lÔpetatud, liikume kliendi seadistamise juurde.
Kliendi seadistamine
Loome uue kliendi (rakenduse, mis saavad kasutajaid Keycloakist). Liigume:
Kliendid â> Loo
Valik
VÀÀrtus
Client ID
kubernetes
JuurdepÀÀsu tĂŒĂŒp
konfidentsiaalne
Juurlink
http://kubernetes.example.org/
Kehtivad ĂŒmbersuunamise URI-d
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Samuti loome grupide jaoks scope:
Kliendi Scopes â> Loo
Valik
VÀÀrtus
Mall
Ilma mallita
Nimi
groups
TĂ€ielik grupitee
false
Ja seadistame nende jaoks mappimise:
Kliendi Scopes â> groups â> Mapper'id â> Loo
Valik
VÀÀrtus
Nimi
groups
Mappimise tĂŒĂŒp
Grupi kuuluvus
Tokeni kaitsenimi
groups
NĂŒĂŒd peame lĂŒlitama grupide mappimise meie kliendièćŽ:
Kliendid â> kubernetes â> Kliendi Scopes â> Vaikimisi kliendi scoperid
Valime groups ja Saadaval kliendi scoperid, klÔpsake Lisa valitud
NĂŒĂŒd seadistame rakenduse autentimise, liigume:
Kliendid â> kubernetes
Valik
VÀÀrtus
Autoriseerimine lubatud
KAS
KlĂ”psake salvesta ja sellega on kliendi seadistus lĂ”petatud, nĂŒĂŒd vahekaardil
Kliendid â> kubernetes â> Krediteerimine
saate hankida Secret mida me hiljem kasutame.
Kubernetes'e seadistamine
Kubernetes'i seadistamine OIDC-autoriseerimiseks on piisavalt triviaalne ja ei ole eriti keeruline. KÔik, mis teil on vaja, on panna CA-sertifikaat teie OIDC-serverist /etc/kubernetes/pki/oidc-ca.pem ja lisada vajalikud valikud kube-apiserverile.
Selleks vÀrskendage /etc/kubernetes/manifests/kube-apiserver.yaml kÔikidel teie juhtmasteritel:
...
spec:
konteinerid:
- kÀsk:
- 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 vÀrskendage ka kubeadm konfiguuri klastris, et neid seadeid uuendamise ajal 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
...Sellega on Kubernetes seadistus lÔpetatud. Saate samu samme kordata kÔikides oma Kubernetes klastrites.
Esialgne autoriseerimine
PÀrast neid toiminguid on teil juba Kubernetes klaster seadistatud OIDC-autoriseerimisega. Ainult see, et teie kasutajatel ei ole veel seadistatud klienti nagu ka oma kubeconfigi. Selle probleemi lahendamiseks tuleb seadistada automaatne kubeconfigi andmine kasutajatele pÀrast eduka autoriseerimise.
Selleks vĂ”ite kasutada spetsiaalseid veebirakendusi, mis vĂ”imaldavad kasutajakontot autentida ja seejĂ€rel valmis kubeconfigi alla laadida. Ăks mugavamaid on , see vĂ”imaldab ĂŒhes konfiguratsioonis kirjeldada kĂ”iki Kubernetes-klastrite ja kergesti nende vahel lĂŒlituda.
Kuberos seadistamiseks on piisav, kui kirjeldada template kubeconfigile ja kÀivitada jÀrgmiste parameetritega:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/templateRohkem ĂŒksikasjade saamiseks vaadake GitHubis.
Samuti on vÔimalik kasutada , kui soovite autentida otse kasutaja arvutis. Sel juhul avaneb kasutajale brauseris autentimisvorm localhostis.
Saadud kubeconfigi saab kontrollida veebisaidil . Lihtsalt kopeerige vÀÀrtus users[].user.auth-provider.config.id-token oma kubeconfigist vormi ja saate kohe tÔlgenduse.
RBAC seadistamine
RBAC seadistamisel on vÔimalik viidata nii kasutajanimele (vÀlja nimi jwt-tokenis), kui ka kasutajagruppidele (vÀlja groups jwt-tokenis). Siin on nÀide Ôiguste seadistamisest 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-adminsRohkem nÀiteid RBAC kohta leiate
auth-proxy seadistamine
On olemas suurepÀrane projekt , mis kaitseb igasuguseid rakendusi, pakkudes kasutajale vÔimalust autentida 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
