Mamehy ny fanomezan-dàlana LDAP amin'ny Kubernetes izahay

Mamehy ny fanomezan-dàlana LDAP amin'ny Kubernetes izahay

Torolalana kely momba ny fampiasana Keycloak hampifandraisana ny Kubernetes amin'ny mpizara LDAP anao ary hananganana fanafarana mpampiasa sy vondrona. Izany dia ahafahanao manangana RBAC ho an'ny mpampiasa anao ary mampiasa auth-proxy mba hiarovana ny Dashboard Kubernetes sy ny rindranasa hafa izay tsy mahay manome alalana ny tenany.

Fametrahana Keycloak

Aoka hatao hoe efa manana mpizara LDAP ianao. Mety ho Active Directory, FreeIPA, OpenLDAP na inona. Raha tsy manana mpizara LDAP ianao, amin'ny ankapobeny dia afaka mamorona mpampiasa mivantana amin'ny interface Keycloak ianao, na mampiasa mpanome oidc ho an'ny daholobe (Google, Github, Gitlab), saika mitovy ny vokatra.

Voalohany indrindra, andao hametraka Keycloak ny tenany, ny fametrahana dia azo atao misaraka, na mivantana amin'ny cluster Kubernetes, raha ny fitsipika, raha manana cluster Kubernetes maromaro ianao dia ho mora kokoa ny mametraka azy misaraka. Amin'ny lafiny iray, azonao ampiasaina foana tabilao ofisialy ary apetraho mivantana ao amin'ny cluster-nao.

Mba hitehirizana data Keycloak dia mila angon-drakitra ianao. Ny default dia h2 (voatahiry eo an-toerana ny angon-drakitra rehetra), fa azo ampiasaina ihany koa postgres, mysql na mariadb.
Raha mbola manapa-kevitra ny hametraka Keycloak misaraka ianao dia afaka mahita torolàlana amin'ny antsipiriany bebe kokoa antontan-taratasy ofisialy.

Fametrahana federasiona

Voalohany indrindra, andao hamorona fanjakana vaovao. Realm no toeran'ny fampiharana anay. Ny fampiharana tsirairay dia afaka manana ny faritra misy azy miaraka amin'ireo mpampiasa samihafa sy ny fanomezan-dàlana. Ny fanjakana master dia ampiasain'ny Keycloak tenany ary tsy mety ny fampiasana azy amin'ny zavatra hafa.

mpanao gazety Ampio fanjakana

Option
sarobidy

anarana
kubernetes

Anarana isehoana
Kubernetes

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

Ny Kubernetes dia manamarina raha voamarina na tsia ny mailaka an'ny mpampiasa. Koa satria mampiasa mpizara LDAP manokana izahay, dia saika hiverina foana io fisavana io false. Andeha hofoanana ny fanehoana an'ity sehatra ity ao amin'ny Kubernetes:

Saran'ny mpanjifa -> karazana verinia -> Mappers -> mailaka voamarina (Fafao)

Andeha isika hanangana ny federasiona, ho amin'izany isika:

Federasiona mpampiasa -> Ampio mpamatsy… -> LDAP

Ity misy ohatra setup ho an'ny FreeIPA:

Option
sarobidy

Anaran'ny fampisehoana Console
freeipa.example.org

Mpivarotra
Red Hat Directory Server

UUID LDAP toetra
ipauniqueid

URL fifandraisana
ldaps://freeipa.example.org

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

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

Mamatotra ny fahazoan-dàlana
<password>

Avelao ny fanamarinana Kerberos:
on

Fanjakan'i Kerberos:
EXAMPLE.ORG

Talen'ny mpizara:
HTTP/[email protected]

kiheba fanalahidy:
/etc/krb5.keytab

mpampiasa keycloak-svc dia tsy maintsy noforonina mialoha amin'ny mpizara LDAP.

Raha ny Active Directory, safidio fotsiny Mpivarotra: Active Directory ary ampidirina ho azy ao anatin'ilay endrika ireo fanovana ilaina.

mpanao gazety Save

Andeha isika izao handroso:

Federasiona mpampiasa -> freeipa.example.org -> Mappers -> Fanampin'anarana

Option
sarobidy

Ldap attributes
givenName

Alefaso izao ny sarintany vondrona:

Federasiona mpampiasa -> freeipa.example.org -> Mappers -> mamorona

Option
sarobidy

anarana
groups

Karazana Mapper
group-ldap-mapper

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

Paikady famerenana ny vondrona mpampiasa
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Mamita ny fananganana federasiona izany, andao hiroso amin'ny fametrahana ny mpanjifa.

Fametrahana mpanjifa

Andao hamorona mpanjifa vaovao (fampiharana iray handray mpampiasa avy amin'ny Keycloak). Andao:

Clients -> mamorona

Option
sarobidy

ID mpanjifa
kubernetes

Karazana fidirana
confidenrial

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

URI Redirect manankery
http://kubernetes.example.org/*

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

Hamorona sehatra ho an'ny vondrona ihany koa izahay:

Saran'ny mpanjifa -> mamorona

Option
sarobidy

Endrika
No template

anarana
groups

Lalana vondrona feno
false

Ary manangàna sarintany ho azy ireo:

Saran'ny mpanjifa -> vondrona -> Mappers -> mamorona

Option
sarobidy

anarana
groups

Karazana Mapper
Group membership

Anarana fitakiana Token
groups

Ankehitriny dia mila mamela ny sarintany vondrona amin'ny sehatry ny mpanjifantsika isika:

Clients -> kubernetes -> Saran'ny mpanjifa -> Saran'ny mpanjifa Default

Mifidy isika vondrona в Sahan'ny mpanjifa misy, gazety Ampio voafantina

Andeha isika hametraka ny fanamarinana ny fampiharana, mankanesa any:

Clients -> kubernetes

Option
sarobidy

Navela ny Fanomezana
ON

Andeha isika hanosika afa-tsy ary izany dia mamita ny fananganana mpanjifa, eo amin'ny tabilao izao

Clients -> kubernetes -> Syndicate

azonao atao Secret izay hampiasaintsika any aoriana.

Fametrahana Kubernetes

Ny fametrahana Kubernetes ho an'ny fanomezan-dàlana OIDC dia tsy dia misy dikany loatra ary tsy zavatra sarotra be. Ny hany tokony hataonao dia ny mametraka ny taratasy fanamarinana CA an'ny mpizara OIDC anao /etc/kubernetes/pki/oidc-ca.pem ary ampio ny safidy ilaina amin'ny kube-apiserver.
Mba hanaovana izany, fanavaozana /etc/kubernetes/manifests/kube-apiserver.yaml amin'ny tomponareo rehetra:

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

Ary havaozy koa ny config kubeadm ao amin'ny cluster mba tsy ho very ireo fanovana ireo mandritra ny fanavaozana:

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

Izany dia mamita ny fananganana Kubernetes. Azonao atao ny mamerina ireo dingana ireo amin'ny vondrona Kubernetes rehetra.

Fanomezana voalohany

Aorian'ireo dingana ireo dia efa manana cluster Kubernetes ianao miaraka amin'ny fanomezan-dàlana OIDC namboarina. Ny hany tokana dia ny hoe tsy mbola manana mpanjifa namboarina ny mpampiasa anao, ary koa ny kubeconfig azy manokana. Mba hamahana ity olana ity dia mila manamboatra ny famoahana mandeha ho azy ny kubeconfig ho an'ny mpampiasa ianao aorian'ny fanomezan-dàlana mahomby.

Mba hanaovana izany dia azonao atao ny mampiasa rindranasa tranonkala manokana izay ahafahanao manamarina ny mpampiasa ary avy eo misintona ny kubeconfig efa vita. Ny iray amin'ireo mety indrindra dia Kuberos, mamela anao hamaritra ny cluster Kubernetes rehetra amin'ny config iray ary mifamadika mora foana eo anelanelan'izy ireo.

Mba hanitsiana an'i Kuberos dia ampy ny mamaritra ny môdely ho an'ny kubeconfig ary mampandeha azy miaraka amin'ireto marika manaraka ireto:

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

Raha mila fanazavana fanampiny dia jereo Usage amin'ny Github.

Azo atao koa ny mampiasa kubelogin raha te hanome alalana mivantana amin'ny solosain'ny mpampiasa ianao. Amin'ity tranga ity, ny mpampiasa dia hanokatra navigateur misy taratasy fahazoan-dàlana amin'ny localhost.

Ny vokatra kubeconfig dia azo jerena ao amin'ny tranokala jwt.io. Adikao fotsiny ny sandany users[].user.auth-provider.config.id-token avy amin'ny kubeconfig anao mankany amin'ny endrika iray ao amin'ny tranokala ary alao avy hatrany ny transcript.

RBAC setup

Rehefa manamboatra RBAC dia azonao atao ny manondro ny anaran'ny mpampiasa (field name ao amin'ny token'ny jwt) ary ho an'ny vondrona mpampiasa (field groups amin'ny jwt token). Ity misy ohatra iray amin'ny fametrahana fahazoan-dàlana ho an'ny vondrona 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

Ohatra bebe kokoa momba ny RBAC dia hita ao amin'ny antontan-taratasy ofisialy Kubernetes

Fametrahana auth-proxy

Misy tetikasa mahafinaritra keycloak-gatekeeper, izay ahafahanao miaro ny fampiharana rehetra amin'ny alàlan'ny famelana ny mpampiasa hanamarina amin'ny mpizara OIDC. Hasehoko anao ny fomba ahafahanao manangana azy amin'ny fampiasana ny Dashboard Kubernetes ho ohatra:

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