Ky kjo artikull është shkruar me qëllimin për të zgjeruar tashmë , por tregon për karakteristikat e lidhjes pikërisht me Microsoft ActiveDirectory, si dhe e plotëson atë.
Në këtë artikull do të tregoj se si të instaloni dhe konfiguroni:
- Keycloak — është një projekt me kod të hapur. Që siguron një pikë të vetme hyrjeje për aplikacionet. Punon me shumë protokolle, përfshirë LDAP dhe OpenID të cilat na interesojnë.
- Keycloak gatekeeper — është një aplikacion me proxy të reversuar që lejon integrimin e autorizimit përmes Keycloak.
- Gangway — është një aplikacion që gjeneron konfigurimin për kubectl me të cilin përmes OpenID mund të jeni të autorizuar dhe të lidheni me Kubernetes API.
Si funksionojnë të drejtat në Kubernetes.
Menaxhim i të drejtave të përdoruesve/grupeve mund të bëhet përmes RBAC, për të cilin janë krijuar tashmë shumë artikuj, nuk do të ndalem në këtë. Problemi është që mund të përdorni RBAC për të kufizuar të drejtat e përdoruesve, por Kubernetes nuk di asgjë për përdoruesit. Kështu, ne kemi nevojë për një mekanizëm që sjell përdoruesin në Kubernetes. Për këtë, do të shtojmë një ofrues OpenID në Kubernetes, i cili do të bëjë të ditur që ai përdorues vërtet ekziston, ndërsa të drejtat do t'i lëhtësojë vetë Kubernetes.
Përgatitja
- Do t'ju nevojitet një klaster Kubernetes ose minikube
- Active Directory
- Domainet:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Certifikata për domainet ose një certifikatë të vetë-nënshkruar
Nuk do të ndalem në mënyrën si të krijoni certifikata të vetë-nënshkruar, duhet të krijoni 2 certifikata, një root (Qendra e Certifikimit) dhe një certifikatë klienti wildcard për domenin *.example.org
Pas marrjes/se shkrimit të certifikatave, certifikata klient duhet të shtohet në Kubernetes, për këtë krijojmë një sekret:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pemMë tej do ta përdorim atë për kontrolerin tonë të Ingress
Instalimi i Keycloak
Kam vendosur se është më e lehtë të përdorim zgjidhje të gatshme për këtë, sidomos helm chart-et.
Shtojmë repository-n dhe e përditësojmë atë:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo updateKrijojmë një skedar keycloak.yml me përmbajtjen e mëposhtme:
keycloak.yml
keycloak:
# Emri i administratorit
username: "test_admin"
# Fjalëkalimi i administratorit
password: "admin"
# Këto flamuj janë të nevojshëm për të lejuar ngarkimin e skripteve në Keycloak drejtpërdrejt përmes ndërfaqes web. Kjo na nevojitet
për të riparuar një bug, për të cilin do flasim më poshtë.
extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled"
# Aktivizojmë ingress, tregojmë emrin e hostit dhe certifikatën e cila e ruajmë më parë në sekretet
ingress:
enabled: true
path: /
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/affinity: cookie
hosts:
- keycloak.example.org
tls:
- hosts:
- keycloak.example.org
secretName: tls-keycloak
# Keycloak kërkon një bazë të dhënash për funksionimin e tij, për qëllime testimi unë do ta instaloj Postgresql direkt në Kubernetes, në prodhim kështu nuk është më mirë të bëhet!
persistence:
deployPostgres: true
dbVendor: postgres
postgresql:
postgresUser: keycloak
postgresPassword: ""
postgresDatabase: keycloak
persistence:
enabled: trueKonfigurimi i federatës
Më pas hyjmë në ndërfaqen e webit
Në këndin e majtë shtypim Shto realm
Key
Vlera
Emri
kubernetes
Emri i Shfaqjes
Kubernetes
Çaktivizojmë verifikimin e konfirmimit të emailit të përdoruesit:
Client scopes —> Email —> Mappers —> Email verified (Fshi)
Konfiguroni federatën për importimin e përdoruesve nga ActiveDirectory, do të lëviz poshtë disa foto mendoj se kështu do të jetë më e qartë.
User federation —> Shto ofrues… —> ldap
Konfigurimi i federatës

Nëse gjithçka shkon mirë, pas klikimit të butonit Synchronize all users do të shihni një mesazh për importimin e suksesshëm të përdoruesve.
Më pas duhet të mapojmë grupet tona
User federation —> ldap_localhost —> Mappers —> Krijo
Krijimi i mapper-it
Konfigurimi i klientit
Duhet të krijoni një klient, në konceptet e Keycloak, ky është aplikacioni që do të autorizohet prej tij. Pikat e rëndësishme do t'i theksoj në skenën e kuqe.
Clients —> Krijo
Konfigurimi i klientit
Do të krijojmë një skoup për grupet:
Client Scopes —> Krijo
Krijimi i skoupit
Dhe do të konfiguroni mapper për to:
Client Scopes —> groups —> Mappers —> Krijo
Mapper
Shtojmë mapimin e grupeve tona në Default Client Scopes:
Clients —> kubernetes —> Client Scopes —> Default Client Scopes
Zgjidhni groups në Skopet e Disponueshme të Klientit, klikoni Shto të zgjedhurat
Marrim sekretin (dhe e shkruajmë diku) që do të përdorim për autorizimin në Keycloak:
Clients —> kubernetes —> Credentials —> Secret
Me këtë përfundon konfigurimi, por kam pasur një gabim kur pas autorizimit të suksesshëm merrja një gabim 403. .
Rregullimi:
Client Scopes —> roles —> Mappers —> Krijo
Mapper
Kodi i skriptit
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Konfigurimi i Kubernetes
Na nevojitet të tregojmë ku ndodhet certifikata jonë rrënjësore të faqes dhe ku ndodhet ofruesi OIDC.
Për këtë redaktojmë skedarin /etc/kubernetes/manifests/kube-apiserver.yaml
kube-apiserver.yaml
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
Diftojmë konfigurimin e kubeadm në klaster:
kubeadm config
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
Konfigurimi i auth-proxy
Për mbrojtjen e aplikacionit tuaj web mund të përdorni keycloak gatekeeper. Përveç faktit që ky reverse proxy do të autorizojë përdoruesin përpara se të tregojë faqen, ai do të kalojë gjithashtu informacionin tuaj në aplikacionin përfundimtar në headers. Kështu që nëse aplikacioni juaj mbështet OpenID, përdoruesi do të autorizohet menjëherë. Le ta shqyrtojmë duke marrë si shembull Kubernetes Dashboard
Instalimi i Kubernetes Dashboard
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
values_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Konfigurimi i të drejtave të qasjes:
Do të krijojmë ClusterRoleBinding që do të japë të drejta admin të klasterit (standard ClusterRole cluster-admin) për përdoruesit që janë anëtarë të grupit DataOPS.
kubectl apply -f rbac.yaml
rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dataops_group
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: DataOPS
Instalimi i keycloak gatekeeper:
helm repo add gabibbo97 https://gabibbo97.github.io/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml
values_proxy.yaml
# Включаем ingress
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
path: /
hosts:
- kubernetes-dashboard.example.org
tls:
- secretName: tls-keycloak
hosts:
- kubernetes-dashboard.example.org
# Говорим где мы будем авторизовываться у OIDC провайдера
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
# Имя клиента которого мы создали в Keycloak
ClientID: "kubernetes"
# Secret который я просил записать
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Куда перенаправить в случае успешной авторизации. Формат <SCHEMA>://<SERVICE_NAME>.><NAMESAPCE>.<CLUSTER_NAME>
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
# Пропускаем проверку сертификата, если у нас самоподписанный
skipOpenidProviderTlsVerify: true
# Настройка прав доступа, пускаем на все path если мы в группе DataOPS
rules:
- "uri=/*|groups=DataOPS"
Pas kësaj, në përpjekjen për t'u regjistruar në , do të ndodhë një ridrejtim në Keycloak dhe në rastin e një autorizimi të suksesshëm do të arrijmë në Dashboard duke qenë të kyçur.
Instalimi i gangway
Për lehtësi, mund të shtoni gangway i cili do të gjenerojë një skedar konfigursi për kubectl, përmes të cilit ne tashmë nën përdoruesin tonë do të kalojmë në Kubernetes.
helm install --name gangway stable/gangway -f values_gangway.yaml
values_gangway.yaml
gangway:
# Emri i rastësishëm i klasterit
clusterName: "my-k8s"
# Ku kemi ofruesin OIDC
authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
# Teorikisht, këtu mund të shtojmë grupe që kemi mapuar
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
# Emri i klientit
clientID: "kubernetes"
# Sekreti
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Nëse lëvizim vlerën e paracaktuar, emri i përdoruesit do të marrë <b>Emri i parë</b> <b>Emri i dytë</b>, dhe kur "sub" emri i tij
usernameClaim: "sub"
# Emri i domenit ose adresa IP e serverit API
apiServerURL: "https://192.168.99.111:8443"
# Aktivizojmë Ingress
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
path: /
hosts:
- gangway.example.org
tls:
- secretName: tls-keycloak
hosts:
- gangway.example.org
# Nëse përdorim një certifikatë të vetë-nënshkruar, atëherë duhet ta tregojmë atë (certifikatën e korrespondentit)
trustedCACert: |-
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzMwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
-----END CERTIFICATE-----
Duket diku si kjo. Lejon si shkarkimin e menjëhershëm të skedarit të konfiguracionit ashtu edhe formimin e tij duke përdorur një set komandash:

Burimi: habr.com
