Un picculu tutoriale nantu à cumu utilizà Keycloak per cunnette Kubernetes à u vostru servitore LDAP è cunfigurà l'importazione di utilizatori è gruppi. Questu vi permetterà di cunfigurà RBAC per i vostri utilizatori è aduprà auth-proxy per prutege Kubernetes Dashboard è altre applicazioni chì ùn sanu micca cumu autorizà.
Installazione di Keycloak
Assumimu chì avete digià un servitore LDAP. Puderia esse Active Directory, FreeIPA, OpenLDAP o qualunque. Se ùn avete micca un servitore LDAP, allora in principiu pudete creà utilizatori direttamente in l'interfaccia di Keycloak, o aduprà fornituri publichi di oidc (Google, Github, Gitlab), u risultatu serà quasi u listessu.
Prima di tuttu, stallà Keycloak stessu, a stallazione pò esse realizatu separatamente, o direttamente à u cluster Kubernetes, per regula, se avete parechji clusters Kubernetes, saria più faciule d'installà separatamente. Per d 'altra banda, pudete sempre aduprà
Per almacenà e dati Keycloak, avete bisognu di una basa di dati. U default hè h2
(tutti i dati sò almacenati in u locu), ma hè ancu pussibule di utilizà postgres
, mysql
o mariadb
.
Sè ancu decide di stallà Keycloak separatamente, pudete truvà struzzioni più dettagliate in
Configurazione di a federazione
Prima di tuttu, creemu un novu regnu. Realm hè u spaziu di a nostra applicazione. Ogni applicazione pò avè u so propiu regnu cù diversi utilizatori è paràmetri d'autorizazione. U regnu maestru hè utilizatu da Keycloak stessu è l'utilizanu per ogni altra cosa hè sbagliatu.
Pulsà Aghjunghjite u regnu
upzione
Value
nomu
kubernetes
Mustrà Name
Kubernetes
Nome di visualizazione HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes per difettu verifica se l'email di l'utilizatore hè cunfirmatu o micca. Siccomu utilizemu u nostru servitore LDAP, questu verificatu guasi sempre torna false
. Disattivemu a rapprisintazioni di sta paràmetra in Kubernetes:
Scopi di u cliente -> Malice -> I cartografi -> email verificatu (sguassà)
Avà criemu a federazione, per questu andemu à:
Federazione d'utilizatori -> Aghjunghjite un fornitore... -> ldap
Eccu un esempiu di configurazione per FreeIPA:
upzione
Value
Console Display Name
freeipa.example.org
Vendeur
Red Hat Directory Server
Attributu UUID LDAP
ipauniqueid
URL di cunnessione
ldaps://freeipa.example.org
User DN
cn=users,cn=accounts,dc=example,dc=org
Legà DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Binding Credential
<password>
Permette l'autentificazione Kerberos:
on
Regnu Kerberos:
EXAMPLE.ORG
Principale di u servitore:
HTTP/[email protected]
tabulazione chjave:
/etc/krb5.keytab
Utente keycloak-svc
deve esse creatu in anticipu nantu à u nostru servitore LDAP.
In u casu di Active Directory, simpricimenti selezziunate Venditore: Active Directory è i paràmetri necessarii seranu inseriti automaticamente in a forma.
Pulsà Cruciani
Avà andemu avanti:
Federazione d'utilizatori -> freeipa.example.org -> I cartografi -> Nome
upzione
Value
Ldap attributi
givenName
Avà attivate a mappa di u gruppu:
Federazione d'utilizatori -> freeipa.example.org -> I cartografi -> creà
upzione
Value
nomu
groups
Tipu di mapper
group-ldap-mapper
LDAP Groups DN
cn=groups,cn=accounts,dc=example,dc=org
Strategia di ricuperazione di u gruppu d'utilizatori
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Questu cumpleta a cunfigurazione di a federazione, andemu à cunfigurà u cliente.
Configurazione di u cliente
Creemu un novu cliente (una applicazione chì riceverà l'utilizatori da Keycloak). Andemu:
clienti -> creà
upzione
Value
ID cliente
kubernetes
Tipu d'Accessu
confidenrial
URL di Root
http://kubernetes.example.org/
URI di redirezzione validi
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Creemu ancu un scopu per i gruppi:
Scopi di u cliente -> creà
upzione
Value
Template
No template
nomu
groups
Percorsu tutale di u gruppu
false
È crea un mapper per elli:
Scopi di u cliente -> i gruppi -> I cartografi -> creà
upzione
Value
nomu
groups
Tipu di Mapper
Group membership
Token Claim Name
groups
Avà avemu bisognu di attivà a mappa di u gruppu in u nostru scopu di u cliente:
clienti -> kubernetes -> Scopi di u cliente -> Scopi di u Client Predefinitu
Scegli i gruppi в Scopi di Clienti dispunibulicliccate Aghjunghjite selezziunate
Avà cunfigurà l'autentificazione di a nostra applicazione, andate à:
clienti -> kubernetes
upzione
Value
Autorizazione attivata
ON
Spingemu salvà è questu cumpleta a cunfigurazione di u cliente, avà nantu à a tabulazione
clienti -> kubernetes -> Credentials
pudete ottene Secret chì avemu aduprà dopu.
Configurazione di Kubernetes
L'installazione di Kubernetes per l'autorizazione OIDC hè abbastanza triviale è micca qualcosa assai cumplicatu. Tuttu ciò chì duvete fà hè di mette u certificatu CA di u vostru servitore OIDC /etc/kubernetes/pki/oidc-ca.pem
è aghjunghje l'opzioni necessarii per kube-apiserver.
Per fà questu, aghjurnà /etc/kubernetes/manifests/kube-apiserver.yaml
nantu à tutti i vostri maestri:
...
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
...
È ancu aghjurnà a cunfigurazione di kubeadm in u cluster per ùn perde micca questi paràmetri durante l'aghjurnamentu:
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
...
Questu cumpleta a configurazione di Kubernetes. Pudete ripetiri sti passi in tutti i vostri clusters Kubernetes.
Autorizazione iniziale
Dopu sti passi, avete digià un cluster Kubernetes cun l'autorizazione OIDC cunfigurata. L'unicu puntu hè chì i vostri utilizatori ùn anu micca un cliente cunfiguratu, è ancu u so propiu kubeconfig. Per risolve stu prublema, avete bisognu di cunfigurà l'emissione automatica di kubeconfig à l'utilizatori dopu l'autorizazione successu.
Per fà questu, pudete aduprà applicazioni web speciali chì permettenu di autentificà l'utilizatore è dopu scaricate u kubeconfig finitu. Unu di i più convenienti hè
Per cunfigurà Kuberos, hè abbastanza per descriverà u mudellu per kubeconfig è eseguite cù i seguenti parametri:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Per più dettagli vede
Hè dinù pussibule à aduprà
U kubeconfig resultante pò esse verificatu nantu à u situ users[].user.auth-provider.config.id-token
da u vostru kubeconfig à una forma nantu à u situ è uttene a trascrizione subitu.
Configurazione RBAC
Quandu cunfigurà RBAC, pudete riferite sia à u nome d'utilizatore (campu name
in u token jwt) è per un gruppu di utilizatori (campu groups
in jwt token). Eccu un esempiu di stabilisce permessi per un gruppu 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
Più esempi per RBAC ponu esse truvati in
Impostazione di auth-proxy
Ci hè un prughjettu maravigliu
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
Source: www.habr.com