En kort vejledning om, hvordan du kan bruge Keycloak til at forbinde Kubernetes til din LDAP-server og konfigurere importen af brugere og grupper. Dette giver dig mulighed for at konfigurere RBAC for dine brugere og bruge auth-proxy til at beskytte Kubernetes Dashboard og andre applikationer, der ikke kan godkende sig selv.
Keycloak installation
Lad os antage, at du allerede har en LDAP-server. Dette kunne være Active Directory, FreeIPA, OpenLDAP eller noget andet. Hvis du ikke har en LDAP-server, så kan du i princippet oprette brugere direkte i Keycloak-grænsefladen, eller bruge offentlige oidc-udbydere (Google, Github, Gitlab), resultatet bliver næsten det samme.
Lad os først og fremmest installere selve Keycloak Installationen kan udføres separat eller direkte i en Kubernetes-klynge. Som regel, hvis du har flere Kubernetes-klynger, ville det være nemmere at installere det separat. På den anden side kan du altid bruge
For at gemme Keycloak-data skal du bruge en database. Standard er h2
(al data gemmes lokalt), men det er også muligt at bruge postgres
, mysql
eller mariadb
.
Hvis du alligevel beslutter dig for at installere Keycloak separat, finder du mere detaljerede instruktioner i
Federation opsætning
Først og fremmest, lad os skabe et nyt rige. Realm er rummet for vores applikation. Hver applikation kan have sit eget område med forskellige brugere og autorisationsindstillinger. Mesterriget bruges af Keycloak selv, og det er forkert at bruge det til noget andet.
Klik Tilføj rige
Option
Værdi
Navn
kubernetes
Visningsnavn
Kubernetes
HTML-visningsnavn
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kontrollerer som standard, om brugerens e-mail er bekræftet eller ej. Da vi bruger vores egen LDAP-server, vil denne check næsten altid vende tilbage false
. Lad os deaktivere denne indstillings repræsentation i Kubernetes:
Kundeomfang -> E-mail -> Kortlæggere -> E-mail bekræftet (Slet)
Lad os nu oprette føderationen; for at gøre dette, gå til:
Brugerføderation -> Tilføj udbyder... -> ldap
Her er et eksempel på indstillinger for FreeIPA:
Option
Værdi
Konsol vist navn
freeipa.example.org
Vendor
Red Hat Directory Server
UUID LDAP-attribut
ipauniqueid
Forbindelses-URL
ldaps://freeipa.example.org
Brugere DN
cn=users,cn=accounts,dc=example,dc=org
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind legitimationsoplysninger
<password>
Tillad Kerberos-godkendelse:
on
Kerberos Realm:
EXAMPLE.ORG
Serverleder:
HTTP/[email protected]
Tastefane:
/etc/krb5.keytab
bruger keycloak-svc
skal oprettes på forhånd på vores LDAP-server.
I tilfælde af Active Directory skal du blot vælge Leverandør: Active Directory og de nødvendige indstillinger indtastes automatisk i formularen.
Klik Gem
Lad os nu gå videre:
Brugerføderation -> freeipa.example.org -> Kortlæggere -> Fornavn
Option
Værdi
Ldap-attribut
givenName
Lad os nu aktivere gruppekortlægning:
Brugerføderation -> freeipa.example.org -> Kortlæggere -> Opret
Option
Værdi
Navn
groups
Mapper type
group-ldap-mapper
LDAP-grupper DN
cn=groups,cn=accounts,dc=example,dc=org
Brugergrupper Hent strategi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Nu hvor forbundsopsætningen er færdig, lad os gå videre til opsætning af klienten.
Klient opsætning
Lad os oprette en ny klient (en applikation, der vil modtage brugere fra Keycloak). Lad os gå videre:
Klienter -> Opret
Option
Værdi
kunde-id
kubernetes
Adgangstype
confidenrial
Root URL
http://kubernetes.example.org/
Gyldige omdirigerings-URI'er
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Lad os også skabe et område for grupper:
Kundeomfang -> Opret
Option
Værdi
Skabelon
No template
Navn
groups
Fuld gruppevej
false
Og opsæt en mapper til dem:
Kundeomfang -> grupper -> Kortlæggere -> Opret
Option
Værdi
Navn
groups
Mapper Type
Group membership
Navn på tokenkrav
groups
Nu skal vi aktivere kortlægningsgruppe i vores klientomfang:
Klienter -> guvernør -> Kundeomfang -> Standard klientomfang
Vælg grupper в Tilgængelige klientomfang, tryk på Tilføj valgte
Lad os nu konfigurere godkendelsen af vores applikation, gå til:
Klienter -> guvernør
Option
Værdi
Autorisation aktiveret
ON
Lad os trykke spare og hermed er klientopsætningen fuldført, nu på fanen
Klienter -> guvernør -> Legitimationsoplysninger
du kan få Secret som vi vil bruge videre.
Konfiguration af Kubernetes
Opsætning af Kubernetes til OIDC-godkendelse er ret trivielt og ikke særlig kompliceret. Alt du skal gøre er at indsætte CA-certifikatet for din OIDC-server /etc/kubernetes/pki/oidc-ca.pem
og tilføje de nødvendige muligheder for kube-apiserver.
For at gøre dette skal du opdatere /etc/kubernetes/manifests/kube-apiserver.yaml
på alle dine mestre:
...
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
...
Opdater også kubeadm-konfigurationen i klyngen for ikke at miste disse indstillinger ved opdatering:
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
...
Dette fuldender Kubernetes-konfigurationen. Du kan gentage disse trin på tværs af alle dine Kubernetes-klynger.
Indledende godkendelse
Efter disse trin vil du allerede have en Kubernetes-klynge med konfigureret OIDC-autorisation. Det eneste er, at dine brugere endnu ikke har en konfigureret klient eller deres egen kubeconfig. For at løse dette problem skal du konfigurere automatisk distribution af kubeconfig til brugere efter vellykket godkendelse.
For at gøre dette kan du bruge specielle webapplikationer, der giver dig mulighed for at autentificere brugeren og derefter downloade den færdige kubeconfig. En af de mest bekvemme er
For at konfigurere Kuberos skal du blot beskrive skabelonen for kubeconfig og køre den med følgende parametre:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
For mere detaljeret information se
Det er også muligt at bruge
Den resulterende kubeconfig kan kontrolleres på hjemmesiden users[].user.auth-provider.config.id-token
fra din kubeconfig til formularen på hjemmesiden og modtag straks et udskrift.
Opsætning af RBAC
Når du konfigurerer RBAC, kan du referere til både brugernavnet (felt name
i jwt-tokenet) og pr. brugergruppe (felt groups
i jwt-token). Her er et eksempel på opsætning af rettigheder for en gruppe 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
Flere eksempler på RBAC kan findes i
Indstilling af auth-proxy
Der er et vidunderligt 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
Kilde: www.habr.com