Rydym yn cau awdurdodiad LDAP i Kubernetes

Rydym yn cau awdurdodiad LDAP i Kubernetes

Tiwtorial bach ar sut i ddefnyddio Keycloak i gysylltu Kubernetes â'ch gweinydd LDAP a sefydlu mewnforio defnyddwyr a grwpiau. Bydd hyn yn caniatáu ichi sefydlu RBAC ar gyfer eich defnyddwyr a defnyddio auth-proxy i amddiffyn Dangosfwrdd Kubernetes a chymwysiadau eraill nad ydynt yn gwybod sut i awdurdodi eu hunain.

Gosod cloak

Gadewch i ni dybio bod gennych weinydd LDAP eisoes. Gallai fod yn Active Directory, FreeIPA, OpenLDAP neu beth bynnag. Os nad oes gennych weinydd LDAP, yna mewn egwyddor gallwch greu defnyddwyr yn uniongyrchol yn y rhyngwyneb Keycloak, neu ddefnyddio darparwyr oidc cyhoeddus (Google, Github, Gitlab), bydd y canlyniad bron yr un fath.

Yn gyntaf oll, gadewch i ni osod Keycloak ei hun, gellir perfformio'r gosodiad ar wahân, neu'n uniongyrchol i'r clwstwr Kubernetes, fel rheol, os oes gennych nifer o glystyrau Kubernetes, byddai'n haws ei osod ar wahân. Ar y llaw arall, gallwch chi bob amser ddefnyddio siart helm swyddogol a'i osod yn uniongyrchol yn eich clwstwr.

I storio data Keycloak, bydd angen cronfa ddata arnoch. Y rhagosodiad yw h2 (mae'r holl ddata'n cael ei storio'n lleol), ond mae hefyd yn bosibl ei ddefnyddio postgres, mysql neu mariadb.
Os ydych chi'n dal i benderfynu gosod Keycloak ar wahân, gallwch ddod o hyd i gyfarwyddiadau manylach yn dogfennaeth swyddogol.

Sefydlu Ffederasiwn

Yn gyntaf oll, gadewch i ni greu tir newydd. Teyrnas yw gofod ein cais. Gall pob cais gael ei deyrnas ei hun gyda gwahanol ddefnyddwyr a gosodiadau awdurdodi. Defnyddir y parth meistr gan Keycloak ei hun ac mae ei ddefnyddio ar gyfer unrhyw beth arall yn anghywir.

Gwthio Ychwanegu tir

Opsiwn
Gwerth

Enw
kubernetes

arddangos Enw
Kubernetes

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

Mae Kubernetes yn ddiofyn yn gwirio a yw e-bost y defnyddiwr wedi'i gadarnhau ai peidio. Gan ein bod yn defnyddio ein gweinydd LDAP ein hunain, bydd y gwiriad hwn bron bob amser yn dychwelyd false. Gadewch i ni analluogi cynrychiolaeth y gosodiad hwn yn Kubernetes:

Cwmpasau cleient -> E-bost -> Mapwyr -> e-bost wedi'i wirio (Dileu)

Nawr, gadewch i ni sefydlu'r ffederasiwn, ar gyfer hyn awn i:

Ffederasiwn defnyddwyr -> Ychwanegu darparwr… -> ldap

Dyma enghraifft o setup ar gyfer FreeIPA:

Opsiwn
Gwerth

Enw Arddangos Consol
freeipa.example.org

Gwerthwr
Red Hat Directory Server

Priodoledd UUID LDAP
ipauniqueid

URL Cysylltiad
ldaps://freeipa.example.org

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

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

Rhwymo Credential
<password>

Caniatáu dilysu Kerberos:
on

Teyrnas Kerberos:
EXAMPLE.ORG

Pennaeth Gweinydd:
HTTP/[email protected]

tab allweddol:
/etc/krb5.keytab

Defnyddiwr keycloak-svc rhaid ei greu ymlaen llaw ar ein gweinydd LDAP.

Yn achos Active Directory, dewiswch Gwerthwr: Active Directory a bydd y gosodiadau angenrheidiol yn cael eu mewnosod yn y ffurflen yn awtomatig.

Gwthio Save

Nawr, gadewch i ni symud ymlaen:

Ffederasiwn defnyddwyr -> freeipa.example.org -> Mapwyr -> Enw cyntaf

Opsiwn
Gwerth

Priodoleddau ldap
givenName

Nawr galluogi mapio grŵp:

Ffederasiwn defnyddwyr -> freeipa.example.org -> Mapwyr -> Creu

Opsiwn
Gwerth

Enw
groups

Math o fapiwr
group-ldap-mapper

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

Strategaeth Adalw Grŵp Defnyddwyr
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Mae hyn yn cwblhau'r gosodiad ffederasiwn, gadewch i ni symud ymlaen i sefydlu'r cleient.

Gosodiad cleient

Gadewch i ni greu cleient newydd (cymhwysiad a fydd yn derbyn defnyddwyr gan Keycloak). Awn ni:

Cleientiaid -> Creu

Opsiwn
Gwerth

ID y cleient
kubernetes

Math o Fynediad
confidenrial

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

URIs Ailgyfeirio dilys
http://kubernetes.example.org/*

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

Byddwn hefyd yn creu cwmpas ar gyfer grwpiau:

Cwmpasau cleient -> Creu

Opsiwn
Gwerth

templed
No template

Enw
groups

Llwybr grŵp llawn
false

A gosod mapiwr ar eu cyfer:

Cwmpasau cleient -> grwpiau -> Mapwyr -> Creu

Opsiwn
Gwerth

Enw
groups

Math Mapper
Group membership

Enw Hawliad Tocyn
groups

Nawr mae angen i ni alluogi mapio grŵp o fewn cwmpas ein cleient:

Cleientiaid -> cubernetes -> Cwmpasau cleient -> Sgôp Cleient Rhagosodedig

dewiswch grwpiau в Cwmpas Cleient Ar Gaelcliciwch Ychwanegu a ddewiswyd

Nawr, gadewch i ni sefydlu dilysiad ein cais, ewch i:

Cleientiaid -> cubernetes

Opsiwn
Gwerth

Awdurdodiad wedi'i Galluogi
ON

Gadewch i ni wthio arbed ac mae hyn yn cwblhau'r gosodiad cleient, nawr ar y tab

Cleientiaid -> cubernetes -> Credentials

gallwch gael Secret y byddwn yn ei ddefnyddio yn nes ymlaen.

Ffurfweddu Kubernetes

Mae sefydlu Kubernetes ar gyfer awdurdodiad OIDC yn eithaf dibwys ac nid yw'n rhywbeth cymhleth iawn. Y cyfan sydd angen i chi ei wneud yw rhoi tystysgrif CA eich gweinydd OIDC i mewn /etc/kubernetes/pki/oidc-ca.pem ac ychwanegu'r opsiynau angenrheidiol ar gyfer kube-apiserver.
I wneud hyn, diweddaru /etc/kubernetes/manifests/kube-apiserver.yaml ar eich holl feistri:

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

A hefyd diweddaru'r ffurfwedd kubeadm yn y clwstwr er mwyn peidio â cholli'r gosodiadau hyn yn ystod y diweddariad:

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

Mae hyn yn cwblhau gosodiad Kubernetes. Gallwch ailadrodd y camau hyn ar draws eich holl glystyrau Kubernetes.

Awdurdodiad Cychwynnol

Ar ôl y camau hyn, bydd gennych eisoes glwstwr Kubernetes gydag awdurdodiad OIDC wedi'i ffurfweddu. Yr unig bwynt yw nad oes gan eich defnyddwyr gleient wedi'i ffurfweddu eto, yn ogystal â'u kubeconfig eu hunain. I ddatrys y broblem hon, mae angen i chi ffurfweddu issuance awtomatig kubeconfig i ddefnyddwyr ar ôl awdurdodi llwyddiannus.

I wneud hyn, gallwch ddefnyddio cymwysiadau gwe arbennig sy'n eich galluogi i ddilysu'r defnyddiwr ac yna lawrlwytho'r kubeconfig gorffenedig. Un o'r rhai mwyaf cyfleus yw Kuberos, mae'n caniatáu ichi ddisgrifio holl glystyrau Kubernetes mewn un config a newid yn hawdd rhyngddynt.

I ffurfweddu Kuberos, mae'n ddigon disgrifio'r templed ar gyfer kubeconfig a'i redeg gyda'r paramedrau canlynol:

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

Am fwy o fanylion gweler Defnydd ar Github.

Mae hefyd yn bosibl ei ddefnyddio ciwblogin os ydych am awdurdodi yn uniongyrchol ar gyfrifiadur y defnyddiwr. Yn yr achos hwn, bydd y defnyddiwr yn agor porwr gyda ffurflen awdurdodi ar localhost.

Gellir gwirio'r kubeconfig canlyniadol ar y wefan jwt.io. Copïwch y gwerth users[].user.auth-provider.config.id-token o'ch kubeconfig i ffurflen ar y wefan a chael y trawsgrifiad ar unwaith.

Gosodiad RBAC

Wrth ffurfweddu RBAC, gallwch gyfeirio at yr enw defnyddiwr (maes name yn y tocyn jwt) ac ar gyfer grŵp o ddefnyddwyr (maes groups mewn jwt tocyn). Dyma enghraifft o osod caniatadau ar gyfer grŵp 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

Ceir rhagor o enghreifftiau ar gyfer RBAC yn dogfennaeth swyddogol Kubernetes

Gosod auth-proxy

Mae yna brosiect gwych cloak-porthor, sy'n eich galluogi i sicrhau unrhyw gais trwy ganiatáu i'r defnyddiwr ddilysu i'r gweinydd OIDC. Byddaf yn dangos i chi sut y gallwch ei sefydlu gan ddefnyddio Dangosfwrdd Kubernetes fel enghraifft:

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

Ffynhonnell: hab.com

Ychwanegu sylw