
Një udhëzues i shkurtër për mënyrën se si, duke përdorur Keycloak, mund të lidheni Kubernetes me serverin tuaj LDAP dhe të konfiguroni importimin e përdoruesve dhe grupeve. Kjo do të lejojë konfigurimin e RBAC për përdoruesit tuaj dhe përdorimin e auth-proxy për të mbrojtur Kubernetes Dashboard dhe aplikacione të tjera që nuk dinë të kryejnë autorizimin vetë.
Instalimi i Keycloak
Supozoni se 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, mund të krijoni përdorues direkt në ndërfaqen e Keycloak, ose të përdorni ofrues publik oidc (Google, Github, Gitlab), rezultati do të jetë pothuajse i njëjtë.
Së pari, le të instalojmë vetë Keycloak, instalimi mund të realizohet veçmas, si dhe direkt në klasterin Kubernetes; zakonisht, nëse keni disa klasterë Kubernetes, do të ishte më e lehtë ta instaloni veçmas. Nga ana tjetër, gjithmonë mund të përdorni dhe ta instaloni atë direkt në klasterin tuaj.
Për ruajtjen e të dhënave të Keycloak ju nevojitet një bazë të dhash. Në mënyrë default përdoret h2 (të dhënat ruhen lokalisht), por është e mundur gjithashtu të përdoret postgres, mysql ose mariadb.
Nëse vendosni të instaloni Keycloak veçmas, do të gjeni udhëzime më të detajuara në .
Konfigurimi i federatës
SĂ« pari, le tĂ« krijojmĂ« njĂ« realm tĂ« ri. Realm Ă«shtĂ« hapĂ«sira e aplikacionit tonĂ«. Ădo aplikacion mund tĂ« ketĂ« realm tĂ« vet me pĂ«rdorues dhe cilĂ«sime ndihmĂ«se tĂ« ndryshme. Master realm pĂ«rdoret nga vetĂ« Keycloak dhe nuk Ă«shtĂ« e drejtĂ« ta pĂ«rdorni atĂ« pĂ«r ndonjĂ« gjĂ« tjetĂ«r.
Klikoni Shto realm
Opsioni
Vlera
Emri
kubernetes
Emri i Shfaqjes
Kubernetes
Emri i Shfaqjes në HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes në mënyrë të paracaktuar kontrollon nëse emaili i përdoruesit është konfirmuar apo jo. Duke qenë se ne përdorim një server LDAP të paracaktuar, kjo kontrollim pothuajse gjithmonë do të kthejë false. Le ta çaktivizojmë shfaqjen e këtij parametri në Kubernetes:
KlientĂ«t scopes â> Email â> Mapper â> Email i verifikuar (Fshi)
Tani le të konfigurojmë federatën, për këtë kalojmë në:
Federata e pĂ«rdoruesve â> Shto ofrues⊠â> ldap
Ja një shembull konfigurimi për FreeIPA:
Opsioni
Vlera
Emri i Shfaqjes në Konsolë
freeipa.example.org
Të dhënat e ofruesit
Red Hat Directory Server
Atributi UUID të LDAP
ipauniqueid
URL e Lidhjes
ldaps://freeipa.example.org
DN e Përdoruesve
cn=users,cn=accounts,dc=example,dc=org
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Kredenciali i lidhjes
<password>
Lejo autentifikimin Kerberos:
në
Realm-i Kerberos:
EXAMPLE.ORG
Server Principal:
HTTP/freeipa.example.org@EXAMPLE.ORG
KeyTab:
/etc/krb5.keytab
Përdoruesi keycloak-svc duhet të krijohet paraprakisht në serverin tonë LDAP.
Në rastin e Active Directory, mjafton të zgjidhni Shitësi: Active Directory dhe cilësimet e nevojshme do të vendosen automatikisht në formular.
Klikoni Ruaj
Tani kalojmë te:
Federata e pĂ«rdoruesve â> freeipa.example.org â> Mapper â> Emri
Opsioni
Vlera
Attributi Ldap
givenName
Tani aktivizojmë mapimin e grupeve:
Federata e pĂ«rdoruesve â> freeipa.example.org â> Mapper â> Create
Opsioni
Vlera
Emri
groups
Lloji i mapuesit
group-ldap-mapper
LDAP Grupi DN
cn=groups,cn=accounts,dc=example,dc=org
Strategjia e Marrjes së Grupeve të Përdoruesve
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Me këtë mbaron konfigurimi i federatës, kalojmë te konfigurimi i klientit.
Konfigurimi i klientit
Do të krijojmë një klient të ri (aplikacioni që do të marrë përdoruesit nga Keycloak). Kalojmë:
KlientĂ«t â> Create
Opsioni
Vlera
Identifikuesi i Klientit
kubernetes
Lloji i Qasjes
konfidencial
URL e Rrënjës
http://kubernetes.example.org/
URI të Sakta për Ridrejtim
http://kubernetes.example.org/*
URL e Administratorit
http://kubernetes.example.org/
Po ashtu do të krijojmë një skop për grupet:
Skopet e Klientit â> Create
Opsioni
Vlera
Shabllon
Nuk ka shabllon
Emri
groups
Rruga e Plotë e Grupit
false
Dhe do të konfiguroni mapper për to:
Skopet e Klientit â> groups â> Mapper â> Create
Opsioni
Vlera
Emri
groups
Tipi i Mapper-it
Anëtarësia në Grup
Emri i Kërkesës për Token
groups
Tani na nevojitet të aktivizojmë mapimin e grupeve në skopin tonë të klientit:
KlientĂ«t â> kubernetes â> Skopet e Klientit â> Skopet Standard tĂ« Klientit
Zgjidhni groups në Skopet e Disponueshme të Klientit, klikoni Shto të zgjedhurat
Tani do të konfigurojmë autentifikimin e aplikacionit tonë, kalojmë te:
KlientĂ«t â> kubernetes
Opsioni
Vlera
Autorizimi Aktivizuar
ON
Klikojmë ruaj dhe me këtë përfundon konfigurimi i klientit, tani te skeda
KlientĂ«t â> kubernetes â> Kredencialet
do të jeni në gjendje të merrni Secret të cilin do ta përdorim më vonë.
Konfigurimi i Kubernetes
Konfigurimi i Kubernetes për autorizimin OIDC është mjaft i thjeshtë dhe nuk paraqet ndonjë sfidë të madhe. E vetmja gjë që ju nevojitet është të vendosni certifikatën CA të serverit tuaj OIDC në /etc/kubernetes/pki/oidc-ca.pem dhe të shtoni opsionet e nevojshme për kube-apiserver.
Për këtë, përditësoni /etc/kubernetes/manifests/kube-apiserver.yaml në të gjithë masterat 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
...Po ashtu, përditësoni konfigurimin e kubeadm në klaster, në mënyrë që të mos humbni këto parametra 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
...Me këtë, konfigurimi i Kubernetes përfundon. Ju mund të përsërisni këto veprime në të gjithë klasterët tuaj Kubernetes.
Autorizimi fillestar
Pas këtyre veprimeve, ju do të keni një kluster Kubernetes me autorizimin OIDC të konfiguruar. Një çështje është se përdoruesit tuaj nuk kanë ende një klient të konfiguruar si dhe një kubeconfig të vetin. Për të zgjidhur këtë problem, duhet të konfiguroni dhënien automatike të kubeconfig për përdoruesit pas autorizimit të suksesshëm.
Për këtë mund të përdorni aplikacione speciale në web, të cilat lejojnë autentifikimin e përdoruesit dhe më pas shkarkimin e kubeconfig të gatshëm. Një nga më të përshtatshmet është , i cili lejon të përshkruani të gjithë klustërat Kubernetes në një konfigurim dhe të kaloni lehtësisht mes tyre.
Për të konfiguruar Kuberos, mjafton të përshkruani një template për kubeconfig dhe të filloni me parametrat e mëposhtëm:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/templatePër më shumë informacion, shihni në Github.
Gjithashtu është e mundur të përdorni nëse dëshironi të kryeni autorizimin drejtpërdrejt në kompjuterin e përdoruesit. Në këtë rast, përdoruesit do të hapë një shfletues me formularin e autorizimit në localhost.
Kubeconfig i marrë mund të kontrollohet në faqen . Thjesht kopjoni vlerën users[].user.auth-provider.config.id-token nga kubeconfig juaj në formën në faqen e internetit dhe menjëherë merrni shpjegimin.
Konfigurimi i RBAC
Në konfigurimin e RBAC mund të referoheni si për emrin e përdoruesit (fusha emri në jwt-token), ashtu edhe për grupin e përdoruesve (fusha groups në jwt-token). Ja një shembull i konfigurimit të të drejtave për grupin 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-adminsMë shumë shembuj për RBAC mund të gjenden në
Konfigurimi i auth-proxy
Ka një projekt të shkëlqyer , i cili lejon mbrojtjen e çdo aplikacioni, duke i ofruar përdoruesit mundësinë për t'u autentikuar në serverin OIDC. Do t'ju tregoj si ta konfiguroni atë me shembullin e Kubernetes Dashboard:
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=
- --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: ClusterIPBurimi: habr.com
