Hierdie artikel is geskryf met die doel om die reeds uit te brei
In hierdie artikel sal ek jou vertel hoe om te installeer en op te stel:
- Sleutelmantel is 'n oopbronprojek. Wat 'n enkele toegangspunt vir toepassings bied. Werk met baie protokolle, insluitend LDAP en OpenID, wat vir ons van belang is.
- Sleutelmantel hekwagter - 'n omgekeerde proxy-toepassing waarmee u magtiging via Keycloak kan integreer.
- Gangpad — 'n toepassing wat 'n konfigurasie vir kubectl genereer waarmee u via OpenID kan aanmeld en aan die Kubernetes API kan koppel.
Hoe toestemmings werk in Kubernetes.
Ons kan gebruikers-/groepregte bestuur deur RBAC te gebruik, 'n klomp artikels is reeds hieroor geskep, ek sal nie in detail hieroor uitwei nie. Die probleem is dat jy RBAC kan gebruik om gebruikersregte te beperk, maar Kubernetes weet niks van gebruikers nie. Dit blyk dat ons 'n gebruikersafleweringsmeganisme in Kubernetes benodig. Om dit te doen, sal ons 'n verskaffer by Kuberntes OpenID voeg, wat sal aandui dat so 'n gebruiker werklik bestaan, en Kubernetes self sal hom regte gee.
Opleiding
- Jy sal 'n Kubernetes-kluster of minikube benodig
- Active Directory
- Domeine:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Sertifikaat vir domeine of self-ondertekende sertifikaat
Ek gaan nie in detail in oor hoe om 'n self-ondertekende sertifikaat te skep nie; jy moet 2 sertifikate skep, dit is die wortel (Sertifiseringsowerheid) en die kliënt-jokerteken vir die *.example.org-domein
Nadat u die sertifikate ontvang/uitgeskryf het, moet u die kliëntsertifikaat by Kubernetes voeg; om dit te doen, skep 'n geheim daarvoor:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Volgende sal ons dit gebruik vir ons Ingress-beheerder
Sleutelmantel installasie
Ek het besluit dat die maklikste manier is om gereedgemaakte oplossings hiervoor te gebruik, naamlik stuurkaarte.
Installeer die bewaarplek en werk dit op:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
Skep 'n keycloak.yml-lêer met die volgende inhoud:
keycloak.yml
keycloak:
# Имя администратора
username: "test_admin"
# Пароль администратор
password: "admin"
# Эти флаги нужны что бы позволить загружать в Keycloak скрипты прямо через web морду. Это нам
понадобиться что бы починить один баг, о котором ниже.
extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled"
# Включаем ingress, указываем имя хоста и сертификат который мы предварительно сохранили в secrets
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 для своей работы требует базу данных, в тестовых целях я разворачиваю Postgresql прямо в Kuberntes, в продакшене так лучше не делать!
persistence:
deployPostgres: true
dbVendor: postgres
postgresql:
postgresUser: keycloak
postgresPassword: ""
postgresDatabase: keycloak
persistence:
enabled: true
Federasie opstelling
Gaan dan na die webkoppelvlak
Klik in die linkerhoek Voeg ryk by
Sleutel
waarde
Naam
goewerneur
Display Naam
Kubernetes
Deaktiveer gebruiker-e-posbevestigingkontrole:
Kliëntomvang —> E-pos —> Mappers —> E-pos geverifieer (Vee uit)
Ons stig 'n federasie om gebruikers vanaf ActiveDirectory in te voer, ek sal skermkiekies hieronder laat, ek dink dit sal duideliker wees.
Gebruikersfederasie —> Voeg verskaffer by... —> ldap
Federasie opstelling
As alles in orde is, dan nadat u die knoppie gedruk het Sinkroniseer alle gebruikers Jy sal 'n boodskap sien wat die suksesvolle invoer van gebruikers aandui.
Volgende moet ons ons groepe karteer
Gebruikersfederasie -> ldap_localhost -> Mappers -> Skep
Die skep van 'n karteerder
Kliënt opstelling
U moet 'n kliënt skep, in terme van Keycloak is dit 'n toepassing wat daardeur gemagtig sal word. Ek sal belangrike punte in rooi in die skermkiekie uitlig.
Kliënte -> Skep
Kliënt opstelling
Kom ons skep 'n scoupe vir groepe:
Kliëntbestekke -> Skep
Die skep van 'n omvang
En stel 'n karteerder vir hulle op:
Kliëntbestekke -> groepe -> Mappers -> Skep
Mapper
Ons voeg kartering van ons groepe by verstekkliëntbestekke:
Kliënte -> kubernetes -> Kliëntbestekke -> Standaardkliëntbestekke
Kies groepe в Beskikbare kliëntbestekke, pers Voeg geselekteerde by
Ons kry die geheim (en skryf dit iewers neer) wat ons sal gebruik vir magtiging in Keycloak:
Kliënte -> kubernetes -> Geloofsbriewe -> Geheim
Dit voltooi die opstelling, maar ek het 'n fout gehad toe ek, na suksesvolle magtiging, 'n 403-fout ontvang het.
Maak reg:
Kliëntbestekke -> rolle -> Kaartmakers -> Skep
Kaartmaker
Skrip kode
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Konfigureer Kubernetes
Ons moet aandui waar ons wortelsertifikaat vanaf die webwerf geleë is, en waar die OIDC-verskaffer geleë is.
Om dit te doen, wysig die lêer /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
...
Dateer kubeadm-opstelling in die groep op:
kubeadm konfigurasie
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
...
Stel magtiging-instaanbediener
Om jou webtoepassing te beskerm, kan jy keycloak-hekwagter gebruik. Benewens die feit dat hierdie omgekeerde instaanbediener die gebruiker sal magtig voordat die bladsy gewys word, sal dit ook inligting oor jou in die opskrifte na die eindtoepassing oordra. Dus, as jou toepassing OpenID ondersteun, word die gebruiker onmiddellik gemagtig. Kom ons kyk na die voorbeeld van Kubernetes Dashboard
Installeer Kubernetes Dashboard
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
waardes_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Stel toegangsregte op:
Kom ons skep 'n ClusterRoleBinding wat cluster admin regte sal gee (standaard ClusterRole cluster-admin) vir gebruikers in die DataOPS groep.
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
Installeer keycloak hekwagter:
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
waardes_instaanbediener.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"
Daarna, wanneer jy probeer om aan te meld by
Gangpad installasie
Gerieflikheidshalwe kan u 'n gang byvoeg wat 'n konfigurasielêer vir kubectl sal genereer, met behulp waarvan ons in Kubernetes onder ons gebruiker sal kom.
helm install --name gangway stable/gangway -f values_gangway.yaml
waardes_gangway.yaml
gangway:
# Произвольное имя кластера
clusterName: "my-k8s"
# Где у нас 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"
# Теоритически сюда можно добавить groups которые мы замапили
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
# Имя клиента
clientID: "kubernetes"
# Секрет
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Если оставить дефолтное значние, то за имя пользователя будет братья <b>Frist name</b> <b>Second name</b>, а при "sub" его логин
usernameClaim: "sub"
# Доменное имя или IP адресс API сервера
apiServerURL: "https://192.168.99.111:8443"
# Включаем 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
# Если используем самоподписанный сертификат, то его(открытый корневой сертификат) надо указать.
trustedCACert: |-
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
-----END CERTIFICATE-----
Dit lyk so iets. Laat jou toe om onmiddellik 'n konfigurasielêer af te laai en dit te genereer deur 'n stel opdragte te gebruik:
Bron: will.com