Tunafunga uidhinishaji wa LDAP kwa Kubernetes

Tunafunga uidhinishaji wa LDAP kwa Kubernetes

Mafunzo madogo kuhusu jinsi ya kutumia Keycloak kuunganisha Kubernetes kwenye seva yako ya LDAP na kusanidi uingizaji wa watumiaji na vikundi. Hii itakuruhusu kusanidi RBAC kwa watumiaji wako na kutumia auth-proksi kulinda Dashibodi ya Kubernetes na programu zingine ambazo hazijui jinsi ya kujiidhinisha zenyewe.

Ufungaji wa Keycloak

Wacha tuchukue kuwa tayari unayo seva ya LDAP. Inaweza kuwa Active Directory, FreeIPA, OpenLDAP au chochote. Ikiwa huna seva ya LDAP, basi kwa kanuni unaweza kuunda watumiaji moja kwa moja kwenye kiolesura cha Keycloak, au kutumia watoa huduma wa oidc wa umma (Google, Github, Gitlab), matokeo yatakuwa karibu sawa.

Kwanza kabisa, wacha tusakinishe Keycloak yenyewe, usakinishaji unaweza kufanywa kando, au moja kwa moja kwa nguzo ya Kubernetes, kama sheria, ikiwa una vikundi kadhaa vya Kubernetes, itakuwa rahisi kuiweka kando. Kwa upande mwingine, unaweza kutumia kila wakati chati rasmi ya usukani na usakinishe moja kwa moja kwenye nguzo yako.

Ili kuhifadhi data ya Keycloak, utahitaji hifadhidata. Chaguo msingi ni h2 (data zote zimehifadhiwa ndani), lakini pia inawezekana kutumia postgres, mysql au mariadb.
Ikiwa bado utaamua kusakinisha Keycloak kando, unaweza kupata maagizo ya kina zaidi nyaraka rasmi.

Mpangilio wa Shirikisho

Kwanza kabisa, wacha tuunde ulimwengu mpya. Ufalme ndio nafasi ya maombi yetu. Kila programu inaweza kuwa na eneo lake na watumiaji tofauti na mipangilio ya uidhinishaji. Enzi kuu inatumiwa na Keycloak yenyewe na kuitumia kwa kitu kingine chochote sio sawa.

Shinikiza Ongeza eneo

Chaguo
Thamani

jina
kubernetes

Jina Display
Kubernetes

Jina la Onyesho la HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes kwa chaguomsingi hukagua ikiwa barua pepe ya mtumiaji imethibitishwa au la. Kwa kuwa tunatumia seva yetu ya LDAP, hundi hii itarudi kila mara false. Wacha tuzima uwakilishi wa mpangilio huu katika Kubernetes:

Mawanda ya mteja -> Barua pepe -> Wana ramani -> barua pepe imethibitishwa (Futa)

Sasa hebu tuanzishe shirikisho, kwa hili tunaenda kwa:

Shirikisho la watumiaji -> Ongeza mtoa huduma... -> ldap

Hapa kuna mfano wa usanidi wa FreeIPA:

Chaguo
Thamani

Jina la Onyesho la Console
freeipa.example.org

Muuzaji
Red Hat Directory Server

UUID LDAP sifa
ipauniqueid

URL ya muunganisho
ldaps://freeipa.example.org

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

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

Unganisha Kitambulisho
<password>

Ruhusu uthibitishaji wa Kerberos:
on

Ufalme wa Kerberos:
EXAMPLE.ORG

Mkuu wa Seva:
HTTP/[email protected]

kichupo muhimu:
/etc/krb5.keytab

Mtumiaji keycloak-svc lazima iundwe mapema kwenye seva yetu ya LDAP.

Katika kesi ya Active Directory, chagua tu Muuzaji: Saraka Inayotumika na mipangilio muhimu itaingizwa kwenye fomu moja kwa moja.

Shinikiza Kuokoa

Sasa tuendelee:

Shirikisho la watumiaji -> freeipa.example.org -> Wana ramani -> Jina la kwanza

Chaguo
Thamani

Ldap sifa
givenName

Sasa wezesha ramani ya kikundi:

Shirikisho la watumiaji -> freeipa.example.org -> Wana ramani -> Kujenga

Chaguo
Thamani

jina
groups

Aina ya ramani
group-ldap-mapper

Vikundi vya LDAP DN
cn=groups,cn=accounts,dc=example,dc=org

Mkakati wa Kurejesha Kikundi cha Mtumiaji
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Hii inakamilisha usanidi wa shirikisho, wacha tuendelee kuweka mteja.

Mpangilio wa mteja

Wacha tuunde mteja mpya (programu ambayo itapokea watumiaji kutoka Keycloak). Twende:

Wateja -> Kujenga

Chaguo
Thamani

Kitambulisho cha Mteja
kubernetes

Aina ya Ufikiaji
confidenrial

URL ya mizizi
http://kubernetes.example.org/

URI halali za Uelekezaji Upya
http://kubernetes.example.org/*

URL ya msimamizi
http://kubernetes.example.org/

Pia tutaunda wigo wa vikundi:

Mawanda ya mteja -> Kujenga

Chaguo
Thamani

Kigezo
No template

jina
groups

Njia kamili ya kikundi
false

Na uwawekee mchora ramani:

Mawanda ya mteja -> makundi -> Wana ramani -> Kujenga

Chaguo
Thamani

jina
groups

Aina ya ramani
Group membership

Jina la Dai la Tokeni
groups

Sasa tunahitaji kuwezesha uchoraji wa kikundi katika wigo wa mteja wetu:

Wateja -> Kubernetes -> Mawanda ya mteja -> Mawanda Chaguomsingi ya Wateja

Kuchagua makundi Π² Mawanda Yanayopatikana ya Wateja, vyombo vya habari Ongeza iliyochaguliwa

Sasa hebu tuweke uthibitishaji wa maombi yetu, nenda kwa:

Wateja -> Kubernetes

Chaguo
Thamani

Uidhinishaji Umewashwa
ON

Hebu sukuma kuokoa na hii inakamilisha usanidi wa mteja, sasa kwenye kichupo

Wateja -> Kubernetes -> Vidokezo

unaweza kupata Siri ambayo tutatumia baadaye.

Inasanidi Kubernetes

Kuanzisha Kubernetes kwa idhini ya OIDC ni jambo dogo na sio jambo gumu sana. Unachohitaji kufanya ni kuweka cheti cha CA cha seva yako ya OIDC ndani /etc/kubernetes/pki/oidc-ca.pem na ongeza chaguo muhimu kwa kube-apiserver.
Ili kufanya hivyo, sasisha /etc/kubernetes/manifests/kube-apiserver.yaml juu ya wakuu wako wote:

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

Na pia sasisha usanidi wa kubeadm kwenye nguzo ili usipoteze mipangilio hii wakati wa sasisho:

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

Hii inakamilisha usanidi wa Kubernetes. Unaweza kurudia hatua hizi kwenye makundi yako yote ya Kubernetes.

Uidhinishaji wa Awali

Baada ya hatua hizi, tayari utakuwa na kundi la Kubernetes ambalo uidhinishaji wa OIDC umesanidiwa. Jambo pekee ni kwamba watumiaji wako bado hawana mteja aliyesanidiwa, pamoja na kubeconfig yao wenyewe. Ili kutatua tatizo hili, unahitaji kusanidi utoaji wa moja kwa moja wa kubeconfig kwa watumiaji baada ya idhini iliyofanikiwa.

Ili kufanya hivyo, unaweza kutumia programu maalum za wavuti zinazokuwezesha kuthibitisha mtumiaji na kisha kupakua kubeconfig iliyokamilishwa. Moja ya rahisi zaidi ni Kuberos, hukuruhusu kuelezea nguzo zote za Kubernetes katika usanidi mmoja na ubadilishe kwa urahisi kati yao.

Ili kusanidi Kuberos, inatosha kuelezea kiolezo cha kubeconfig na kuiendesha na vigezo vifuatavyo:

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

Kwa maelezo zaidi tazama Matumizi kwenye Github.

Inawezekana pia kutumia kubelogin ikiwa unataka kuidhinisha moja kwa moja kwenye kompyuta ya mtumiaji. Katika kesi hii, mtumiaji atafungua kivinjari na fomu ya idhini kwenye localhost.

Kubeconfig inayotokana inaweza kuangaliwa kwenye tovuti jwt.io. Nakili tu thamani users[].user.auth-provider.config.id-token kutoka kwa kubeconfig yako hadi fomu kwenye tovuti na upate nakala mara moja.

Mpangilio wa RBAC

Wakati wa kusanidi RBAC, unaweza kurejelea jina la mtumiaji (uwanja name kwenye ishara ya jwt) na kwa kikundi cha watumiaji (uwanja groups katika ishara ya jwt). Hapa kuna mfano wa kuweka ruhusa kwa kikundi 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

Mifano zaidi ya RBAC inaweza kupatikana katika nyaraka rasmi za Kubernetes

Inaweka wakala wa kuthibitisha

Kuna mradi wa ajabu keycloth-bawabu, ambayo hukuruhusu kulinda programu yoyote kwa kuruhusu mtumiaji kuthibitisha kwa seva ya OIDC. Nitakuonyesha jinsi unavyoweza kuisanidi kwa kutumia Dashibodi ya Kubernetes kama mfano:

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

Chanzo: mapenzi.com

Kuongeza maoni