Artikel iki wis ditulis kanggo nggedhekake ing wis , nanging ngomong babagan fitur bundel karo Microsoft ActiveDirectory, lan uga nglengkapi.
Ing artikel iki aku bakal pitutur marang kowe carane nginstal lan ngatur:
- gantungan kunci minangka proyek open source. Sing nyedhiyakake siji titik entri kanggo aplikasi. Dianggo karo akeh protokol, kalebu LDAP lan OpenID sing kita kasengsem.
- gantungan kunci - aplikasi proxy mbalikke sing ngidini sampeyan nggabungake wewenang liwat Keycloak.
- gangway - aplikasi sing nggawe konfigurasi kanggo kubectl karo sampeyan bisa mlebu lan nyambung menyang API Kubernetes liwat OpenID.
Cara kerja ijin ing Kubernetes.
Kita bisa ngatur hak pangguna / klompok nggunakake RBAC, akeh artikel sing wis digawe babagan iki, aku ora bakal ngrembug babagan iki kanthi rinci. Masalahe sampeyan bisa nggunakake RBAC kanggo mbatesi hak pangguna, nanging Kubernetes ora ngerti apa-apa babagan pangguna. Pranyata kita butuh mekanisme pangiriman pangguna ing Kubernetes. Kanggo nindakake iki, kita bakal nambah panyedhiya kanggo Kuberntes OpenID, sing bakal ujar manawa pangguna kasebut pancen ana, lan Kubernetes dhewe bakal menehi hak kasebut.
Latihan
- Sampeyan mbutuhake kluster Kubernetes utawa minikube
- Direktori aktif
- Domain:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Sertifikat kanggo domain utawa sertifikat sing ditandatangani dhewe
Aku ora bakal mikir babagan carane nggawe sertifikat sing ditandatangani dhewe, sampeyan kudu nggawe 2 sertifikat, iki minangka root (Otoritas Sertifikat) lan klien wildcard kanggo domain *.example.org
Sawise sampeyan nampa / ngetokake sertifikat, klien kudu ditambahake menyang Kubernetes, kanggo iki kita nggawe rahasia kasebut:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pemSabanjure, kita bakal digunakake kanggo pengontrol Ingress.
Instalasi Keycloak
Aku mutusake manawa cara paling gampang yaiku nggunakake solusi sing wis siap kanggo iki, yaiku grafik helm.
Instal repositori lan nganyari:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo updateGawe file keycloak.yml kanthi isi ing ngisor iki:
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: trueSetelan Federasi
Sabanjure, pindhah menyang antarmuka web
Klik ing pojok kiwa Tambah ranah
Key
Value
jeneng
Kubernetes
Tampilan Jeneng
Kubernetes
Pateni verifikasi email pangguna:
Cakupan klien -> Email -> Mappers -> Email diverifikasi (Busak)
Kita nyiyapake federasi kanggo ngimpor pangguna saka ActiveDirectory, aku bakal ninggalake gambar ing ngisor iki, aku mikir bakal luwih jelas.
Federasi pangguna —> Tambah panyedhiya… —> ldap
Setelan Federasi

Yen kabeh apik, banjur sawise mencet tombol Sinkronake kabeh pangguna sampeyan bakal weruh pesen babagan sukses ngimpor pangguna.
Sabanjure kita kudu peta kelompok kita
Federasi pangguna -> ldap_localhost -> Mappers -> Gawe
Nggawe mapper
Setelan klien
Sampeyan kudu nggawe klien, ing babagan Keycloak, iki minangka aplikasi sing bakal diwenehi wewenang saka dheweke. Aku bakal nyorot poin penting ing gambar kanthi warna abang.
Klien -> Nggawe
Setelan klien
Ayo nggawe scoupe kanggo grup:
Lingkup Klien -> Gawe
Nggawe ruang lingkup
Lan atur peta kanggo wong-wong mau:
Lingkup Klien -> grup -> Mappers -> Gawe
Mapper
Tambahake pemetaan grup kita menyang Default Client Scope:
Klien -> kubernetes -> Lingkup Klien -> Lingkup Klien Default
Pilih kelompok в Cakupan Klien sing kasedhiyaklik Tambah sing dipilih
We njaluk rahasia (lan nulis menyang thread) sing bakal digunakake kanggo wewenang ing Keycloak:
Klien -> kubernetes -> Kredensial -> Rahasia
Iki ngrampungake persiyapan, nanging aku duwe kesalahan nalika, sawise otorisasi sukses, aku nampa kesalahan 403. .
Ndandani:
Lingkup Klien -> peran -> Mappers -> Gawe
Mappers
Kode skrip
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Konfigurasi Kubernetes
Kita kudu nemtokake endi sertifikat ROOT saka situs kasebut, lan ing ngendi panyedhiya OIDC.
Kanggo nindakake iki, sunting 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
...
Nganyari konfigurasi kubeadm ing kluster:
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
...
Nyetel otentik-proksi
Sampeyan bisa nggunakake keycloak gatekeeper kanggo nglindhungi aplikasi web. Saliyane kasunyatan manawa proxy mbalikke iki bakal menehi wewenang marang pangguna sadurunge nuduhake kaca kasebut, uga bakal ngirim informasi babagan sampeyan menyang aplikasi pungkasan ing header. Mangkono, yen aplikasi sampeyan ndhukung OpenID, pangguna bakal langsung diwenehi wewenang. Coba conto Dashboard Kubernetes
Nginstal 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'
Nyetel hak akses:
Ayo nggawe ClusterRoleBinding sing bakal menehi hak admin cluster (standar ClusterRole cluster-admin) kanggo pangguna ing grup 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
Instal 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"
Sawise iku, nalika sampeyan nyoba kanggo pindhah menyang , kita bakal dialihake menyang Keycloak lan yen otorisasi sukses kita bakal tekan Dashboard sing wis mlebu.
instalasi gangway
Kanggo penak, sampeyan bisa nambah gangway sing bakal ngasilake file konfigurasi kanggo kubectl, kanthi bantuan sing bakal mlebu ing Kubernetes ing pangguna.
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-----
Katon kaya iki. Ngidini sampeyan langsung ndownload file konfigurasi lan ngasilake kanthi nggunakake sakumpulan perintah:

Source: www.habr.com
