Ang artikulong ito ay isinulat upang palawakin ang na , ngunit pinag-uusapan ang mga tampok ng bundle sa Microsoft ActiveDirectory, at pinupunan din ito.
Sa artikulong ito sasabihin ko sa iyo kung paano i-install at i-configure:
- keycloak ay isang open source na proyekto. Na nagbibigay ng isang punto ng pagpasok para sa mga aplikasyon. Gumagana sa maraming protocol, kabilang ang LDAP at OpenID kung saan kami interesado.
- tagabantay ng keycloak - reverse proxy application na nagbibigay-daan sa iyo upang isama ang pahintulot sa pamamagitan ng Keycloak.
- Gangways - isang application na bumubuo ng config para sa kubectl kung saan maaari kang mag-log in at kumonekta sa Kubernetes API sa pamamagitan ng OpenID.
Paano gumagana ang mga pahintulot sa Kubernetes.
Maaari naming pamahalaan ang mga karapatan ng gumagamit / pangkat gamit ang RBAC, isang bungkos ng mga artikulo ang nalikha na tungkol dito, hindi ko ito tatalakayin nang detalyado. Ang problema ay maaari mong gamitin ang RBAC upang paghigpitan ang mga karapatan ng user, ngunit walang alam ang Kubernetes tungkol sa mga user. Lumalabas na kailangan namin ng mekanismo ng paghahatid ng user sa Kubernetes. Para magawa ito, magdaragdag kami ng provider sa Kuberntes OpenID, na magsasabi na talagang umiiral ang naturang user, at ang Kubernetes mismo ang magbibigay sa kanya ng mga karapatan.
Pagsasanay
- Kakailanganin mo ng Kubernetes cluster o minikube
- Active Directory
- Mga domain:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Certificate para sa mga domain o self-signed certificate
Hindi ako magtatagal kung paano gumawa ng self-signed certificate, kailangan mong gumawa ng 2 certificate, ito ang root (Certificate Authority) at ang wildcard client para sa *.example.org na domain
Pagkatapos mong makatanggap / mag-isyu ng mga sertipiko, ang kliyente ay dapat idagdag sa Kubernetes, para dito lumikha kami ng isang lihim para dito:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pemSusunod, gagamitin namin ito para sa aming Ingress controller.
Pag-install ng Keycloak
Napagpasyahan ko na ang pinakamadaling paraan ay ang paggamit ng mga handa na solusyon para dito, katulad ng mga chart ng timon.
I-install ang repositoryo at i-update ito:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo updateLumikha ng keycloak.yml file na may sumusunod na nilalaman:
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: truePag-setup ng Federation
Susunod, pumunta sa web interface
Mag-click sa kaliwang sulok Magdagdag ng kaharian
Key
halaga
Pangalan
Kubernetes
Display Name
Kubernetes
Huwag paganahin ang pag-verify ng email ng user:
Mga saklaw ng kliyente —> Email —> Mga Mapper —> Na-verify ang email (Tanggalin)
Nag-set up kami ng federation upang mag-import ng mga user mula sa ActiveDirectory, mag-iiwan ako ng mga screenshot sa ibaba, sa tingin ko ito ay magiging mas malinaw.
User federation —> Magdagdag ng provider... —> ldap
Pag-setup ng Federation

Kung maayos ang lahat, pagkatapos ay pagkatapos ng pagpindot sa pindutan I-synchronize ang lahat ng user makakakita ka ng mensahe tungkol sa matagumpay na pag-import ng mga user.
Susunod na kailangan naming i-map ang aming mga grupo
Pederasyon ng gumagamit --> ldap_localhost --> Mga Mapper --> Lumikha
Paglikha ng mapper
Setup ng kliyente
Ito ay kinakailangan upang lumikha ng isang kliyente, sa mga tuntunin ng Keycloak, ito ay isang application na papahintulutan mula sa kanya. I-highlight ko ang mga mahahalagang punto sa screenshot sa pula.
Mga Kliyente -> Lumikha
Setup ng kliyente
Gumawa tayo ng scoupe para sa mga grupo:
Mga Saklaw ng Kliyente —> Lumikha
Lumikha ng saklaw
At mag-set up ng mapper para sa kanila:
Mga Saklaw ng Kliyente —> mga pangkat —> Mga Mapper —> Lumikha
Mapper
Idagdag ang pagmamapa ng aming mga pangkat sa Default na Saklaw ng Kliyente:
Mga Kliyente —> kubernetes —> Mga Saklaw ng Kliyente —> Default na Saklaw ng Kliyente
piliin grupo в Magagamit na Saklaw ng Kliyentei-click Idagdag ang napili
Nakukuha namin ang lihim (at isulat ito sa thread) na gagamitin namin para sa awtorisasyon sa Keycloak:
Mga kliyente —> kubernetes —> Mga Kredensyal —> Lihim
Kinukumpleto nito ang pag-setup, ngunit nagkaroon ako ng error noong, pagkatapos ng matagumpay na awtorisasyon, nakatanggap ako ng error 403. .
Ayusin:
Mga Saklaw ng Kliyente —> mga tungkulin —> Mga Mapper —> Lumikha
Mga Mapper
Code ng script
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Pag-configure ng Kubernetes
Kailangan naming tukuyin kung saan matatagpuan ang aming root certificate mula sa site, at kung saan matatagpuan ang OIDC provider.
Upang gawin ito, i-edit ang file /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
...
I-update ang kubeadm config sa cluster:
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
...
Pagtatakda ng auth-proxy
Maaari mong gamitin ang keycloak gatekeeper upang protektahan ang iyong web application. Bilang karagdagan sa katotohanan na ang reverse proxy na ito ay papahintulutan ang user bago ipakita ang page, ipapasa din nito ang impormasyon tungkol sa iyo sa end application sa mga header. Kaya, kung sinusuportahan ng iyong application ang OpenID, agad na pinahihintulutan ang user. Isaalang-alang ang halimbawa ng Kubernetes Dashboard
Pag-install ng 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'
Pagtatakda ng mga karapatan sa pag-access:
Gumawa tayo ng ClusterRoleBinding na magbibigay ng mga karapatan ng admin ng cluster (karaniwang ClusterRole cluster-admin) para sa mga user sa pangkat na 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
I-install ang 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"
Pagkatapos nito, kapag sinubukan mong pumunta sa , ire-redirect tayo sa Keycloak at sa kaso ng matagumpay na awtorisasyon mapupunta tayo sa Dashboard na naka-log in na.
pag-install ng gangway
Para sa kaginhawahan, maaari kang magdagdag ng isang gangway na bubuo ng isang config file para sa kubectl, sa tulong kung saan kami ay makapasok sa Kubernetes sa ilalim ng aming user.
helm install --name gangway stable/gangway -f values_gangway.yaml
values_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-----
Parang ganito. Binibigyang-daan kang agad na i-download ang config file at buuin ito gamit ang isang hanay ng mga command:

Pinagmulan: www.habr.com
