Majhna vadnica o uporabi Keycloaka za povezavo Kubernetesa z vašim strežnikom LDAP in nastavitev uvoza uporabnikov in skupin. To vam bo omogočilo, da nastavite RBAC za svoje uporabnike in uporabite auth-proxy za zaščito Kubernetes Dashboard in drugih aplikacij, ki se ne znajo pooblastiti.
Namestitev Keycloak
Predpostavimo, da že imate strežnik LDAP. Lahko je Active Directory, FreeIPA, OpenLDAP ali karkoli drugega. Če nimate strežnika LDAP, lahko uporabnike načeloma ustvarite neposredno v vmesniku Keycloak ali uporabite javne ponudnike oidc (Google, Github, Gitlab), rezultat bo skoraj enak.
Najprej namestimo sam Keycloak, namestitev lahko izvedemo ločeno, ali direktno v gručo Kubernetes, praviloma, če imate več gruč Kubernetes, bi bilo lažje namestiti ločeno. Po drugi strani pa lahko vedno uporabite
Za shranjevanje podatkov Keycloak boste potrebovali bazo podatkov. Privzeto je h2
(vsi podatki so shranjeni lokalno), možna pa je tudi uporaba postgres
, mysql
ali mariadb
.
Če se vseeno odločite za ločeno namestitev Keycloaka, lahko podrobnejša navodila najdete v
Nastavitev federacije
Najprej ustvarimo novo kraljestvo. Realm je prostor naše aplikacije. Vsaka aplikacija ima lahko svoje področje z različnimi uporabniki in nastavitvami avtorizacije. Glavno kraljestvo uporablja sam Keycloak in njegova uporaba za kar koli drugega je napačna.
Potisnite Dodaj kraljestvo
Možnost
vrednost
Ime
kubernetes
Display Name
Kubernetes
Prikazno ime HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes privzeto preveri, ali je e-pošta uporabnika potrjena ali ne. Ker uporabljamo lasten strežnik LDAP, se to preverjanje skoraj vedno vrne false
. Onemogočimo predstavitev te nastavitve v Kubernetesu:
Obseg strank -> E-pošta -> Kartografi -> E-pošta preverjena (Izbriši)
Zdaj pa vzpostavimo zvezo; za to pojdite na:
Zveza uporabnikov -> Dodaj ponudnika ... -> ldap
Tukaj je primer nastavitev za FreeIPA:
Možnost
vrednost
Prikazno ime konzole
freeipa.example.org
Prodajalec
Red Hat Directory Server
UUID LDAP atribut
ipauniqueid
URL povezave
ldaps://freeipa.example.org
DN uporabnikov
cn=users,cn=accounts,dc=example,dc=org
Vezi DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Poveži poverilnico
<password>
Dovoli preverjanje pristnosti Kerberos:
on
Območje Kerberos:
EXAMPLE.ORG
Glavni strežnik:
HTTP/[email protected]
ključni zavihek:
/etc/krb5.keytab
Uporabnik keycloak-svc
je treba ustvariti vnaprej na našem strežniku LDAP.
V primeru imenika Active Directory morate samo izbrati Prodajalec: Active Directory in potrebne nastavitve bodo samodejno vnesene v obrazec.
Potisnite Shrani
Zdaj pa gremo naprej:
Zveza uporabnikov -> freeipa.example.org -> Kartografi -> Ime
Možnost
vrednost
Atribut Ldap
givenName
Zdaj omogočimo skupinsko preslikavo:
Zveza uporabnikov -> freeipa.example.org -> Kartografi -> ustvarjanje
Možnost
vrednost
Ime
groups
Vrsta preslikave
group-ldap-mapper
Skupine LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Strategija pridobivanja uporabniških skupin
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Zdaj, ko je nastavitev zveze končana, pojdimo na nastavitev odjemalca.
Nastavitev odjemalca
Ustvarimo novega odjemalca (aplikacijo, ki bo sprejemala uporabnike iz Keycloaka). Gremo naprej:
Odjemalci -> ustvarjanje
Možnost
vrednost
ID stranke
kubernetes
Vrsta dostopa
confidenrial
Koren URL
http://kubernetes.example.org/
Veljavni URI preusmeritve
http://kubernetes.example.org/*
Skrbniški URL
http://kubernetes.example.org/
Ustvarimo tudi obseg za skupine:
Obseg odjemalca -> ustvarjanje
Možnost
vrednost
predloga
No template
Ime
groups
Celotna skupinska pot
false
In jim nastavite preslikavo:
Obseg odjemalca -> skupine -> Kartografi -> ustvarjanje
Možnost
vrednost
Ime
groups
Vrsta preslikave
Group membership
Ime zahtevka žetona
groups
Zdaj moramo omogočiti skupino preslikav v našem obsegu odjemalca:
Odjemalci -> Kubernetes -> Obseg odjemalca -> Privzeti obsegi odjemalca
Izberite skupine в Razpoložljivi obsegi strank, pritisnite Dodaj izbrano
Zdaj pa konfigurirajmo avtentikacijo naše aplikacije, pojdite na:
Odjemalci -> Kubernetes
Možnost
vrednost
Avtorizacija omogočena
ON
Pritisnemo shranjevanje in s tem je nastavitev odjemalca končana, zdaj na zavihku
Odjemalci -> Kubernetes -> Mandatno
lahko dobiš skrivnost ki jih bomo še naprej uporabljali.
Konfiguriranje Kubernetesa
Nastavitev Kubernetesa za avtorizacijo OIDC je precej trivialna in ni nekaj zelo zapletenega. Vse kar morate storiti je, da vstavite potrdilo CA vašega strežnika OIDC /etc/kubernetes/pki/oidc-ca.pem
in dodajte potrebne možnosti za kube-apiserver.
Če želite to narediti, posodobite /etc/kubernetes/manifests/kube-apiserver.yaml
na vse svoje mojstre:
...
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
...
Prav tako posodobite konfiguracijo kubeadm v gruči, da ne izgubite teh nastavitev pri posodabljanju:
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
...
S tem je konfiguracija Kubernetes zaključena. Te korake lahko ponovite v vseh svojih gručah Kubernetes.
Začetna avtorizacija
Po teh korakih boste že imeli gručo Kubernetes s konfiguriranim pooblastilom OIDC. Edina stvar je, da vaši uporabniki še nimajo konfiguriranega odjemalca ali lastnega kubeconfiga. Če želite rešiti to težavo, morate po uspešni avtorizaciji konfigurirati samodejno distribucijo kubeconfig uporabnikom.
Če želite to narediti, lahko uporabite posebne spletne aplikacije, ki vam omogočajo avtentikacijo uporabnika in nato prenesete končni kubeconfig. Eden najbolj priročnih je
Če želite konfigurirati Kuberos, samo opišite predlogo za kubeconfig in jo zaženite z naslednjimi parametri:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Za podrobnejše informacije glejte
Možna je tudi uporaba
Nastali kubeconfig lahko preverite na spletni strani users[].user.auth-provider.config.id-token
iz vašega kubeconfiga v obrazec na spletnem mestu in takoj prejmete prepis.
Nastavitev RBAC
Ko konfigurirate RBAC, se lahko sklicujete na uporabniško ime (polje name
v žetonu jwt) in na skupino uporabnikov (polje groups
v žetonu jwt). Tukaj je primer nastavitve pravic za skupino 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
Več primerov za RBAC najdete v
Nastavitev auth-proxyja
Obstaja čudovit projekt
nadzorna plošča-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
Vir: www.habr.com