Bidh sinn a’ ceangal cead LDAP gu Kubernetes

Bidh sinn a’ ceangal cead LDAP gu Kubernetes

Oideachadh beag air mar a chleachdas tu Keycloak gus Kubernetes a cheangal ris an t-seirbheisiche LDAP agad agus cuir a-steach luchd-cleachdaidh agus buidhnean. Leigidh seo leat RBAC a stèidheachadh airson do luchd-cleachdaidh agus auth-proxy a chleachdadh gus deas-bhòrd Kubernetes agus tagraidhean eile nach eil eòlach air iad fhèin a cheadachadh a dhìon.

Stàladh Keycloak

Gabhamaid ris gu bheil frithealaiche LDAP agad mu thràth. Dh’ fhaodadh e a bhith mar Active Directory, FreeIPA, OpenLDAP no ge bith dè. Mura h-eil frithealaiche LDAP agad, an uairsin ann am prionnsapal faodaidh tu luchd-cleachdaidh a chruthachadh gu dìreach anns an eadar-aghaidh Keycloak, no solaraichean oidc poblach a chleachdadh (Google, Github, Gitlab), bidh an toradh cha mhòr an aon rud.

An toiseach, leig leinn Keycloak fhèin a chuir a-steach, faodar an stàladh a dhèanamh air leth, no gu dìreach gu buidheann Kubernetes, mar riaghailt, ma tha grunn chlàran Kubernetes agad, bhiodh e na b’ fhasa a stàladh air leth. Air an làimh eile, faodaidh tu an-còmhnaidh a chleachdadh Clàr-stiùiridh oifigeil agus stàlaich e gu dìreach a-steach don bhuidheann agad.

Gus dàta Keycloak a stòradh, bidh feum agad air stòr-dàta. Tha am bun-bheachd h2 (tha a h-uile dàta air a stòradh gu h-ionadail), ach tha e comasach cuideachd a chleachdadh postgres, mysql no mariadb.
Ma cho-dhùnas tu fhathast Keycloak a chuir a-steach air leth, gheibh thu stiùireadh nas mionaidiche ann sgrìobhainnean oifigeil.

Suidheachadh Caidreachas

An toiseach, cruthaichidh sinn rìoghachd ùr. Is e rìoghachd àite an tagraidh againn. Faodaidh a rìoghachd fhèin a bhith aig gach tagradh le diofar luchd-cleachdaidh agus suidheachaidhean ceadachaidh. Tha am prìomh rìoghachd air a chleachdadh le Keycloak fhèin agus tha e ga chleachdadh airson rud sam bith eile ceàrr.

Brùth Cuir ris an rìoghachd

roghainn
luach

Ainm
kubernetes

Ainm-taisbeanaidh
Kubernetes

Ainm taisbeanaidh HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Bidh Kubernetes gu bunaiteach a’ sgrùdadh a bheil post-d an neach-cleachdaidh air a dhearbhadh no nach eil. Leis gu bheil sinn a’ cleachdadh ar frithealaiche LDAP fhèin, cha mhòr nach till an t-seic seo air ais false. Nach cuir sinn à comas riochdachadh an t-suidheachaidh seo ann an Kubernetes:

Sgòthan teachdaiche -> Seòladh post-dealain -> Mappers -> post-d air a dhearbhadh (Sguab às)

A-nis leig dhuinn an caidreachas a stèidheachadh, airson seo thèid sinn gu:

Caidreachas luchd-cleachdaidh -> Cuir solaraiche ris… -> ldap

Seo eisimpleir de shuidheachadh airson FreeIPA:

roghainn
luach

Ainm taisbeanaidh consola
freeipa.example.org

Reiceadair
Red Hat Directory Server

Feart UUID LDAP
ipauniqueid

URL ceangail
ldaps://freeipa.example.org

Cleachdaiche DN
cn=users,cn=accounts,dc=example,dc=org

Ceangail DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Ceangal Creideas
<password>

Leig le dearbhadh Kerberos:
on

Rìoghachd Kerberos:
EXAMPLE.ORG

Prionnsapal an fhrithealaiche:
HTTP/[email protected]

tab iuchrach:
/etc/krb5.keytab

Cleachdaiche keycloak-svc feumar a chruthachadh ro làimh air an t-seirbheisiche LDAP againn.

Ann an cùis Active Directory, dìreach tagh Neach-reic: Active Directory agus thèid na roghainnean riatanach a chuir a-steach don fhoirm gu fèin-ghluasadach.

Brùth Save

A-nis gluaisidh sinn air adhart:

Caidreachas luchd-cleachdaidh -> freeipa.example.org -> Mappers -> A’ chiad ainm

roghainn
luach

Feartan ldap
givenName

A-nis cuir an comas mapadh buidhne:

Caidreachas luchd-cleachdaidh -> freeipa.example.org -> Mappers -> Cruthaich

roghainn
luach

Ainm
groups

Seòrsa mapper
group-ldap-mapper

Buidhnean LDAP DN
cn=groups,cn=accounts,dc=example,dc=org

Ro-innleachd airson buidheann luchd-cleachdaidh a luchdadh a-nuas
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Cuiridh seo crìoch air suidheachadh a’ chaidreachais, gluaisidh sinn air adhart gu bhith a’ stèidheachadh an neach-dèiligidh.

Suidheachadh cliant

Cruthaichidh sinn teachdaiche ùr (iarrtas a gheibh luchd-cleachdaidh bho Keycloak). Tiugainn:

Luchd-dèiligidh -> Cruthaich

roghainn
luach

Client a 'Chlàir
kubernetes

Seòrsa ruigsinneachd
confidenrial

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

URIs Redirect dligheach
http://kubernetes.example.org/*

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

Cruthaichidh sinn cuideachd cothrom airson buidhnean:

Sgòthan teachdaiche -> Cruthaich

roghainn
luach

teamplaid
No template

Ainm
groups

Slighe buidheann slàn
false

Agus suidhich mapper dhaibh:

Sgòthan teachdaiche -> buidhnean -> Mappers -> Cruthaich

roghainn
luach

Ainm
groups

Seòrsa Mapper
Group membership

Ainm Tagraidh Token
groups

A-nis feumaidh sinn mapadh buidhne a chomasachadh anns an raon teachdaiche againn:

Luchd-dèiligidh -> cubairnean -> Sgòthan teachdaiche -> Sgòthan teachdaiche bunaiteach

Tagh buidhnean в Sgòthan teachdaiche rim faighinncliog Cuir ris a chaidh a thaghadh

A-nis leig leinn dearbhadh an tagraidh againn a stèidheachadh, rachaibh gu:

Luchd-dèiligidh -> cubairnean

roghainn
luach

Ceadachadh air a chomasachadh
ON

Leig leinn putadh sàbhail agus cuiridh seo crìoch air suidheachadh an neach-dèiligidh, a-nis air an taba

Luchd-dèiligidh -> cubairnean -> teisteasan

gheibh thu dìomhair a chleachdas sinn nas fhaide air adhart.

A 'rèiteachadh Kubernetes

Tha stèidheachadh Kubernetes airson cead OIDC gu math beag agus chan e rudeigin gu math toinnte. Chan eil agad ach a chuir a-steach teisteanas CA an t-seirbheisiche OIDC agad /etc/kubernetes/pki/oidc-ca.pem agus cuir ris na roghainnean riatanach airson kube-apiserver.
Gus seo a dhèanamh, ùraich /etc/kubernetes/manifests/kube-apiserver.yaml air bhur maighstiribh uile :

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

Agus cuideachd ùraich an rèiteachadh kubeadm sa bhuidheann gus nach caill thu na roghainnean sin rè an ùrachaidh:

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

Bidh seo a’ crìochnachadh suidheachadh Kubernetes. Faodaidh tu na ceumannan seo ath-aithris thairis air na cruinneachaidhean Kubernetes agad gu lèir.

Ùghdarrachadh Tòiseachaidh

Às deidh na ceumannan seo, bidh cruinneachadh Kubernetes agad mu thràth le cead OIDC air a rèiteachadh. Is e an aon phuing nach eil teachdaiche aig an luchd-cleachdaidh agad fhathast, a bharrachd air an kubeconfig aca fhèin. Gus an duilgheadas seo fhuasgladh, feumaidh tu cuir a-mach fèin-ghluasadach kubeconfig a rèiteachadh do luchd-cleachdaidh às deidh cead soirbheachail.

Gus seo a dhèanamh, faodaidh tu tagraidhean lìn sònraichte a chleachdadh a leigeas leat an neach-cleachdaidh a dhearbhadh agus an uairsin an kubeconfig crìochnaichte a luchdachadh sìos. Is e aon den fheadhainn as freagarraiche Cùbair, leigidh e leat cunntas a thoirt air a h-uile buidheann Kubernetes ann an aon rèiteachadh agus gluasad gu furasta eatorra.

Gus Kuberos a rèiteachadh, tha e gu leòr cunntas a thoirt air an teamplaid airson kubeconfig agus a ruith leis na paramadairean a leanas:

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

Airson tuilleadh fiosrachaidh faic Cleachdadh air Github.

Tha e comasach cuideachd a chleachdadh cubelog a-steach ma tha thu airson cead a thoirt gu dìreach air coimpiutair an neach-cleachdaidh. Anns a ’chùis seo, fosglaidh an neach-cleachdaidh brobhsair le foirm cead air localhost.

Faodar an kubeconfig a thig às a sgrùdadh air an làrach jwt.io. Dìreach dèan lethbhreac den luach users[].user.auth-provider.config.id-token bhon kubeconfig agad gu foirm air an làrach agus faigh an tar-sgrìobhadh sa bhad.

Suidheachadh RBAC

Nuair a bhios tu a’ rèiteachadh RBAC, faodaidh tu iomradh a thoirt air an dà chuid an t-ainm-cleachdaidh (raon name anns an tòcan jwt) agus airson buidheann de luchd-cleachdaidh (raon groups ann an jwt token). Seo eisimpleir de shuidheachadh ceadan airson buidheann 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

Gheibhear barrachd eisimpleirean airson RBAC ann an Sgrìobhainnean oifigeil Kubernetes

A' suidheachadh ùghdar-proxy

Tha pròiseact mìorbhaileach ann cloak-geata, a leigeas leat tagradh sam bith a dhèanamh tèarainte le bhith a’ leigeil leis an neach-cleachdaidh dearbhadh gu frithealaiche OIDC. Seallaidh mi dhut mar as urrainn dhut a chuir air dòigh le bhith a’ cleachdadh deas-bhòrd Kubernetes mar eisimpleir:

deas-bhòrd-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

Cuir beachd ann