'n Klein handleiding oor hoe om Keycloak te gebruik om Kubernetes aan jou LDAP-bediener te koppel en invoer van gebruikers en groepe op te stel. Dit sal jou toelaat om RBAC vir jou gebruikers op te stel en gesagvolmag te gebruik om Kubernetes Dashboard en ander toepassings te beskerm wat nie weet hoe om hulself te magtig nie.
Sleutelmantel installasie
Kom ons neem aan dat jy reeds 'n LDAP-bediener het. Dit kan Active Directory, FreeIPA, OpenLDAP of wat ook al wees. As u nie 'n LDAP-bediener het nie, kan u in beginsel gebruikers direk in die Keycloak-koppelvlak skep, of openbare oidc-verskaffers (Google, Github, Gitlab) gebruik, die resultaat sal amper dieselfde wees.
Eerstens, laat ons Keycloak self installeer, die installasie kan afsonderlik uitgevoer word, of direk na die Kubernetes-kluster, as 'n reël, as u verskeie Kubernetes-klusters het, sou dit makliker wees om dit afsonderlik te installeer. Aan die ander kant kan jy altyd gebruik
Om Keycloak-data te stoor, benodig u 'n databasis. Die verstek is h2
(alle data word plaaslik gestoor), maar dit is ook moontlik om te gebruik postgres
, mysql
of mariadb
.
As jy steeds besluit om Keycloak afsonderlik te installeer, kan jy meer gedetailleerde instruksies vind in
Federasie opstelling
Eerstens, laat ons 'n nuwe ryk skep. Realm is die ruimte van ons toepassing. Elke toepassing kan sy eie ryk hê met verskillende gebruikers en magtiginginstellings. Die meesterryk word deur Keycloak self gebruik en dit is verkeerd om dit vir enigiets anders te gebruik.
druk Voeg ryk by
Opsie
waarde
Naam
kubernetes
Display Naam
Kubernetes
HTML-vertoonnaam
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kontroleer by verstek of die gebruiker se e-pos bevestig is of nie. Aangesien ons ons eie LDAP-bediener gebruik, sal hierdie tjek byna altyd terugkeer false
. Kom ons deaktiveer die voorstelling van hierdie instelling in Kubernetes:
Kliënt omvang -> E-posadres -> Kaartmakers -> e-pos geverifieer (Vee uit)
Kom ons stel nou die federasie op, hiervoor gaan ons na:
Gebruikersfederasie -> Voeg verskaffer by … -> ldap
Hier is 'n voorbeeldopstelling vir FreeIPA:
Opsie
waarde
Konsole-vertoonnaam
freeipa.example.org
Ondernemer
Red Hat Directory Server
UUID LDAP-kenmerk
ipauniqueid
Verbindings-URL
ldaps://freeipa.example.org
Gebruiker DN
cn=users,cn=accounts,dc=example,dc=org
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind geloofsbriewe
<password>
Laat Kerberos-stawing toe:
on
Kerberos Realm:
EXAMPLE.ORG
Bedienerhoof:
HTTP/[email protected]
sleuteloortjie:
/etc/krb5.keytab
gebruiker keycloak-svc
moet vooraf op ons LDAP-bediener geskep word.
In die geval van Active Directory, kies eenvoudig Verkoper: Active Directory en die nodige instellings sal outomaties in die vorm ingevoeg word.
druk Stoor
Kom ons gaan nou verder:
Gebruikersfederasie -> freeipa.example.org -> Kaartmakers -> Eerste naam
Opsie
waarde
Ldap eienskappe
givenName
Aktiveer nou groepkartering:
Gebruikersfederasie -> freeipa.example.org -> Kaartmakers -> Skep
Opsie
waarde
Naam
groups
Mapper tipe
group-ldap-mapper
LDAP Groepe DN
cn=groups,cn=accounts,dc=example,dc=org
Gebruikersgroep-herwinningstrategie
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Dit voltooi die federasie-opstelling, kom ons gaan voort met die opstel van die kliënt.
Kliënt opstelling
Kom ons skep 'n nuwe kliënt ('n toepassing wat gebruikers van Keycloak sal ontvang). Kom ons gaan:
Kliënte -> Skep
Opsie
waarde
Kliënt-ID
kubernetes
Toegangstipe
confidenrial
Wortel-URL
http://kubernetes.example.org/
Geldige aanstuur-URI's
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Ons sal ook 'n omvang skep vir groepe:
Kliënt omvang -> Skep
Opsie
waarde
Sjabloon
No template
Naam
groups
Volle groep pad
false
En stel 'n karteerder vir hulle op:
Kliënt omvang -> groepe -> Kaartmakers -> Skep
Opsie
waarde
Naam
groups
Mapper tipe
Group membership
Token Eis Naam
groups
Nou moet ons groepkartering in ons kliëntomvang aktiveer:
Kliënte -> goewerneur -> Kliënt omvang -> Standaardkliëntbestekke
Kies groepe в Beskikbare kliëntbestekke, pers Voeg geselekteerde by
Kom ons stel nou die verifikasie van ons toepassing op, gaan na:
Kliënte -> goewerneur
Opsie
waarde
Magtiging geaktiveer
ON
Kom ons druk red en dit voltooi die kliëntopstelling, nou op die blad
Kliënte -> goewerneur -> geloofsbriewe
Jy kan kry Secret wat ons later sal gebruik.
Konfigureer Kubernetes
Die opstel van Kubernetes vir OIDC-magtiging is nogal triviaal en nie iets baie ingewikkeld nie. Al wat u hoef te doen is om die CA-sertifikaat van u OIDC-bediener in te sit /etc/kubernetes/pki/oidc-ca.pem
en voeg die nodige opsies vir kube-apiserver by.
Om dit te doen, werk op /etc/kubernetes/manifests/kube-apiserver.yaml
op al u meesters:
...
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 werk ook die kubeadm-konfigurasie in die groep op om nie hierdie instellings tydens die opdatering te verloor nie:
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 voltooi die Kubernetes-opstelling. Jy kan hierdie stappe oor al jou Kubernetes-klusters herhaal.
Aanvanklike magtiging
Na hierdie stappe sal jy reeds 'n Kubernetes-kluster hê met OIDC-magtiging opgestel. Die enigste punt is dat u gebruikers nog nie 'n kliënt opgestel het nie, sowel as hul eie kubeconfig. Om hierdie probleem op te los, moet jy die outomatiese uitreiking van kubeconfig aan gebruikers instel na suksesvolle magtiging.
Om dit te doen, kan jy spesiale webtoepassings gebruik wat jou toelaat om die gebruiker te verifieer en dan die voltooide kubeconfig af te laai. Een van die gerieflikste is
Om Kuberos op te stel, is dit genoeg om die sjabloon vir kubeconfig te beskryf en dit met die volgende parameters uit te voer:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Vir meer besonderhede sien
Dit is ook moontlik om te gebruik
Die resulterende kubeconfig kan op die webwerf nagegaan word users[].user.auth-provider.config.id-token
van jou kubeconfig na 'n vorm op die webwerf en kry die transkripsie dadelik.
RBAC opstelling
Wanneer u RBAC opstel, kan u verwys na beide die gebruikersnaam (veld name
in die jwt-token) en vir 'n groep gebruikers (veld groups
in jwt-token). Hier is 'n voorbeeld van die instelling van toestemmings vir 'n 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
Meer voorbeelde vir RBAC kan gevind word in
Stel magtiging-instaanbediener
Daar is 'n wonderlike projek
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
Bron: will.com