Šis raksts ir uzrakstīts, lai paplašinātu jau esošo
Šajā rakstā es jums pastāstīšu, kā instalēt un konfigurēt:
- atslēgas apmetnis ir atvērtā koda projekts. Kas nodrošina vienotu ieejas punktu lietojumprogrammām. Darbojas ar daudziem protokoliem, tostarp LDAP un OpenID, kas mūs interesē.
- atslēgu apmetnis vārtsargs - apgrieztā starpniekservera lietojumprogramma, kas ļauj integrēt autorizāciju, izmantojot Keycloak.
- ejā - lietojumprogramma, kas ģenerē kubectl konfigurāciju, ar kuru varat pieteikties un izveidot savienojumu ar Kubernetes API, izmantojot OpenID.
Kā atļaujas darbojas Kubernetes.
Mēs varam pārvaldīt lietotāju / grupu tiesības, izmantojot RBAC, par to jau ir izveidots virkne rakstu, es par to sīkāk nekavēšos. Problēma ir tā, ka jūs varat izmantot RBAC, lai ierobežotu lietotāju tiesības, bet Kubernetes neko nezina par lietotājiem. Izrādās, ka mums ir nepieciešams lietotāja piegādes mehānisms Kubernetes. Lai to izdarītu, Kuberntes OpenID pievienosim pakalpojumu sniedzēju, kas pateiks, ka šāds lietotājs patiešām pastāv, un pati Kubernetes viņam piešķirs tiesības.
Treniņš
- Jums būs nepieciešams Kubernetes klasteris vai minikube
- Active Directory
- Domēni:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Sertifikāts domēniem vai pašparakstīts sertifikāts
Es nekavēšos pie tā, kā izveidot pašparakstītu sertifikātu, jums ir jāizveido 2 sertifikāti, tas ir saknes (sertifikācijas iestāde) un aizstājējzīmju klients domēnam *.example.org
Pēc sertifikātu saņemšanas / izsniegšanas klients ir jāpievieno Kubernetes, šim nolūkam mēs tam izveidojam noslēpumu:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Tālāk mēs to izmantosim mūsu Ingress kontrolierim.
Atslēgvārpa uzstādīšana
Nolēmu, ka vienkāršākais veids tam ir izmantot gatavus risinājumus, proti, stūres diagrammas.
Instalējiet repozitoriju un atjauniniet to:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
Izveidojiet failu keycloak.yml ar šādu saturu:
keycoak.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
Federācijas iestatīšana
Pēc tam dodieties uz tīmekļa saskarni
Noklikšķiniet kreisajā stūrī Pievienojiet sfēru
Taustiņš
Vērtība
Vārds
Kubernetes
Rādīt Vārds
Kubernetes
Atspējot lietotāja e-pasta verifikāciju:
Klientu darbības jomas —> E-pasts —> Kartētāji —> E-pasts pārbaudīts (dzēst)
Mēs izveidojām federāciju, lai importētu lietotājus no ActiveDirectory, zemāk atstāšu ekrānuzņēmumus, es domāju, ka tas būs skaidrāks.
Lietotāju federācija —> Pievienot pakalpojumu sniedzēju... —> ldap
Federācijas iestatīšana
Ja viss ir kārtībā, tad pēc pogas nospiešanas Sinhronizēt visus lietotājus jūs redzēsit ziņojumu par veiksmīgu lietotāju importēšanu.
Tālāk mums ir jākartē mūsu grupas
Lietotāju federācija --> ldap_localhost --> Kartētāji --> Izveidot
Kartētāja izveide
Klienta iestatīšana
Ir nepieciešams izveidot klientu, Keycloak ziņā šī ir lietojumprogramma, kas tiks autorizēta no viņa. Svarīgos punktus ekrānuzņēmumā iezīmēšu sarkanā krāsā.
Klienti —> Izveidot
Klienta iestatīšana
Izveidosim skopu grupām:
Klientu darbības jomas —> Izveidot
Izveidojiet darbības jomu
Un izveidojiet viņiem kartētāju:
Klientu darbības jomas —> grupas —> Kartētāji —> Izveidot
Kartētājs
Pievienojiet mūsu grupu kartēšanu noklusējuma klientu tvērumam:
Klienti —> kubernetes —> Klientu darbības jomas —> Noklusējuma klientu darbības jomas
atlasīt grupas в Pieejamie klientu loki, nospiediet Pievienot atlasīto
Mēs iegūstam noslēpumu (un ierakstām to pavedienā), ko izmantosim autorizācijai Keycloak:
Klienti —> kubernetes —> akreditācijas dati —> slepenie dati
Tādējādi iestatīšana tiek pabeigta, taču man radās kļūda, kad pēc veiksmīgas autorizācijas saņēmu kļūdu 403.
Labot:
Klientu darbības jomas —> lomas —> Kartētāji —> Izveidot
Kartētājs
Skripta kods
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Kubernetes konfigurēšana
Mums ir jānorāda, kur atrodas mūsu saknes sertifikāts no vietnes un kur atrodas OIDC nodrošinātājs.
Lai to izdarītu, rediģējiet failu /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
...
Atjauniniet kubeadm konfigurāciju klasterī:
kubeadmconfig
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
...
Auth-starpniekservera iestatīšana
Varat izmantot Keycloak Gatekeeper, lai aizsargātu savu tīmekļa lietojumprogrammu. Papildus tam, ka šis apgrieztais starpniekserveris autorizēs lietotāju pirms lapas parādīšanas, tas arī nosūtīs informāciju par jums gala lietojumprogrammai galvenēs. Tādējādi, ja jūsu lietojumprogramma atbalsta OpenID, lietotājs tiek nekavējoties autorizēts. Apsveriet Kubernetes informācijas paneļa piemēru
Kubernetes informācijas paneļa instalēšana
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
vērtības_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Piekļuves tiesību iestatīšana:
Izveidosim ClusterRoleBinding, kas piešķirs klastera administratora tiesības (standarta ClusterRole cluster-admin) DataOPS grupas lietotājiem.
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
Instalējiet 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
vērtības_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"
Pēc tam, kad jūs mēģināt doties uz
eju uzstādīšana
Ērtības labad varat pievienot eju, kas ģenerēs kubectl konfigurācijas failu, ar kura palīdzību mēs nokļūsim Kubernetes zem mūsu lietotāja.
helm install --name gangway stable/gangway -f values_gangway.yaml
vērtības_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-----
Izskatās šādi. Ļauj nekavējoties lejupielādēt konfigurācijas failu un ģenerēt to, izmantojot komandu kopu:
Avots: www.habr.com