Një tutorial i shkurtër se si mund të përdorni Keycloak për të lidhur Kubernetes me serverin tuaj LDAP dhe për të konfiguruar importin e përdoruesve dhe grupeve. Kjo do t'ju lejojë të konfiguroni RBAC për përdoruesit tuaj dhe të përdorni auth-proxy për të mbrojtur Panelin e Kubernetes dhe aplikacione të tjera që nuk mund të vërtetohen vetë.
Instalimi i tastierës
Le të supozojmë se ju tashmë keni një server LDAP. Kjo mund të jetë Active Directory, FreeIPA, OpenLDAP ose ndonjë gjë tjetër. Nëse nuk keni një server LDAP, atëherë në parim mund të krijoni përdorues direkt në ndërfaqen Keycloak, ose të përdorni ofruesit publikë oidc (Google, Github, Gitlab), rezultati do të jetë pothuajse i njëjtë.
Para së gjithash, le të instalojmë vetë Keycloak. Instalimi mund të kryhet veçmas ose direkt në një grup Kubernetes. Si rregull, nëse keni disa grupe Kubernetes, do të ishte më e lehtë ta instaloni veçmas. Nga ana tjetër mund ta përdorni gjithmonë
Për të ruajtur të dhënat e Keycloak do t'ju duhet një bazë të dhënash. Parazgjedhja është h2
(të gjitha të dhënat ruhen në nivel lokal), por është gjithashtu e mundur të përdoren postgres
, mysql
ose mariadb
.
Nëse ende vendosni të instaloni Keycloak veçmas, do të gjeni udhëzime më të hollësishme në
Organizimi i Federatës
Para së gjithash, le të krijojmë një mbretëri të re. Realm është hapësira e aplikacionit tonë. Çdo aplikacion mund të ketë sferën e vet me përdorues të ndryshëm dhe cilësime autorizimi. Sfera Master përdoret nga vetë Keycloak dhe është e gabuar ta përdorësh atë për çdo gjë tjetër.
shtyp Shto sferën
Alternativë
vlerë
Emër
kubernetes
Display Emri
Kubernetes
Emri i shfaqur HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes si parazgjedhje kontrollon nëse emaili i përdoruesit është konfirmuar apo jo. Meqenëse ne përdorim serverin tonë LDAP, ky kontroll pothuajse gjithmonë do të kthehet false
. Le të çaktivizojmë përfaqësimin e këtij opsioni në Kubernetes:
Fushëveprimi i klientit -> Email -> Hartuesit -> Email-i u verifikua (Fshi)
Tani le të krijojmë federatën; për ta bërë këtë, shkoni te:
Federata e përdoruesve -> Shto ofrues… -> ldap
Këtu është një shembull i cilësimeve për FreeIPA:
Alternativë
vlerë
Emri i ekranit të konsolës
freeipa.example.org
Shitës
Red Hat Directory Server
Atributi UUID LDAP
ipauniqueid
URL-ja e lidhjes
ldaps://freeipa.example.org
DN e përdoruesve
cn=users,cn=accounts,dc=example,dc=org
Lidh DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Lidh Kredencialin
<password>
Lejo vërtetimin e Kerberos:
on
Mbretëria e Kerberos:
EXAMPLE.ORG
Kryesuesi i serverit:
HTTP/[email protected]
Tabela e tastierës:
/etc/krb5.keytab
përdorues keycloak-svc
duhet të krijohen paraprakisht në serverin tonë LDAP.
Në rastin e Active Directory, ju vetëm duhet të zgjidhni Shitësi: Active Directory dhe cilësimet e nevojshme do të futen në formular automatikisht.
shtyp Ruaje
Tani le të vazhdojmë:
Federata e përdoruesve -> freeipa.example.org -> Hartuesit -> Emri
Alternativë
vlerë
Atributi ldap
givenName
Tani le të aktivizojmë hartën e grupit:
Federata e përdoruesve -> freeipa.example.org -> Hartuesit -> Krijo
Alternativë
vlerë
Emër
groups
Lloji i hartës
group-ldap-mapper
Grupet LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Strategjia e rimarrjes së grupeve të përdoruesve
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Tani që konfigurimi i federatës ka përfunduar, le të kalojmë te konfigurimi i klientit.
Konfigurimi i klientit
Le të krijojmë një klient të ri (një aplikacion që do të marrë përdoruesit nga Keycloak). Le të vazhdojmë:
Klientët -> Krijo
Alternativë
vlerë
ID e klientit
kubernetes
Lloji i hyrjes
confidenrial
URL-ja e rrënjës
http://kubernetes.example.org/
URI-të e vlefshme të ridrejtimit
http://kubernetes.example.org/*
URL e administratorit
http://kubernetes.example.org/
Le të krijojmë gjithashtu një hapësirë për grupet:
Fushat e Klientit -> Krijo
Alternativë
vlerë
Shabllon
No template
Emër
groups
Rruga e plotë e grupit
false
Dhe vendosni një hartë për ta:
Fushat e Klientit -> Grupe -> Hartuesit -> Krijo
Alternativë
vlerë
Emër
groups
Lloji i hartuesit
Group membership
Emri i Kërkesës Token
groups
Tani duhet të aktivizojmë grupin e hartës në fushën e klientit tonë:
Klientët -> Kubernetes -> Fushat e Klientit -> Fushat e paracaktuara të klientit
zgjedh Grupe в Fushat e disponueshme të klientit, shtypni Shto të zgjedhurit
Tani le të konfigurojmë vërtetimin e aplikacionit tonë, shkoni te:
Klientët -> Kubernetes
Alternativë
vlerë
Autorizimi u aktivizua
ON
Le të shtypim ruaj dhe me këtë kompletohet konfigurimi i klientit, tani në skedën
Klientët -> Kubernetes -> letra kredenciale
ju mund të merrni Sekret të cilat do t'i përdorim më tej.
Konfigurimi i Kubernetes
Vendosja e Kubernetes për autorizimin OIDC është mjaft e parëndësishme dhe jo shumë e komplikuar. E tëra çfarë ju duhet të bëni është të vendosni certifikatën CA të serverit tuaj OIDC /etc/kubernetes/pki/oidc-ca.pem
dhe shtoni opsionet e nevojshme për kube-apiserver.
Për ta bërë këtë, përditësoni /etc/kubernetes/manifests/kube-apiserver.yaml
mbi të gjithë zotërit tuaj:
...
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
...
Gjithashtu, përditësoni konfigurimin kubeadm në grup në mënyrë që të mos humbni këto cilësime gjatë përditësimit:
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
...
Kjo përfundon konfigurimin e Kubernetes. Ju mund t'i përsërisni këto hapa në të gjitha grupimet tuaja Kubernetes.
Autorizimi fillestar
Pas këtyre hapave, do të keni tashmë një grup Kubernetes me autorizim të konfiguruar OIDC. E vetmja gjë është që përdoruesit tuaj nuk kanë ende një klient të konfiguruar ose kubeconfig të tyre. Për të zgjidhur këtë problem, duhet të konfiguroni shpërndarjen automatike të kubeconfig te përdoruesit pas autorizimit të suksesshëm.
Për ta bërë këtë, mund të përdorni aplikacione të veçanta në internet që ju lejojnë të vërtetoni përdoruesin dhe më pas të shkarkoni kubeconfig të gatshëm. Një nga më të përshtatshmet është
Për të konfiguruar Kuberos, thjesht përshkruani shabllonin për kubeconfig dhe ekzekutoni atë me parametrat e mëposhtëm:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Për informacion më të detajuar shihni
Është gjithashtu e mundur të përdoret
Kubeconfig që rezulton mund të kontrollohet në faqen e internetit users[].user.auth-provider.config.id-token
nga kubeconfig juaj në formularin në faqen e internetit dhe merrni menjëherë një transkript.
Vendosja e RBAC
Kur konfiguroni RBAC, mund t'i referoheni të dy emrit të përdoruesit (fusha name
në shenjën jwt), dhe për grup përdoruesish (fushë groups
në shenjën jwt). Këtu është një shembull i konfigurimit të të drejtave për një 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
Më shumë shembuj për RBAC mund të gjenden në
Vendosja e përfaqësuesit të autorizuar
Ka një projekt të mrekullueshëm
pulti-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
Burimi: www.habr.com