Kubernetes-ni LDAP serveringizga ulash va foydalanuvchilar va guruhlar importini sozlash uchun Keycloak-dan qanday foydalanish bo'yicha kichik qo'llanma. Bu sizga foydalanuvchilaringiz uchun RBAC-ni sozlash va Kubernetes Dashboard va o'zlarini avtorizatsiya qilishni bilmagan boshqa ilovalarni himoya qilish uchun auth-proxy-dan foydalanish imkonini beradi.
Keycloak o'rnatish
Faraz qilaylik, sizda allaqachon LDAP serveri bor. Bu Active Directory, FreeIPA, OpenLDAP yoki boshqa bo'lishi mumkin. Agar sizda LDAP serveri bo'lmasa, printsipial jihatdan siz Keycloak interfeysida foydalanuvchilarni yaratishingiz yoki ommaviy oidc provayderlaridan (Google, Github, Gitlab) foydalanishingiz mumkin, natija deyarli bir xil bo'ladi.
Avvalo, Keycloak-ning o'zini o'rnatamiz, o'rnatish alohida yoki to'g'ridan-to'g'ri Kubernetes klasteriga amalga oshirilishi mumkin, qoida tariqasida, agar sizda bir nechta Kubernetes klasterlari bo'lsa, uni alohida o'rnatish osonroq bo'ladi. Boshqa tomondan, siz har doim foydalanishingiz mumkin
Keycloak ma'lumotlarini saqlash uchun sizga ma'lumotlar bazasi kerak bo'ladi. Asl qiymati h2
(barcha ma'lumotlar mahalliy sifatida saqlanadi), lekin undan foydalanish ham mumkin postgres
, mysql
yoki mariadb
.
Agar siz hali ham Keycloak-ni alohida o'rnatishga qaror qilsangiz, batafsilroq ko'rsatmalarni topishingiz mumkin
Federatsiyani o'rnatish
Avvalo, keling, yangi soha yarataylik. Realm - bu bizning ilovamiz maydoni. Har bir ilova turli foydalanuvchilar va avtorizatsiya sozlamalari bilan o'z sohasiga ega bo'lishi mumkin. Asosiy sohani Keycloakning o'zi ishlatadi va uni boshqa narsa uchun ishlatish noto'g'ri.
Bu yerni bosing Hudud qo'shing
Option
qiymati
Ism
kubernetes
Ko'rsatiladigan ism
Kubernetes
HTML ko'rsatish nomi
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes sukut bo'yicha foydalanuvchi elektron pochtasi tasdiqlangan yoki tasdiqlanmaganligini tekshiradi. Biz o'z LDAP serverimizdan foydalanayotganimiz sababli, bu tekshirish deyarli har doim qaytib keladi false
. Keling, Kubernetesda ushbu sozlamaning namoyishini o'chirib qo'yaylik:
Mijoz doiralari -> Email -> Xaritachilar -> elektron pochta tasdiqlandi (O'chirish)
Endi federatsiyani tuzamiz, buning uchun biz boramiz:
Foydalanuvchilar federatsiyasi -> Provayder qoβshishβ¦ -> ldap
Mana FreeIPA uchun o'rnatish misoli:
Option
qiymati
Konsol nomi
freeipa.example.org
Sotuvchi
Red Hat Directory Server
UUID LDAP atributi
ipauniqueid
Ulanish URL
ldaps://freeipa.example.org
Foydalanuvchi DN
cn=users,cn=accounts,dc=example,dc=org
DNni bog'lash
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Hisob ma'lumotlarini bog'lash
<password>
Kerberos autentifikatsiyasiga ruxsat bering:
on
Kerberos hududi:
EXAMPLE.ORG
Server direktori:
HTTP/[email protected]
kalit yorlig'i:
/etc/krb5.keytab
Foydalanuvchi keycloak-svc
LDAP serverimizda oldindan yaratilgan bo'lishi kerak.
Active Directory bo'lsa, shunchaki tanlang Sotuvchi: Active Directory va kerakli sozlamalar avtomatik ravishda shaklga kiritiladi.
Bu yerni bosing saqlash
Endi davom etaylik:
Foydalanuvchilar federatsiyasi -> freeipa.example.org -> Xaritachilar -> Ism
Option
qiymati
Ldap atributlari
givenName
Endi guruh xaritasini yoqing:
Foydalanuvchilar federatsiyasi -> freeipa.example.org -> Xaritachilar -> yaratish
Option
qiymati
Ism
groups
Mapper turi
group-ldap-mapper
LDAP guruhlari DN
cn=groups,cn=accounts,dc=example,dc=org
Foydalanuvchilar guruhini olish strategiyasi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Bu federatsiyani sozlashni yakunlaydi, keling, mijozni sozlashga o'tamiz.
Mijozni sozlash
Keling, yangi mijoz yarataylik (Keycloak-dan foydalanuvchilarni qabul qiladigan dastur). Qani ketdik:
Mijozlar -> yaratish
Option
qiymati
mijoz ID
kubernetes
Kirish turi
confidenrial
Ildiz URL
http://kubernetes.example.org/
Yaroqli qayta yo'naltirish URI'lari
http://kubernetes.example.org/*
Administrator URL-manzili
http://kubernetes.example.org/
Shuningdek, biz guruhlar uchun maydon yaratamiz:
Mijoz doiralari -> yaratish
Option
qiymati
Andoza
No template
Ism
groups
To'liq guruh yo'li
false
Va ular uchun xaritachini o'rnating:
Mijoz doiralari -> Guruhlar -> Xaritachilar -> yaratish
Option
qiymati
Ism
groups
Mapper turi
Group membership
Token daΚΌvo nomi
groups
Endi biz mijozlar doiramizda guruh xaritasini yoqishimiz kerak:
Mijozlar -> kubernetlar -> Mijoz doiralari -> Standart mijoz doiralari
Tanlaymiz Guruhlar Π² Mavjud mijozlar doiralaribosing Tanlangan qo'shish
Endi ilovamizning autentifikatsiyasini o'rnatamiz, o'ting:
Mijozlar -> kubernetlar
Option
qiymati
Avtorizatsiya yoqilgan
ON
Keling, turaylik Saqlash va bu mijozni sozlashni tugatadi, endi yorliqda
Mijozlar -> kubernetlar -> ishonch yorligi
olishingiz mumkin sir bundan keyinroq foydalanamiz.
Kubernetes sozlanmoqda
OIDC avtorizatsiyasi uchun Kubernetes-ni sozlash juda ahamiyatsiz va unchalik murakkab narsa emas. Sizga kerak bo'lgan yagona narsa OIDC serveringizning CA sertifikatini qo'yishdir /etc/kubernetes/pki/oidc-ca.pem
va kube-apiserver uchun kerakli variantlarni qo'shing.
Buning uchun yangilang /etc/kubernetes/manifests/kube-apiserver.yaml
barcha ustalaringiz haqida:
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
Shuningdek, yangilanish paytida ushbu sozlamalarni yo'qotmaslik uchun klasterdagi kubeadm konfiguratsiyasini yangilang:
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
Bu Kubernetes sozlamalarini yakunlaydi. Ushbu amallarni barcha Kubernetes klasterlarida takrorlashingiz mumkin.
Dastlabki avtorizatsiya
Ushbu qadamlardan so'ng siz allaqachon OIDC avtorizatsiyasi bilan tuzilgan Kubernetes klasteriga ega bo'lasiz. Yagona jihat shundaki, sizning foydalanuvchilaringiz hali mijoz sozlanmagan, shuningdek, o'zlarining kubeconfig. Ushbu muammoni hal qilish uchun muvaffaqiyatli avtorizatsiyadan so'ng foydalanuvchilarga kubeconfig avtomatik emissiyasini sozlashingiz kerak.
Buni amalga oshirish uchun siz foydalanuvchini autentifikatsiya qilish va keyin tugallangan kubeconfigni yuklab olish imkonini beruvchi maxsus veb-ilovalardan foydalanishingiz mumkin. Eng qulaylaridan biri
Kuberosni sozlash uchun kubeconfig shablonini tavsiflash va uni quyidagi parametrlar bilan ishga tushirish kifoya:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Batafsil ma'lumot uchun qarang
Foydalanish ham mumkin
Olingan kubeconfigni saytda tekshirish mumkin users[].user.auth-provider.config.id-token
kubeconfig dan saytdagi formaga o'ting va darhol transkriptni oling.
RBAC sozlamalari
RBAC-ni sozlashda siz ikkala foydalanuvchi nomiga ham murojaat qilishingiz mumkin (maydon name
jwt tokenida) va bir guruh foydalanuvchilar uchun (maydon groups
jwt tokenida). Bu erda guruh uchun ruxsatlarni o'rnatish misoli keltirilgan kubernetes-default-namespace-admins
:
kubernetes-default-namespace-admins.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: default-admins
namespace: default
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-default-namespace-admins
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: default-admins
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: kubernetes-default-namespace-admins
RBAC uchun ko'proq misollarni topish mumkin
Autx-proksini sozlash
Ajoyib loyiha bor
asboblar paneli-proxy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kubernetes-dashboard-proxy
spec:
replicas: 1
template:
metadata:
labels:
app: kubernetes-dashboard-proxy
spec:
containers:
- args:
- --listen=0.0.0.0:80
- --discovery-url=https://keycloak.example.org/auth/realms/kubernetes
- --client-id=kubernetes
- --client-secret=<your-client-secret-here>
- --redirection-url=https://kubernetes-dashboard.example.org
- --enable-refresh-tokens=true
- --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh
- --upstream-url=https://kubernetes-dashboard.kube-system
- --resources=uri=/*
image: keycloak/keycloak-gatekeeper
name: kubernetes-dashboard-proxy
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
readinessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard-proxy
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: kubernetes-dashboard-proxy
type: ClusterIP
Manba: www.habr.com