Kubernetes-ийг өөрийн LDAP сервертэй холбож, хэрэглэгчид болон бүлгүүдийн импортыг тохируулахын тулд Keycloak-ийг хэрхэн ашиглах талаар бяцхан зааварчилгаа. Энэ нь танд RBAC-г хэрэглэгчдэдээ тохируулж, auth-proxy ашиглан Kubernetes Dashboard болон өөрийгөө хэрхэн зөвшөөрөхөө мэдэхгүй бусад программыг хамгаалах боломжийг олгоно.
Түлхүүрийн зүүлт суурилуулах
Та аль хэдийн LDAP сервертэй болсон гэж бодъё. Энэ нь Active Directory, FreeIPA, OpenLDAP эсвэл өөр зүйл байж болно. Хэрэв танд LDAP сервер байхгүй бол зарчмын хувьд та Keycloak интерфейс дээр шууд хэрэглэгч үүсгэх эсвэл нийтийн oidc үйлчилгээ үзүүлэгчийг (Google, Github, Gitlab) ашиглаж болно, үр дүн нь бараг ижил байх болно.
Юуны өмнө Keycloak-ийг өөрөө суулгая.Суулгалтыг тусад нь эсвэл шууд Kubernetes кластерт хийж болно.Дүрмээр бол хэд хэдэн Kubernetes кластертай бол тусад нь суулгах нь илүү хялбар байх болно. Нөгөө талаар та үргэлж ашиглаж болно
Keycloak өгөгдлийг хадгалахын тулд танд мэдээллийн сан хэрэгтэй болно. Анхдагч нь h2
(бүх өгөгдөл дотооддоо хадгалагддаг), гэхдээ бас ашиглах боломжтой postgres
, mysql
буюу mariadb
.
Хэрэв та Keycloak-ийг тусад нь суулгахаар шийдсэн хэвээр байвал дэлгэрэнгүй зааврыг эндээс авах боломжтой
Холбооны тохиргоо
Юуны өмнө шинэ орон бий болгоё. Хүрээ бол бидний хэрэглээний орон зай юм. Аппликешн бүр өөр өөр хэрэглэгчид болон зөвшөөрлийн тохиргоотой өөрийн гэсэн хүрээтэй байж болно. Мастер хүрээг Keycloak өөрөө ашигладаг бөгөөд өөр зүйлд ашиглах нь буруу юм.
Түлхэх Хүрээ нэмнэ үү
сонголт
үнэ цэнэ
нэр
kubernetes
Харагдах нэр
Kubernetes
HTML дэлгэцийн нэр
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes нь хэрэглэгчийн имэйлийг баталгаажуулсан эсэхийг шалгадаг. Бид өөрсдийн LDAP серверийг ашигладаг тул энэ шалгалт бараг үргэлж эргэж ирдэг false
. Kubernetes дээрх энэ тохиргооны дүрслэлийг идэвхгүй болгоцгооё:
Үйлчлүүлэгчийн хамрах хүрээ -> И-мэйл -> Газрын зурагчид -> имэйл баталгаажуулсан (Устгах)
Одоо холбоогоо байгуулъя, үүний тулд бид:
Хэрэглэгчийн холбоо -> Үйлчилгээ үзүүлэгч нэмэх... -> лдап
FreeIPA тохиргооны жишээ энд байна:
сонголт
үнэ цэнэ
Консолын дэлгэцийн нэр
freeipa.example.org
Vendor
Red Hat Directory Server
UUID LDAP шинж чанар
ipauniqueid
Холболтын URL
ldaps://freeipa.example.org
Хэрэглэгчид DN
cn=users,cn=accounts,dc=example,dc=org
DN -ийг холбоно уу
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Итгэмжлэх жуух бичгийг холбох
<password>
Kerberos баталгаажуулалтыг зөвшөөрөх:
on
Керберос муж:
EXAMPLE.ORG
Серверийн захирал:
HTTP/[email protected]
Түлхүүр таб:
/etc/krb5.keytab
Хэрэглэгч keycloak-svc
Манай LDAP сервер дээр урьдчилан үүсгэсэн байх ёстой.
Active Directory-ийн хувьд та зүгээр л сонгох хэрэгтэй Борлуулагч: Active Directory шаардлагатай тохиргоонууд автоматаар маягт руу орох болно.
Түлхэх Save
Одоо цаашаа явцгаая:
Хэрэглэгчийн холбоо -> freeipa.example.org -> Газрын зурагчид -> Нэр
сонголт
үнэ цэнэ
Ldap шинж чанар
givenName
Одоо бүлгийн зураглалыг идэвхжүүлнэ үү:
Хэрэглэгчийн холбоо -> freeipa.example.org -> Газрын зурагчид -> бий болгох
сонголт
үнэ цэнэ
нэр
groups
Газрын зурагчин төрөл
group-ldap-mapper
LDAP бүлгүүд DN
cn=groups,cn=accounts,dc=example,dc=org
Хэрэглэгчийн бүлгийг сэргээх стратеги
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Энэ нь холбооны тохиргоог дуусгаж, үйлчлүүлэгчийг тохируулах руу шилжье.
Үйлчлүүлэгчийн тохиргоо
Шинэ клиент үүсгэцгээе (Keycloak-аас хэрэглэгчдийг хүлээн авах програм). Үргэлжлүүлье:
харилцагчид -> бий болгох
сонголт
үнэ цэнэ
Клиент ID
kubernetes
Хандалтын төрөл
confidenrial
Root буюу эх URL
http://kubernetes.example.org/
Хүчинтэй дахин чиглүүлэх URI
http://kubernetes.example.org/*
Админ URL
http://kubernetes.example.org/
Мөн бид бүлгүүдэд зориулсан хамрах хүрээг бий болгоно:
Үйлчлүүлэгчийн хамрах хүрээ -> бий болгох
сонголт
үнэ цэнэ
Загвар
No template
нэр
groups
Бүтэн бүлгийн зам
false
Мөн тэдэнд зориулж зураглагч тохируулна уу:
Үйлчлүүлэгчийн хамрах хүрээ -> бүлэг -> Газрын зурагчид -> бий болгох
сонголт
үнэ цэнэ
нэр
groups
Mapper төрөл
Group membership
Токен нэхэмжлэлийн нэр
groups
Одоо бид үйлчлүүлэгчийнхээ хүрээнд бүлгийн зураглалыг идэвхжүүлэх хэрэгтэй:
харилцагчид -> кубернетс -> Үйлчлүүлэгчийн хамрах хүрээ -> Өгөгдмөл Client Scopes
Бид сонгоно уу бүлэг в Боломжтой үйлчлүүлэгчийн хүрээдарна уу Сонгосон нэмэх
Одоо аппликешны баталгаажуулалтыг тохируулцгаая, дараах руу очно уу:
харилцагчид -> кубернетс
сонголт
үнэ цэнэ
Зөвшөөрөл идэвхжүүлсэн
ON
Хүлээцгээе аврах Энэ нь одоо таб дээр байгаа үйлчлүүлэгчийн тохиргоог дуусгана
харилцагчид -> кубернетс -> Итгэмжлэх жуух бичгээ
чи авч чадна нууц Үүнийг бид дараа нь ашиглах болно.
Kubernetes-ийг тохируулж байна
Kubernetes-ийг OIDC-ийн зөвшөөрөлд тохируулах нь маш энгийн бөгөөд тийм ч төвөгтэй биш юм. Таны хийх ёстой зүйл бол OIDC серверийнхээ CA сертификатыг оруулах явдал юм /etc/kubernetes/pki/oidc-ca.pem
болон kube-apiserver-д шаардлагатай сонголтуудыг нэмнэ үү.
Үүнийг хийхийн тулд шинэчилнэ үү /etc/kubernetes/manifests/kube-apiserver.yaml
таны бүх мастерууд дээр:
...
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
...
Мөн шинэчлэх үед эдгээр тохиргоог алдахгүйн тулд кластер дахь kubeadm тохиргоог шинэчилнэ үү.
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
...
Энэ нь Kubernetes-ийн тохиргоог дуусгана. Та эдгээр алхмуудыг бүх Kubernetes кластер дээрээ давтаж болно.
Анхны зөвшөөрөл
Эдгээр алхмуудын дараа танд OIDC зөвшөөрөл тохируулагдсан Kubernetes кластер байх болно. Цорын ганц зүйл бол таны хэрэглэгчид хараахан тохируулагдсан үйлчлүүлэгч, мөн өөрсдийн kubeconfig-гүй байгаа явдал юм. Энэ асуудлыг шийдэхийн тулд та амжилттай зөвшөөрөл авсны дараа kubeconfig-ийг хэрэглэгчдэд автоматаар олгох тохиргоог хийх хэрэгтэй.
Үүнийг хийхийн тулд та хэрэглэгчийг баталгаажуулах, дараа нь дууссан kubeconfig-ийг татаж авах боломжийг олгодог тусгай вэб програмуудыг ашиглаж болно. Хамгийн тохиромжтой нь нэг юм
Kuberos-ийг тохируулахын тулд kubeconfig-ийн загварыг тайлбарлаж, дараах параметрүүдээр ажиллуулахад хангалттай.
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Дэлгэрэнгүй мэдээллийг үзнэ үү
Үүнийг бас ашиглах боломжтой
Үүссэн kubeconfig-ийг сайт дээрээс шалгаж болно users[].user.auth-provider.config.id-token
kubeconfig-аас сайт дээрх маягт руу шилжүүлж, хуулбарыг шууд аваарай.
RBAC тохиргоо
RBAC-г тохируулахдаа та хэрэглэгчийн нэр (талбар name
jwt токен дээр) болон бүлэг хэрэглэгчдэд (талбар groups
jwt токен дээр). Бүлгийн зөвшөөрлийг тохируулах жишээ энд байна 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-ийн бусад жишээг эндээс олж болно
Auth-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
Эх сурвалж: www.habr.com