Among i-fasten ang pagtugot sa LDAP ngadto sa Kubernetes

Among i-fasten ang pagtugot sa LDAP ngadto sa Kubernetes

Usa ka gamay nga panudlo kung giunsa paggamit ang Keycloak aron makonektar ang Kubernetes sa imong LDAP server ug mag-set up sa pag-import sa mga tiggamit ug grupo. Kini magtugot kanimo sa pag-set up sa RBAC alang sa imong mga tiggamit ug paggamit sa auth-proxy aron maprotektahan ang Kubernetes Dashboard ug uban pang mga aplikasyon nga wala mahibalo kon unsaon pagtugot sa ilang kaugalingon.

Pag-instalar sa Keycloak

Ibutang nato nga aduna ka nay LDAP server. Mahimo kini nga Active Directory, FreeIPA, OpenLDAP, o bisan unsa. Kung wala kay LDAP server, nan sa prinsipyo makahimo ka og mga user direkta sa Keycloak interface, o mogamit sa mga public oidc providers (Google, Github, Gitlab), ang resulta halos pareho ra.

Una sa tanan, atong i-install ang Keycloak mismo, ang pag-instalar mahimo nga gilain, o direkta sa Kubernetes cluster, isip usa ka lagda, kung ikaw adunay daghang mga Kubernetes clusters, mas sayon ​​​​ang pag-instalar niini nga gilain. Sa laing bahin, mahimo nimong gamiton kanunay opisyal nga tsart sa timon ug i-install kini direkta sa imong cluster.

Aron matipigan ang datos sa Keycloak, magkinahanglan ka og database. Ang default mao ang h2 (ang tanan nga datos gitipigan sa lokal), apan posible usab nga gamiton postgres, mysql o mariadb.
Kung magdesisyon ka pa nga i-install ang Keycloak nga gilain, makit-an nimo ang mas detalyado nga mga panudlo sa opisyal nga dokumentasyon.

Pag-setup sa Federation

Una sa tanan, maghimo kita ug bag-ong gingharian. Ang gingharian mao ang wanang sa among aplikasyon. Ang matag aplikasyon mahimong adunay kaugalingon nga gingharian nga adunay lainlaing mga tiggamit ug mga setting sa pagtugot. Ang master nga gingharian gigamit sa Keycloak mismo ug ang paggamit niini alang sa bisan unsang butang nga sayup.

I-klik dinhi Idugang ang gingharian

Option
bili

ngalan
kubernetes

Ipakita ang Ngalan
Kubernetes

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

Ang Kubernetes pinaagi sa default nagsusi kung ang email sa user nakumpirma o dili. Tungod kay naggamit kami sa among kaugalingon nga LDAP server, kini nga tseke hapit kanunay mobalik false. Atong i-disable ang representasyon niini nga setting sa Kubernetes:

Mga sakup sa kliyente -> Email -> Mga Mapper -> email napamatud-an (Paphaa)

Karon atong ibutang ang pederasyon, alang niini moadto kita sa:

User federation -> Idugang ang provider… -> ldap

Ania ang usa ka pananglitan nga pag-setup alang sa FreeIPA:

Option
bili

Ngalan sa Display Console
freeipa.example.org

Vendor
Red Hat Directory Server

UUID LDAP attribute
ipauniqueid

URL sa koneksyon
ldaps://freeipa.example.org

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

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

Bind Credential
<password>

Tugoti ang Kerberos authentication:
on

Kerberos Realm:
EXAMPLE.ORG

Prinsipal sa Server:
HTTP/[email protected]

yawe tab:
/etc/krb5.keytab

Gigamit keycloak-svc kinahanglang himoon daan sa among LDAP server.

Sa kaso sa Active Directory, pilia lang Vendor: Aktibo nga Direktoryo ug ang gikinahanglan nga mga setting awtomatikong isulod sa porma.

I-klik dinhi Luwasa

Karon magpadayon kita:

User federation -> freeipa.example.org -> Mga Mapper -> unang Ngalan

Option
bili

Ldap nga mga hiyas
givenName

Karon mahimo ang pagmapa sa grupo:

User federation -> freeipa.example.org -> Mga Mapper -> Paghimo

Option
bili

ngalan
groups

Matang sa Mapper
group-ldap-mapper

Mga Grupo sa LDAP DN
cn=groups,cn=accounts,dc=example,dc=org

Estratehiya sa Pagkuha sa Grupo sa Gumagamit
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Kini nakompleto ang pag-setup sa federation, magpadayon kita sa pag-set up sa kliyente.

Pag-setup sa kliyente

Magbuhat ta ug bag-ong kliyente (usa ka aplikasyon nga makadawat mga tiggamit gikan sa Keycloak). lakaw ta:

Mga kliyente -> Paghimo

Option
bili

ID sa kliyente
kubernetes

Type sa Pag-access
confidenrial

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

Mga balido nga Redirect URI
http://kubernetes.example.org/*

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

Maghimo usab kami usa ka sakup alang sa mga grupo:

Mga sakup sa kliyente -> Paghimo

Option
bili

Plantilya
No template

ngalan
groups

Bug-os nga grupo nga agianan
false

Ug pagbutang ug mapper alang kanila:

Mga sakup sa kliyente -> mga grupo -> Mga Mapper -> Paghimo

Option
bili

ngalan
groups

Matang sa Mapper
Group membership

Ngalan sa Pag-angkon sa Token
groups

Karon kinahanglan namong i-enable ang group mapping sa among kliyente:

Mga kliyente -> mga kubernetes -> Mga sakup sa kliyente -> Default nga Kasangkaran sa Kliyente

Pagpili mga grupo Π² Anaa nga mga Kasangkaran sa Kliyentei-klik Idugang ang pinili

Karon atong i-set up ang authentication sa atong aplikasyon, adto sa:

Mga kliyente -> mga kubernetes

Option
bili

Gi-aktibo ang pagtugot
ON

Iduso ta pagluwas ug kini nakompleto ang pag-setup sa kliyente, karon sa tab

Mga kliyente -> mga kubernetes -> Mga kredensyal

makuha nimo Sekreto nga atong gamiton unya.

Pag-configure sa Kubernetes

Ang pag-set up sa Kubernetes alang sa pagtugot sa OIDC kay gamay ra ug dili usa ka butang nga komplikado kaayo. Ang kinahanglan nimong buhaton mao ang pagbutang sa CA certificate sa imong OIDC server /etc/kubernetes/pki/oidc-ca.pem ug idugang ang gikinahanglan nga mga kapilian alang sa kube-apiserver.
Aron mahimo kini, pag-update /etc/kubernetes/manifests/kube-apiserver.yaml sa tanan nimong mga agalon:

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

Ug i-update usab ang kubeadm config sa cluster aron dili mawala kini nga mga setting sa panahon sa pag-update:

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

Nakompleto niini ang pag-setup sa Kubernetes. Mahimo nimong balikon kini nga mga lakang sa tanan nimong mga pungpong sa Kubernetes.

Inisyal nga Awtorisasyon

Pagkahuman niini nga mga lakang, aduna ka nay Kubernetes cluster nga adunay pagtugot sa OIDC nga gi-configure. Ang bugtong punto mao nga ang imong mga tiggamit wala pa adunay kliyente nga na-configure, ingon man ang ilang kaugalingon nga kubeconfig. Aron masulbad kini nga problema, kinahanglan nimo nga i-configure ang awtomatikong pag-isyu sa kubeconfig sa mga tiggamit pagkahuman sa malampuson nga pagtugot.

Aron mahimo kini, mahimo nimong gamiton ang mga espesyal nga aplikasyon sa web nga nagtugot kanimo sa pag-authenticate sa user ug dayon i-download ang nahuman nga kubeconfig. Usa sa labing kombenyente mao ang Kuberos, kini nagtugot kanimo sa paghulagway sa tanang Kubernetes clusters sa usa ka config ug dali nga mobalhin tali kanila.

Aron ma-configure ang Kuberos, igo na nga ihulagway ang template para sa kubeconfig ug ipadagan kini sa mga musunud nga parameter:

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

Para sa dugang detalye tan-awa paggamit sa Github.

Posible usab nga gamiton kubelogin kung gusto nimo nga magtugot direkta sa kompyuter sa tiggamit. Sa kini nga kaso, ang tiggamit magbukas sa usa ka browser nga adunay porma sa pagtugot sa localhost.

Ang resulta nga kubeconfig mahimong masusi sa site jwt.io. Kopyaha lang ang bili users[].user.auth-provider.config.id-token gikan sa imong kubeconfig ngadto sa usa ka porma sa site ug kuhaa dayon ang transcript.

RBAC setup

Kung gi-configure ang RBAC, mahimo nimong i-refer ang parehas nga username (field name sa jwt token) ug para sa grupo sa mga tiggamit (field groups sa jwt token). Ania ang usa ka pananglitan sa paghimo og mga pagtugot alang sa usa ka grupo 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

Dugang nga mga pananglitan alang sa RBAC makita sa opisyal nga dokumentasyon sa Kubernetes

Pagbutang ug auth-proxy

Adunay nindot nga proyekto keycloak-gatekeeper, nga nagtugot kanimo sa pag-secure sa bisan unsang aplikasyon pinaagi sa pagtugot sa tiggamit sa pag-authenticate sa OIDC server. Ipakita ko kanimo kung giunsa nimo kini ma-set up gamit ang Kubernetes Dashboard isip pananglitan:

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

Idugang sa usa ka comment