Mallonga lernilo pri kiel vi povas uzi Keycloak por konekti Kubernetes al via LDAP-servilo kaj agordi la importadon de uzantoj kaj grupoj. Ĉi tio permesos al vi agordi RBAC por viaj uzantoj kaj uzi aŭth-proxy por protekti Kubernetes Dashboard kaj aliajn aplikojn, kiuj ne povas aŭtentikigi sin.
Instalado de Keycloak
Ni supozu, ke vi jam havas LDAP-servilon. Ĉi tio povus esti Active Directory, FreeIPA, OpenLDAP aŭ io ajn alia. Se vi ne havas LDAP-servilon, tiam principe vi povas krei uzantojn rekte en la interfaco Keycloak, aŭ uzi publikajn oidc-provizantoj (Google, Github, Gitlab), la rezulto estos preskaŭ la sama.
Antaŭ ĉio, ni instalu mem Keycloak.La instalado povas esti farita aparte aŭ rekte en Kubernetes-grupon.Kiel regulo, se vi havas plurajn Kubernetes-areojn, estus pli facile instali ĝin aparte. Aliflanke vi ĉiam povas uzi
Por konservi Keycloak-datumojn vi bezonos datumbazon. Defaŭlte estas h2
(ĉiuj datumoj estas konservitaj loke), sed ankaŭ eblas uzi ĝin postgres
, mysql
aŭ mariadb
.
Se vi ankoraŭ decidas instali Keycloak aparte, vi trovos pli detalajn instrukciojn en
Federacia aranĝo
Antaŭ ĉio, ni kreu novan regnon. Sfero estas la spaco de nia aplikaĵo. Ĉiu aplikaĵo povas havi sian propran regnon kun malsamaj uzantoj kaj rajtigaj agordoj. La Majstra regno estas uzata de Keycloak mem kaj estas malĝuste uzi ĝin por io alia.
Puŝi Aldonu regnon
eblo
valoro
Nomo
kubernetes
Montri Nomo
Kubernetes
HTML Vidira Nomo
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes defaŭlte kontrolas ĉu la retpoŝto de la uzanto estas konfirmita aŭ ne. Ĉar ni uzas nian propran LDAP-servilon, ĉi tiu kontrolo preskaŭ ĉiam revenos false
. Ni malŝaltu la reprezentadon de ĉi tiu opcio en Kubernetes:
Klientaj medioj -> retpoŝto -> Mapistoj -> Retpoŝto kontrolita (Forigi)
Nun ni starigu la federacion; por fari tion, iru al:
Uzantfederacio -> Aldoni provizanton... -> ldap
Jen ekzemplo de agordoj por FreeIPA:
eblo
valoro
Konzolo Afiŝnomo
freeipa.example.org
vendisto
Red Hat Directory Server
UUID LDAP-atributo
ipauniqueid
Konekto URL
ldaps://freeipa.example.org
Uzantoj DN
cn=users,cn=accounts,dc=example,dc=org
Ligu DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Ligi Akreditaĵon
<password>
Permesu Kerberos-aŭtentikigon:
on
Kerberos-Regno:
EXAMPLE.ORG
Rektoro de Servilo:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Uzanto keycloak-svc
devas esti kreita anticipe sur nia LDAP-servilo.
En la kazo de Active Directory, vi nur bezonas elekti Vendisto: Active Directory kaj la necesaj agordoj estos aŭtomate enmetitaj en la formularon.
Puŝi Savi
Nun ni pluiru:
Uzantfederacio -> freeipa.example.org -> Mapistoj -> unua Nomo
eblo
valoro
Ldap-atributo
givenName
Nun ni ebligu grupan mapadon:
Uzantfederacio -> freeipa.example.org -> Mapistoj -> krei
eblo
valoro
Nomo
groups
Mapper tipo
group-ldap-mapper
LDAP-grupoj DN
cn=groups,cn=accounts,dc=example,dc=org
Uzantgrupoj Reakiri Strategion
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Nun kiam la federacia agordo estas kompleta, ni pluiru al agordo de la kliento.
Klienta agordo
Ni kreu novan klienton (aplikaĵo kiu ricevos uzantojn de Keycloak). Ni pluiru:
klientoj -> krei
eblo
valoro
Klienta ID
kubernetes
Alira Tipo
confidenrial
Radika URL
http://kubernetes.example.org/
Validaj Alidirektaj URIoj
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Ni ankaŭ kreu amplekson por grupoj:
Kliento Scopes -> krei
eblo
valoro
template
No template
Nomo
groups
Plena grupa vojo
false
Kaj starigu mapigilon por ili:
Kliento Scopes -> grupoj -> Mapistoj -> krei
eblo
valoro
Nomo
groups
Mapper Tipo
Group membership
Tokena Aserto Nomo
groups
Nun ni devas ebligi mapan grupon en nia klienta amplekso:
klientoj -> kubernetoj -> Kliento Scopes -> Defaŭltaj Kliento-Ampleksoj
Elektu grupoj в Disponeblaj Kliento-Ampleksoj, premu Aldoni elektitan
Nun ni agordu la aŭtentikigon de nia aplikaĵo, iru al:
klientoj -> kubernetoj
eblo
valoro
Rajtigo Ebligita
ON
Ni premu savi kaj kun ĉi tio la klienta agordo estas finita, nun sur la langeto
klientoj -> kubernetoj -> Kreditoj
vi povas akiri sekreta kiun ni plu uzos.
Agordante Kubernetes
Agordi Kubernetes por OIDC-rajtigo estas sufiĉe bagatela kaj ne tre komplika. Ĉio, kion vi devas fari, estas enmeti la CA-atestilon de via OIDC-servilo /etc/kubernetes/pki/oidc-ca.pem
kaj aldonu la necesajn elektojn por kube-apiserver.
Por fari tion, ĝisdatigu /etc/kubernetes/manifests/kube-apiserver.yaml
sur ĉiuj viaj mastroj:
...
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
...
Ankaŭ, ĝisdatigu la kubeadm-agordon en la areto por ne perdi ĉi tiujn agordojn dum ĝisdatigo:
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
...
Ĉi tio kompletigas la aranĝon de Kubernetes. Vi povas ripeti ĉi tiujn paŝojn tra ĉiuj viaj Kubernetes-aretoj.
Komenca rajtigo
Post ĉi tiuj paŝoj, vi jam havos Kubernetes-grupon kun agordita OIDC-rajtigo. La sola afero estas, ke viaj uzantoj ankoraŭ ne havas agorditan klienton aŭ sian propran kubeconfig. Por solvi ĉi tiun problemon, vi devas agordi aŭtomatan distribuadon de kubeconfig al uzantoj post sukcesa rajtigo.
Por fari tion, vi povas uzi specialajn TTT-aplikaĵojn, kiuj permesas vin aŭtentikigi la uzanton kaj poste elŝuti la pretan kubeconfig. Unu el la plej oportunaj estas
Por agordi Kuberos, simple priskribu la ŝablonon por kubeconfig kaj rulu ĝin kun la sekvaj parametroj:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Por pli detalaj informoj vidu
Ankaŭ eblas uzi
La rezulta kubeconfig povas esti kontrolita en la retejo users[].user.auth-provider.config.id-token
de via kubeconfig al la formularo en la retejo kaj tuj ricevu transskribon.
Agordi RBAC
Kiam vi agordas RBAC, vi povas rilati al ambaŭ la uzantnomo (kampo name
en la jwt-ĵetono), kaj per uzantgrupo (kampo groups
en jwt-ĵetono). Jen ekzemplo de starigo de rajtoj por grupo 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
Pliaj ekzemploj por RBAC troveblas en
Agordi aŭth-proxy
Estas mirinda projekto
panelo-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
fonto: www.habr.com