In lyts tutorial oer hoe't jo Keycloak brûke om Kubernetes te ferbinen mei jo LDAP-tsjinner en ymport fan brûkers en groepen ynstelle. Hjirmei kinne jo RBAC ynstelle foar jo brûkers en auth-proxy brûke om Kubernetes Dashboard en oare applikaasjes te beskermjen dy't net witte hoe't se harsels autorisearje.
Keycloak Ynstallaasje
Litte wy oannimme dat jo al in LDAP-tsjinner hawwe. It kin Active Directory, FreeIPA, OpenLDAP of wat dan ek wêze. As jo gjin LDAP-tsjinner hawwe, dan kinne jo yn prinsipe brûkers direkt yn 'e Keycloak-ynterface oanmeitsje, of gebrûk meitsje fan iepenbiere oidc-providers (Google, Github, Gitlab), it resultaat sil hast itselde wêze.
Lit ús earst Keycloak sels ynstallearje, de ynstallaasje kin apart wurde útfierd, of direkt nei it Kubernetes-kluster, as regel, as jo ferskate Kubernetes-klusters hawwe, soe it makliker wêze om it apart te ynstallearjen. Oan 'e oare kant kinne jo altyd brûke
Om Keycloak-gegevens op te slaan, sille jo in databank nedich hawwe. De standert is h2
(alle gegevens wurde opslein lokaal), mar it is ek mooglik om te brûken postgres
, mysql
of mariadb
.
As jo noch beslute om Keycloak apart te ynstallearjen, kinne jo mear detaillearre ynstruksjes fine yn
Federaasje opset
Lit ús earst in nij ryk oanmeitsje. Ryk is de romte fan ús applikaasje. Elke applikaasje kin in eigen ryk hawwe mei ferskate brûkers en autorisaasjeynstellingen. It masterryk wurdt brûkt troch Keycloak sels en it brûke foar wat oars is ferkeard.
Push Foegje ryk ta
Opsje
Wearde
namme
kubernetes
NAME OF TRANSLATORS
Kubernetes
HTML werjaan namme
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kontrolearret standert oft de e-post fan de brûker is befêstige of net. Om't wy ús eigen LDAP-tsjinner brûke, sil dizze kontrôle hast altyd weromkomme false
. Litte wy de fertsjintwurdiging fan dizze ynstelling yn Kubernetes útskeakelje:
Client omfang -> email -> Mappers -> e-post ferifiearre (wiskje)
Litte wy no de federaasje opsette, dêrfoar geane wy nei:
Brûker federaasje -> Oanbieder tafoegje... -> ldap
Hjir is in foarbyld opset foar FreeIPA:
Opsje
Wearde
Konsole werjeftenamme
freeipa.example.org
vendor
Red Hat Directory Server
UUID LDAP attribút
ipauniqueid
Ferbining URL
ldaps://freeipa.example.org
Brûker DN
cn=users,cn=accounts,dc=example,dc=org
Binding DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind Credential
<password>
Kerberos-ferifikaasje tastean:
on
Kerberos Realm:
EXAMPLE.ORG
Server Principal:
HTTP/[email protected]
kaai ljepper:
/etc/krb5.keytab
Brûker keycloak-svc
moat foarôf oanmakke wurde op ús LDAP-tsjinner.
Yn it gefal fan Active Directory, selektearje gewoan Ferkeaper: Active Directory en de nedige ynstellings wurde automatysk ynfoege yn it formulier.
Push Rêde
Litte wy no fierder gean:
Brûker federaasje -> freeipa.example.org -> Mappers -> Foarnamme
Opsje
Wearde
Ldap attributen
givenName
Aktivearje no groepmapping:
Brûker federaasje -> freeipa.example.org -> Mappers -> Meitsje
Opsje
Wearde
namme
groups
Mapper type
group-ldap-mapper
LDAP-groepen DN
cn=groups,cn=accounts,dc=example,dc=org
Brûkersgroep Retrieve Strategy
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Dit foltôget de opset fan 'e federaasje, litte wy trochgean mei it ynstellen fan de kliïnt.
Client opset
Litte wy in nije kliïnt meitsje (in applikaasje dy't brûkers fan Keycloak sil ûntfange). Litte wy gean:
opdrachtjouwers -> Meitsje
Opsje
Wearde
Klient ID
kubernetes
Tagongstype
confidenrial
Root URL
http://kubernetes.example.org/
Jildige trochferwizing URI's
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Wy sille ek in romte meitsje foar groepen:
Client omfang -> Meitsje
Opsje
Wearde
template
No template
namme
groups
Folsleine groep paad
false
En set in mapper foar har op:
Client omfang -> groepen -> Mappers -> Meitsje
Opsje
Wearde
namme
groups
Mapper Type
Group membership
Token Claim Namme
groups
No moatte wy groepmapping ynskeakelje yn ús klantbereik:
opdrachtjouwers -> kubernetes -> Client omfang -> Standert Client Scopes
Kies groepen в Beskikbere Client Scopes, drukke Taheakje selektearre
Litte wy no de autentikaasje fan ús applikaasje ynstelle, gean nei:
opdrachtjouwers -> kubernetes
Opsje
Wearde
Autorisaasje ynskeakele
ON
Lit ús triuwe besparje en dit foltôget de klantkonfiguraasje, no op 'e ljepper
opdrachtjouwers -> kubernetes -> Credentials
Do kinst krije Geheim dy't wy letter sille brûke.
Kubernetes konfigurearje
It ynstellen fan Kubernetes foar OIDC-autorisaasje is frij triviaal en net wat heul yngewikkeld. Alles wat jo hoege te dwaan is it CA-sertifikaat fan jo OIDC-tsjinner yn te setten /etc/kubernetes/pki/oidc-ca.pem
en foegje de nedige opsjes ta foar kube-apiserver.
Om dit te dwaan, update /etc/kubernetes/manifests/kube-apiserver.yaml
op al dyn masters:
...
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
...
En bywurkje ek de kubeadm-konfiguraasje yn it kluster om dizze ynstellingen net te ferliezen tidens de fernijing:
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
...
Dit foltôget de opset fan Kubernetes. Jo kinne dizze stappen werhelje oer al jo Kubernetes-klusters.
Inisjele autorisaasje
Nei dizze stappen sille jo al in Kubernetes-kluster hawwe mei OIDC-autorisaasje ynsteld. It ienige punt is dat jo brûkers noch gjin kliïnt hawwe konfigureare, lykas har eigen kubeconfig. Om dit probleem op te lossen, moatte jo de automatyske útjefte fan kubeconfig oan brûkers konfigurearje nei suksesfolle autorisaasje.
Om dit te dwaan kinne jo spesjale webapplikaasjes brûke wêrmei jo de brûker kinne ferifiearje en dan de klear kubeconfig downloade. Ien fan de meast handige is
Om Kuberos te konfigurearjen, is it genôch om it sjabloan foar kubeconfig te beskriuwen en it út te fieren mei de folgjende parameters:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Foar mear details sjoch
It is ek mooglik om te brûken
De resultearjende kubeconfig kin wurde kontrolearre op 'e side users[].user.auth-provider.config.id-token
fan jo kubeconfig nei in formulier op 'e side en krije de transkripsje daliks.
RBAC opset
By it konfigurearjen fan RBAC kinne jo ferwize nei sawol de brûkersnamme (fjild name
yn it jwt-token) en foar in groep brûkers (fjild groups
in jwt token). Hjir is in foarbyld fan it ynstellen fan tagongsrjochten foar in groep 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
Mear foarbylden foar RBAC kinne fûn wurde yn
Auth-proxy ynstelle
Der is in prachtich 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
Boarne: www.habr.com