Lühike õpetus selle kohta, kuidas kasutada Keycloaki Kubernetese ühendamiseks oma LDAP-serveriga ning kasutajate ja rühmade importimise konfigureerimiseks. See võimaldab teil konfigureerida oma kasutajate jaoks RBAC-i ja kasutada autentimispuhverserverit, et kaitsta Kubernetes Dashboardi ja muid rakendusi, mis ei saa end autentida.
Võtmekatte paigaldamine
Oletame, et teil on juba LDAP-server. See võib olla Active Directory, FreeIPA, OpenLDAP või midagi muud. Kui teil pole LDAP-serverit, saate põhimõtteliselt luua kasutajaid otse Keycloaki liideses või kasutada avalikke oidc-pakkujaid (Google, Github, Gitlab), tulemus on peaaegu sama.
Kõigepealt paigaldame Keycloaki ise.Installi saab teha eraldi või otse Kubernetese klastrisse.Kui Sul on mitu Kubernetese klastrit, siis oleks reeglina lihtsam eraldi paigaldada. Teisest küljest saate seda alati kasutada
Keycloaki andmete salvestamiseks vajate andmebaasi. Vaikimisi on h2
(kõik andmed salvestatakse lokaalselt), kuid seda on võimalik ka kasutada postgres
, mysql
või mariadb
.
Kui otsustate siiski Keycloaki eraldi installida, leiate täpsemad juhised aadressilt
Föderatsiooni seadistamine
Kõigepealt loome uue valdkonna. Valdkond on meie rakenduse ruum. Igal rakendusel võib olla oma valdkond erinevate kasutajate ja autoriseerimisseadetega. Põhivaldkonda kasutab Keycloak ise ja on vale kasutada seda millegi muu jaoks.
Vajuta siia Lisa valdkond
valik
Väärtus
Nimi
kubernetes
Näita Nimi
Kubernetes
HTML-i kuvatav nimi
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Vaikimisi kontrollib Kubernetes, kas kasutaja meiliaadress on kinnitatud või mitte. Kuna kasutame oma LDAP-serverit, naaseb see kontroll peaaegu alati false
. Keelame selle valiku esituse Kubernetesis:
Kliendi ulatused -> E-POST -> Kaardistajad -> E-post kinnitatud (Kustuta)
Nüüd loome föderatsiooni; selleks minge aadressile:
Kasutajate liit -> Lisa teenusepakkuja… -> ldap
Siin on näide FreeIPA seadetest:
valik
Väärtus
Konsooli kuvatav nimi
freeipa.example.org
Müüja
Red Hat Directory Server
UUID LDAP atribuut
ipauniqueid
Ühenduse URL
ldaps://freeipa.example.org
Kasutajad DN
cn=users,cn=accounts,dc=example,dc=org
Seo DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Mandaadi sidumine
<password>
Luba Kerberose autentimine:
on
Kerberose valdus:
EXAMPLE.ORG
Serveri juht:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Kasutaja keycloak-svc
tuleb meie LDAP-serveris eelnevalt luua.
Active Directory puhul peate lihtsalt valima Tarnija: Active Directory ja vajalikud seadistused sisestatakse vormi automaatselt.
Vajuta siia Säästa
Liigume nüüd edasi:
Kasutajate liit -> freeipa.example.org -> Kaardistajad -> Eesnimi
valik
Väärtus
Ldap atribuut
givenName
Nüüd lubame rühma kaardistamise:
Kasutajate liit -> freeipa.example.org -> Kaardistajad -> Looma
valik
Väärtus
Nimi
groups
Kaardistaja tüüp
group-ldap-mapper
LDAP rühmad DN
cn=groups,cn=accounts,dc=example,dc=org
Kasutajarühmad toovad alla strateegia
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Nüüd, kui föderatsiooni seadistamine on lõpetatud, jätkame kliendi seadistamisega.
Kliendi seadistamine
Loome uue kliendi (rakendus, mis võtab kasutajaid vastu Keycloakist). Liigume edasi:
Kliendid -> Looma
valik
Väärtus
kliendi ID
kubernetes
Juurdepääsu tüüp
confidenrial
Juur-URL
http://kubernetes.example.org/
Kehtivad ümbersuunamise URI-d
http://kubernetes.example.org/*
Administraatori URL
http://kubernetes.example.org/
Loome ka rühmade jaoks ulatuse:
Kliendi ulatused -> Looma
valik
Väärtus
Šabloon
No template
Nimi
groups
Täielik rühmatee
false
Ja koostage neile kaardistaja:
Kliendi ulatused -> rühmade -> Kaardistajad -> Looma
valik
Väärtus
Nimi
groups
Kaardistaja tüüp
Group membership
Token Claim Name
groups
Nüüd peame lubama oma kliendi ulatuses kaardistamisrühma:
Kliendid -> kubernetes -> Kliendi ulatused -> Kliendi vaikeulatused
valima rühmade в Saadaolevad kliendi ulatusedklõps Lisa valitud
Nüüd konfigureerime oma rakenduse autentimise, minge aadressile:
Kliendid -> kubernetes
valik
Väärtus
Autoriseerimine lubatud
ON
Vajutame välja arvatud ja sellega on kliendi seadistamine lõpetatud, nüüd vahekaardil
Kliendid -> kubernetes -> volikiri
sa võid saada Saladus mida me edaspidi kasutame.
Kubernetese konfigureerimine
Kubernetese seadistamine OIDC autoriseerimiseks on üsna triviaalne ja mitte eriti keeruline. Kõik, mida pead tegema, on sisestada oma OIDC-serveri CA-sertifikaat /etc/kubernetes/pki/oidc-ca.pem
ja lisage kube-apiserveri jaoks vajalikud valikud.
Selleks värskendage /etc/kubernetes/manifests/kube-apiserver.yaml
kõigi oma meistrite kohta:
...
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
...
Samuti värskendage klastris kubeadmi konfiguratsiooni, et mitte kaotada värskendamisel järgmisi sätteid:
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
...
See viib Kubernetese seadistamise lõpule. Saate neid samme korrata kõigis oma Kubernetese klastrites.
Esialgne luba
Pärast neid samme on teil juba konfigureeritud OIDC-volitusega Kubernetese klaster. Ainus asi on see, et teie kasutajatel pole veel konfigureeritud klienti ega oma kubeconfigi. Selle probleemi lahendamiseks peate pärast edukat autoriseerimist konfigureerima kubeconfigi automaatse levitamise kasutajatele.
Selleks saab kasutada spetsiaalseid veebirakendusi, mis võimaldavad kasutajat autentida ja seejärel alla laadida valmis kubeconfigi. Üks mugavamaid on
Kuberose konfigureerimiseks kirjeldage lihtsalt kubeconfigi malli ja käivitage see järgmiste parameetritega:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Täpsema teabe saamiseks vt
Samuti on võimalik kasutada
Saadud kubeconfigi saab kontrollida veebisaidil users[].user.auth-provider.config.id-token
kubeconfigist veebisaidil olevale vormile ja saate kohe ärakirja.
RBAC seadistamine
RBAC-i seadistamisel võite viidata nii kasutajanimele (väli name
jwt-märgis) ja kasutajarühma kohta (väli groups
jwt märgis). Siin on näide rühma õiguste seadistamisest 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
Rohkem näiteid RBAC kohta leiate aadressilt
Auth-puhverserveri seadistamine
Seal on suurepärane projekt
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
Allikas: www.habr.com