Em destûrnameya LDAP-ê li Kubernetes girêdidin

Em destûrnameya LDAP-ê li Kubernetes girêdidin

Dersek kurt li ser ka hûn çawa dikarin Keycloak-ê bikar bînin da ku Kubernetes bi servera xweya LDAP-ê ve girêdin û îtxalkirina bikarhêner û koman mîheng bikin. Ev ê dihêle hûn ji bo bikarhênerên xwe RBAC-ê mîheng bikin û auth-proxy bikar bînin da ku Kubernetes Dashboard û serîlêdanên din ên ku nikaribin xwe rast bikin biparêzin.

Sazkirina Keycloak

Ka em bifikirin ku we jixwe serverek LDAP heye. Ev dibe ku Active Directory, FreeIPA, OpenLDAP an tiştek din be. Ger we serverek LDAP tune be, wê hingê di prensîbê de hûn dikarin rasterast di navgîniya Keycloak de bikarhêneran biafirînin, an pêşkêşkerên oidc yên gelemperî (Google, Github, Gitlab) bikar bînin, encam dê hema hema heman be.

Berî her tiştî, werin em Keycloak bixwe saz bikin. Sazkirin dikare ji hev cuda an rasterast di nav komek Kubernetes de were kirin. Wekî qaîdeyek, heke we çend komên Kubernetes hebin, sazkirina wê ji hev cûda hêsantir dibe. Ji hêla din ve hûn dikarin her gav bikar bînin chart helm fermî û wê rasterast di koma xwe de saz bikin.

Ji bo hilanîna daneyên Keycloak hûn ê hewceyê databasek bin. Default e h2 (hemû daneyên herêmî têne hilanîn), lê karanîna wê jî gengaz e postgres, mysql an mariadb.
Ger hûn hîn jî biryar bidin ku Keycloak ji hev cuda saz bikin, hûn ê rêwerzên berfirehtir tê de bibînin belgeyên fermî.

Sazkirina Federasyonê

Berî her tiştî, bila em qadek nû ava bikin. Realm cîhê serlêdana me ye. Her serîlêdan dikare bi bikarhênerên cûda û mîhengên destûrnameyê re warê xwe hebe. Qada Master ji hêla Keycloak bixwe ve tê bikar anîn û karanîna wê ji bo tiştek din xelet e.

Push Herêmê zêde bikin

Dibe
Giranî

Nav
kubernetes

Navekî Display
Kubernetes

Navê Nîşana HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes ji hêla xwerû ve kontrol dike ka e-nameya bikarhêner hatî pejirandin an na. Ji ber ku em servera xweya LDAP bikar tînin, ev kontrol dê hema hema her gav vegere false. Ka em nûnertiya vê vebijarkê li Kubernetes neçalak bikin:

Qadên xerîdar -> Email -> Mappers -> E-name hate piştrast kirin (Jêbibe)

Naha em federasyonê saz bikin; ji bo vê yekê, biçin:

Federasyona bikarhêner -> Pêşkêşker zêde bike… -> ldap

Li vir mînakek mîhengên ji bo FreeIPA heye:

Dibe
Giranî

Navê Nîşandana Konsolê
freeipa.example.org

Firotkar
Red Hat Directory Server

Taybetmendiya UUID LDAP
ipauniqueid

URL-ya girêdanê
ldaps://freeipa.example.org

Bikarhêner DN
cn=users,cn=accounts,dc=example,dc=org

DN girêdin
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Bind Credential
<password>

Destûrê bide pejirandina Kerberos:
on

Kerberos Realm:
EXAMPLE.ORG

Serekê Server:
HTTP/[email protected]

KeyTab:
/etc/krb5.keytab

Bikaranîvan keycloak-svc pêdivî ye ku pêşî li ser servera meya LDAP were afirandin.

Di doza Active Directory de, hûn tenê hewce ne ku hilbijêrin Firoşkar: Active Directory û mîhengên pêwîst dê bixweber di formê de werin nivîsandin.

Push Tomar bike

Naha em herin pêş:

Federasyona bikarhêner -> freeipa.example.org -> Mappers -> Nav

Dibe
Giranî

Taybetmendiya ldap
givenName

Naha werin em nexşeya komê çalak bikin:

Federasyona bikarhêner -> freeipa.example.org -> Mappers -> Xûliqandin

Dibe
Giranî

Nav
groups

Cureyê Nexşeyê
group-ldap-mapper

Komên LDAP DN
cn=groups,cn=accounts,dc=example,dc=org

Komên Bikarhêner Stratejiya Vedigere
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Naha ku sazkirina federasyonê qediya, bila em biçin sazkirina xerîdar.

Sazkirina xerîdar

Ka em xerîdarek nû biafirînin (serlêdanek ku dê bikarhêneran ji Keycloak werbigire). Ka em pê de biçin:

Clients -> Xûliqandin

Dibe
Giranî

Nasnameya kiriyar
kubernetes

Type Access
confidenrial

URL root
http://kubernetes.example.org/

URI-yên Beralîkirina Derbasdar
http://kubernetes.example.org/*

Admin URL
http://kubernetes.example.org/

Werin em ji bo koman jî çarçoveyek çêbikin:

Qadên Xerîdar -> Xûliqandin

Dibe
Giranî

Şablon
No template

Nav
groups

Rêya koma tevahî
false

Û ji wan re nexşeyek saz bikin:

Qadên Xerîdar -> komên -> Mappers -> Xûliqandin

Dibe
Giranî

Nav
groups

Tîpa Nexşeyê
Group membership

Navê Daxwaza Token
groups

Naha divê em di çarçoveya xerîdar de koma nexşeyê çalak bikin:

Clients -> Kubernetes -> Qadên Xerîdar -> Qadên xerîdar ên xwerû

Em hilbijêre komên в Qadên Xerîdar ên Berdest, çap bikin Hilbijartî zêde bike

Naha em werin verastkirina serîlêdana xwe mîheng bikin, biçin:

Clients -> Kubernetes

Dibe
Giranî

Destûrkirin Çalak e
ON

Werin em çap bikin xilas bike û bi vê yekê sazkirina xerîdar qediya, naha li ser tabê

Clients -> Kubernetes -> şehadan

hûn dikarin bistînin Dizî ku em ê bêtir bikar bînin.

Veavakirina Kubernetes

Sazkirina Kubernetes ji bo destûrnameya OIDC pir piçûk e û ne pir tevlihev e. Ya ku hûn hewce ne bikin ev e ku sertîfîkaya CA ya servera OIDC-ya xwe têxin hundur /etc/kubernetes/pki/oidc-ca.pem û vebijarkên pêwîst ji bo kube-apiserver zêde bikin.
Ji bo vê yekê, nûve bikin /etc/kubernetes/manifests/kube-apiserver.yaml li ser hemû axayên xwe:

...
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
...

Di heman demê de, veavakirina kubeadm-ê di komê de nûve bikin da ku dema nûvekirinê van mîhengan winda nekin:

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
...

Ev sazkirina Kubernetes temam dike. Hûn dikarin van gavan li hemî komên xwe yên Kubernetes dubare bikin.

Destûrnameya destpêkê

Piştî van gavan, hûn ê jixwe komek Kubernetes bi destûrnameya OIDC-ya mîhengkirî hebe. Tiştek tenê ev e ku bikarhênerên we hîn ne xwediyê xerîdarek mîhengkirî an kubeconfiga xwe ne. Ji bo çareserkirina vê pirsgirêkê, hûn hewce ne ku piştî destûrnameya serketî dabeşkirina otomatîkî ya kubeconfig li bikarhêneran mîheng bikin.

Ji bo vê yekê, hûn dikarin serîlêdanên webê yên taybetî bikar bînin ku destûrê didin we ku hûn bikarhêner rast bikin û dûv re kubeconfig-a amade dakêşin. Yek ji herî hêsan e Kuberos, ew dihêle hûn hemî komên Kubernetes di yek mîhengê de rave bikin û bi hêsanî di navbera wan de biguherînin.

Ji bo mîhengkirina Kuberos, tenê şablonê ji bo kubeconfig vebêjin û wê bi pîvanên jêrîn bimeşînin:

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

Ji bo agahdariya berfirehtir binêre Bikaranîna li ser Github.

Ew jî gengaz e ku bikar bînin kubelogin heke hûn dixwazin rasterast li ser komputera bikarhêner destûr bidin. Di vê rewşê de, bikarhêner dê gerokek bi forma destûrnameyê li ser localhost veke.

Encama kubeconfig dikare li ser malperê were kontrol kirin jwt.io. Tenê nirxê kopî bikin users[].user.auth-provider.config.id-token ji kubeconfiga xwe bigire heya forma li ser malperê û tavilê transkriptek werbigire.

Sazkirina RBAC

Dema ku hûn RBAC-ê mîheng dikin, hûn dikarin her du navê bikarhêner (qad name di nîşana jwt de), û her komek bikarhêner (qad groups bi nîşana jwt). Li vir mînakek sazkirina mafên ji bo komekê ye 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

Nimûneyên bêtir ji bo RBAC dikarin di nav de bêne dîtin belgeyên fermî yên Kubernetes

Sazkirina auth-proxy

Projeyek ecêb heye keycloak-dergevan, ku destûrê dide te ku hûn her serîlêdanê biparêzin û ji hêla bikarhêner ve jêhatîbûna rastkirina servera OIDC peyda dike. Ez ê nîşanî we bidim ka meriv wê çawa bi karanîna Kubernetes Dashboard wekî mînakek mîheng bike:

dashboard-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

Source: www.habr.com

Add a comment