Бид LDAP зөвшөөрлийг Kubernetes-д өгдөг

Бид LDAP зөвшөөрлийг Kubernetes-д өгдөг

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-ийг татаж авах боломжийг олгодог тусгай вэб програмуудыг ашиглаж болно. Хамгийн тохиромжтой нь нэг юм Куберос, энэ нь танд бүх Kubernetes кластеруудыг нэг тохиргоонд дүрсэлж, тэдгээрийн хооронд хялбархан шилжих боломжийг олгоно.

Kuberos-ийг тохируулахын тулд kubeconfig-ийн загварыг тайлбарлаж, дараах параметрүүдээр ажиллуулахад хангалттай.

kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template

Дэлгэрэнгүй мэдээллийг үзнэ үү Хэрэглээ Github дээр.

Үүнийг бас ашиглах боломжтой kubelogin хэрэв та хэрэглэгчийн компьютер дээр шууд зөвшөөрөл өгөхийг хүсвэл. Энэ тохиолдолд хэрэглэгч localhost дээр зөвшөөрлийн маягт бүхий хөтөч нээх болно.

Үүссэн kubeconfig-ийг сайт дээрээс шалгаж болно jwt.io. Зүгээр л утгыг хуулна уу 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-ийн бусад жишээг эндээс олж болно албан ёсны Kubernetes баримт бичиг

Auth-proxy-г тохируулж байна

Гайхалтай төсөл байна түлхүүрийн нөмрөг-хаалгач, энэ нь хэрэглэгчийг OIDC серверт таниулах боломжийг олгох замаар аливаа програмыг хамгаалах боломжийг олгодог. Би танд жишээ болгон Kubernetes хяналтын самбарыг ашиглан хэрхэн тохируулахыг харуулах болно.

хяналтын самбар-прокси.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

сэтгэгдэл нэмэх