Un breu tutorial sobre com podeu utilitzar Keycloak per connectar Kubernetes al vostre servidor LDAP i configurar la importació d'usuaris i grups. Això us permetrà configurar RBAC per als vostres usuaris i utilitzar el servidor intermediari d'autenticació per protegir el tauler de control de Kubernetes i altres aplicacions que no es poden autenticar.
Instal·lació de Keycloak
Suposem que ja teniu un servidor LDAP. Això podria ser Active Directory, FreeIPA, OpenLDAP o qualsevol altra cosa. Si no teniu un servidor LDAP, en principi podeu crear usuaris directament a la interfície Keycloak o utilitzar proveïdors públics d'oidc (Google, Github, Gitlab), el resultat serà gairebé el mateix.
En primer lloc, instal·lem el propi Keycloak. La instal·lació es pot fer per separat o directament en un clúster de Kubernetes. Per regla general, si teniu diversos clústers de Kubernetes, seria més fàcil instal·lar-lo per separat. D'altra banda sempre es pot utilitzar
Per emmagatzemar les dades de Keycloak necessitareu una base de dades. Per defecte és h2
(totes les dades s'emmagatzemen localment), però també es poden utilitzar postgres
, mysql
o mariadb
.
Si encara decidiu instal·lar Keycloak per separat, trobareu instruccions més detallades a
Configuració de la federació
Primer de tot, anem a crear un nou regne. Realm és l'espai de la nostra aplicació. Cada aplicació pot tenir el seu propi regne amb diferents usuaris i configuracions d'autorització. El regne Mestre és utilitzat pel mateix Keycloak i és incorrecte utilitzar-lo per a qualsevol altra cosa.
Empenta Afegeix regne
opció
Valor
Nom
kubernetes
Mostra nom
Kubernetes
Nom de visualització HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes comprova per defecte si el correu electrònic de l'usuari està confirmat o no. Com que utilitzem el nostre propi servidor LDAP, aquesta comprovació gairebé sempre tornarà false
. Desactivem la representació d'aquesta opció a Kubernetes:
Àmbits del client -> Email -> Cartografiadors -> Correu electrònic verificat (Suprimeix)
Ara configurem la federació; per fer-ho, aneu a:
Federació d'usuaris -> Afegeix un proveïdor... -> ldap
Aquí teniu un exemple de configuració de FreeIPA:
opció
Valor
Nom de visualització de la consola
freeipa.example.org
Venedor
Red Hat Directory Server
UUID Atribut LDAP
ipauniqueid
URL de connexió
ldaps://freeipa.example.org
Usuaris DN
cn=users,cn=accounts,dc=example,dc=org
Enllaçar DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Enllaça la credencial
<password>
Permet l'autenticació Kerberos:
on
Regne de Kerberos:
EXAMPLE.ORG
Principal del servidor:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Usuari keycloak-svc
s'han de crear amb antelació al nostre servidor LDAP.
En el cas d'Active Directory, només cal que seleccioneu Proveïdor: Active Directory i la configuració necessària s'introduirà al formulari automàticament.
Empenta Desar
Ara seguim:
Federació d'usuaris -> freeipa.example.org -> Cartografiadors -> Nom
opció
Valor
Atribut Ldap
givenName
Ara activem el mapeig de grups:
Federació d'usuaris -> freeipa.example.org -> Cartografiadors -> Create
opció
Valor
Nom
groups
Tipus de mapeador
group-ldap-mapper
DN de grups LDAP
cn=groups,cn=accounts,dc=example,dc=org
Estratègia de recuperació de grups d'usuaris
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Ara que s'ha completat la configuració de la federació, passem a configurar el client.
Configuració del client
Creem un client nou (una aplicació que rebrà usuaris de Keycloak). Posem-nos en marxa:
Clientela -> Create
opció
Valor
Identificador de client
kubernetes
Tipus d'accés
confidenrial
URL arrel
http://kubernetes.example.org/
URIs de redirecció vàlids
http://kubernetes.example.org/*
URL de l'administrador
http://kubernetes.example.org/
També creem un àmbit per a grups:
Àmbits del client -> Create
opció
Valor
Plantilla
No template
Nom
groups
Ruta completa del grup
false
I configureu-los un mapeador:
Àmbits del client -> grups -> Cartografiadors -> Create
opció
Valor
Nom
groups
Tipus de mapeador
Group membership
Nom de la reclamació del testimoni
groups
Ara hem d'habilitar el grup de mapes al nostre àmbit de client:
Clientela -> kubernets -> Àmbits del client -> Àmbits de client predeterminats
seleccionar grups в Àmbits de client disponibles, premeu Afegeix seleccionats
Ara configurem l'autenticació de la nostra aplicació, aneu a:
Clientela -> kubernets
opció
Valor
Autorització activada
ON
Premem estalviar i amb això s'ha completat la configuració del client, ara a la pestanya
Clientela -> kubernets -> cartes credencials
pots aconseguir Secret que utilitzarem més endavant.
Configuració de Kubernetes
Configurar Kubernetes per a l'autorització OIDC és bastant trivial i no gaire complicat. Tot el que heu de fer és posar el certificat CA del vostre servidor OIDC /etc/kubernetes/pki/oidc-ca.pem
i afegiu les opcions necessàries per al kube-apiserver.
Per fer-ho, actualitzeu /etc/kubernetes/manifests/kube-apiserver.yaml
a tots els teus mestres:
...
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
...
A més, actualitzeu la configuració de kubeadm al clúster per no perdre aquesta configuració en actualitzar:
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
...
Això completa la configuració de Kubernetes. Podeu repetir aquests passos a tots els vostres clústers de Kubernetes.
Autorització inicial
Després d'aquests passos, ja tindreu un clúster de Kubernetes amb autorització OIDC configurada. L'única cosa és que els vostres usuaris encara no tenen un client configurat ni el seu propi kubeconfig. Per resoldre aquest problema, heu de configurar la distribució automàtica de kubeconfig als usuaris després de l'autorització correcta.
Per fer-ho, podeu utilitzar aplicacions web especials que us permeten autenticar l'usuari i després descarregar el kubeconfig ja fet. Un dels més convenients és
Per configurar Kuberos, només cal que descrigui la plantilla per a kubeconfig i executeu-la amb els paràmetres següents:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Per a informació més detallada vegeu
També és possible utilitzar-lo
El kubeconfig resultant es pot comprovar al lloc web users[].user.auth-provider.config.id-token
del vostre kubeconfig al formulari del lloc web i rebeu immediatament una transcripció.
Configuració de RBAC
Quan configureu RBAC, podeu fer referència tant al nom d'usuari (camp name
al testimoni jwt) i per grup d'usuaris (camp groups
en senyal jwt). Aquí teniu un exemple de configuració de drets per a un grup 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
Es poden trobar més exemples de RBAC a
configuració d'auth-proxy
Hi ha un projecte meravellós
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
Font: www.habr.com