మేము కుబెర్నెటెస్‌కు LDAP అధికారాన్ని అందిస్తాము

మేము కుబెర్నెటెస్‌కు LDAP అధికారాన్ని అందిస్తాము

మీ LDAP సర్వర్‌కు Kubernetesని కనెక్ట్ చేయడానికి మరియు వినియోగదారులు మరియు సమూహాల దిగుమతిని కాన్ఫిగర్ చేయడానికి మీరు Keycloakని ఎలా ఉపయోగించవచ్చనే దానిపై ఒక చిన్న ట్యుటోరియల్. ఇది మీ వినియోగదారుల కోసం RBACని కాన్ఫిగర్ చేయడానికి మరియు Kubernetes డ్యాష్‌బోర్డ్ మరియు తమను తాము ప్రామాణీకరించలేని ఇతర అప్లికేషన్‌లను రక్షించడానికి auth-proxyని ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది.

కీక్లాక్ ఇన్‌స్టాలేషన్

మీకు ఇప్పటికే LDAP సర్వర్ ఉందని అనుకుందాం. ఇది యాక్టివ్ డైరెక్టరీ, FreeIPA, OpenLDAP లేదా ఏదైనా కావచ్చు. మీకు LDAP సర్వర్ లేకపోతే, సూత్రప్రాయంగా మీరు Keycloak ఇంటర్‌ఫేస్‌లో నేరుగా వినియోగదారులను సృష్టించవచ్చు లేదా పబ్లిక్ oidc ప్రొవైడర్‌లను ఉపయోగించవచ్చు (Google, Github, Gitlab), ఫలితం దాదాపు ఒకే విధంగా ఉంటుంది.

అన్నింటిలో మొదటిది, కీక్లోక్‌ని ఇన్‌స్టాల్ చేద్దాం. ఇన్‌స్టాలేషన్‌ను విడిగా లేదా నేరుగా కుబెర్నెట్స్ క్లస్టర్‌లో నిర్వహించవచ్చు. నియమం ప్రకారం, మీకు అనేక కుబెర్నెట్స్ క్లస్టర్‌లు ఉంటే, దానిని విడిగా ఇన్‌స్టాల్ చేయడం సులభం అవుతుంది. మరోవైపు మీరు ఎల్లప్పుడూ ఉపయోగించవచ్చు అధికారిక హెల్మ్ చార్ట్ మరియు దీన్ని నేరుగా మీ క్లస్టర్‌లో ఇన్‌స్టాల్ చేయండి.

కీక్లోక్ డేటాను నిల్వ చేయడానికి మీకు డేటాబేస్ అవసరం. డిఫాల్ట్ h2 (అన్ని డేటా స్థానికంగా నిల్వ చేయబడుతుంది), కానీ దానిని ఉపయోగించడం కూడా సాధ్యమే postgres, mysql లేదా mariadb.
మీరు ఇప్పటికీ కీక్లోక్‌ని విడిగా ఇన్‌స్టాల్ చేయాలని నిర్ణయించుకుంటే, మీరు మరింత వివరణాత్మక సూచనలను కనుగొనవచ్చు అధికారిక డాక్యుమెంటేషన్.

ఫెడరేషన్ సెటప్

ముందుగా కొత్త రాజ్యాన్ని సృష్టిద్దాం. రాజ్యం అనేది మా అప్లికేషన్ యొక్క స్థలం. ప్రతి అప్లికేషన్ విభిన్న వినియోగదారులు మరియు అధికార సెట్టింగ్‌లతో దాని స్వంత రాజ్యాన్ని కలిగి ఉంటుంది. మాస్టర్ రాజ్యం కీక్లోక్ ద్వారానే ఉపయోగించబడుతుంది మరియు దానిని వేరే దేనికైనా ఉపయోగించడం తప్పు.

పత్రికా రాజ్యాన్ని జోడించండి

ఎంపిక
విలువ

పేరు
kubernetes

ప్రదర్శన పేరు
Kubernetes

HTML ప్రదర్శన పేరు
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes డిఫాల్ట్‌గా వినియోగదారు ఇమెయిల్ ధృవీకరించబడిందో లేదో తనిఖీ చేస్తుంది. మేము మా స్వంత LDAP సర్వర్‌ని ఉపయోగిస్తున్నందున, ఈ చెక్ దాదాపు ఎల్లప్పుడూ తిరిగి వస్తుంది false. Kubernetesలో ఈ ఎంపిక ప్రాతినిధ్యాన్ని నిలిపివేద్దాం:

క్లయింట్ స్కోప్‌లు -> ఇ-మెయిల్ -> మ్యాపర్లు -> ఇమెయిల్ ధృవీకరించబడింది (తొలగించు)

ఇప్పుడు సమాఖ్యను సెటప్ చేద్దాం; దీన్ని చేయడానికి, దీనికి వెళ్లండి:

వినియోగదారు సమాఖ్య -> ప్రొవైడర్‌ని జోడించండి... -> LDAP

FreeIPA కోసం సెట్టింగ్‌ల ఉదాహరణ ఇక్కడ ఉంది:

ఎంపిక
విలువ

కన్సోల్ ప్రదర్శన పేరు
freeipa.example.org

Vendor
Red Hat Directory Server

UUID LDAP లక్షణం
ipauniqueid

కనెక్షన్ URL
ldaps://freeipa.example.org

వినియోగదారులు DN
cn=users,cn=accounts,dc=example,dc=org

బైండ్ DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

బైండ్ క్రెడెన్షియల్
<password>

Kerberos ప్రమాణీకరణను అనుమతించండి:
on

కెర్బెరోస్ రాజ్యం:
EXAMPLE.ORG

సర్వర్ ప్రిన్సిపాల్:
HTTP/[email protected]

కీటాబ్:
/etc/krb5.keytab

యూజర్ keycloak-svc మా LDAP సర్వర్‌లో ముందుగానే సృష్టించాలి.

యాక్టివ్ డైరెక్టరీ విషయంలో, మీరు కేవలం ఎంచుకోవాలి విక్రేత: యాక్టివ్ డైరెక్టరీ మరియు అవసరమైన సెట్టింగ్‌లు స్వయంచాలకంగా ఫారమ్‌లోకి నమోదు చేయబడతాయి.

పత్రికా సేవ్

ఇప్పుడు మనం ముందుకు వెళ్దాం:

వినియోగదారు సమాఖ్య -> freeipa.example.org -> మ్యాపర్లు -> మొదటి పేరు

ఎంపిక
విలువ

Ldap లక్షణం
givenName

ఇప్పుడు గ్రూప్ మ్యాపింగ్‌ని ఎనేబుల్ చేద్దాం:

వినియోగదారు సమాఖ్య -> freeipa.example.org -> మ్యాపర్లు -> సృష్టించు

ఎంపిక
విలువ

పేరు
groups

మ్యాపర్ రకం
group-ldap-mapper

LDAP సమూహాలు DN
cn=groups,cn=accounts,dc=example,dc=org

వినియోగదారు సమూహాలు వ్యూహాన్ని పునరుద్ధరించండి
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

ఇప్పుడు ఫెడరేషన్ సెటప్ పూర్తయింది, క్లయింట్‌ని సెటప్ చేయడానికి వెళ్దాం.

క్లయింట్ సెటప్

కొత్త క్లయింట్‌ని (కీక్లోక్ నుండి వినియోగదారులను స్వీకరించే అప్లికేషన్) సృష్టిద్దాం. ముందుకు వెళ్దాం:

క్లయింట్లు -> సృష్టించు

ఎంపిక
విలువ

కస్టమర్ ఐడి
kubernetes

యాక్సెస్ రకం
confidenrial

రూట్ URL
http://kubernetes.example.org/

చెల్లుబాటు అయ్యే దారిమార్పు URIలు
http://kubernetes.example.org/*

అడ్మిన్ URL
http://kubernetes.example.org/

సమూహాల కోసం స్కోప్‌ను కూడా సృష్టిద్దాం:

క్లయింట్ స్కోప్‌లు -> సృష్టించు

ఎంపిక
విలువ

మూస
No template

పేరు
groups

పూర్తి సమూహ మార్గం
false

మరియు వారి కోసం మ్యాపర్‌ను సెటప్ చేయండి:

క్లయింట్ స్కోప్‌లు -> సమూహాలు -> మ్యాపర్లు -> సృష్టించు

ఎంపిక
విలువ

పేరు
groups

మ్యాపర్ రకం
Group membership

టోకెన్ దావా పేరు
groups

ఇప్పుడు మేము మా క్లయింట్ పరిధిలో మ్యాపింగ్ సమూహాన్ని ప్రారంభించాలి:

క్లయింట్లు -> కుబెర్నెట్స్ -> క్లయింట్ స్కోప్‌లు -> డిఫాల్ట్ క్లయింట్ స్కోప్‌లు

ఎంచుకోవడం సమూహాలు в అందుబాటులో ఉన్న క్లయింట్ స్కోప్‌లు, నొక్కండి ఎంపిక చేసిన జోడించండి

ఇప్పుడు మన అప్లికేషన్ యొక్క ప్రమాణీకరణను కాన్ఫిగర్ చేద్దాం, దీనికి వెళ్లండి:

క్లయింట్లు -> కుబెర్నెట్స్

ఎంపిక
విలువ

ఆథరైజేషన్ ప్రారంభించబడింది
ON

నొక్కుదాం సేవ్ మరియు దీనితో క్లయింట్ సెటప్ పూర్తయింది, ఇప్పుడు ట్యాబ్‌లో ఉంది

క్లయింట్లు -> కుబెర్నెట్స్ -> ఆధారాలను

మీరు పొందవచ్చు సీక్రెట్ మేము మరింత ఉపయోగిస్తాము.

కుబెర్నెట్‌లను కాన్ఫిగర్ చేస్తోంది

OIDC అధికారం కోసం కుబెర్నెట్‌లను సెటప్ చేయడం చాలా చిన్నవిషయం మరియు చాలా క్లిష్టంగా లేదు. మీరు చేయాల్సిందల్లా మీ OIDC సర్వర్ యొక్క CA ప్రమాణపత్రాన్ని ఉంచడం /etc/kubernetes/pki/oidc-ca.pem మరియు kube-apiserver కోసం అవసరమైన ఎంపికలను జోడించండి.
దీన్ని చేయడానికి, నవీకరించండి /etc/kubernetes/manifests/kube-apiserver.yaml మీ యజమానులందరిపై:

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

అలాగే, అప్‌డేట్ చేస్తున్నప్పుడు ఈ సెట్టింగ్‌లను కోల్పోకుండా ఉండేందుకు క్లస్టర్‌లో kubeadm కాన్ఫిగర్‌ని అప్‌డేట్ చేయండి:

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

ఇది కుబెర్నెట్స్ కాన్ఫిగరేషన్‌ను పూర్తి చేస్తుంది. మీరు మీ అన్ని కుబెర్నెట్స్ క్లస్టర్‌లలో ఈ దశలను పునరావృతం చేయవచ్చు.

ప్రారంభ అధికారం

ఈ దశల తర్వాత, మీరు ఇప్పటికే కాన్ఫిగర్ చేయబడిన OIDC అధికారంతో కూడిన Kubernetes క్లస్టర్‌ని కలిగి ఉంటారు. ఏకైక విషయం ఏమిటంటే, మీ వినియోగదారులకు ఇంకా కాన్ఫిగర్ చేయబడిన క్లయింట్ లేదా వారి స్వంత kubeconfig లేదు. ఈ సమస్యను పరిష్కరించడానికి, మీరు విజయవంతమైన అధికారం తర్వాత వినియోగదారులకు kubeconfig యొక్క ఆటోమేటిక్ పంపిణీని కాన్ఫిగర్ చేయాలి.

దీన్ని చేయడానికి, మీరు వినియోగదారుని ప్రమాణీకరించడానికి మరియు సిద్ధంగా ఉన్న kubeconfigని డౌన్‌లోడ్ చేయడానికి మిమ్మల్ని అనుమతించే ప్రత్యేక వెబ్ అప్లికేషన్‌లను ఉపయోగించవచ్చు. అత్యంత అనుకూలమైన వాటిలో ఒకటి కుబేరోలు, ఇది అన్ని కుబెర్నెట్స్ క్లస్టర్‌లను ఒకే కాన్ఫిగర్‌లో వివరించడానికి మరియు వాటి మధ్య సులభంగా మారడానికి మిమ్మల్ని అనుమతిస్తుంది.

Kuberosని కాన్ఫిగర్ చేయడానికి, kubeconfig కోసం టెంప్లేట్‌ను వివరించండి మరియు కింది పారామితులతో దీన్ని అమలు చేయండి:

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

మరింత వివరణాత్మక సమాచారం కోసం చూడండి వాడుక గితుబ్‌లో.

ఉపయోగించడం కూడా సాధ్యమే kubelogin మీరు వినియోగదారు కంప్యూటర్‌లో నేరుగా అధికారం ఇవ్వాలనుకుంటే. ఈ సందర్భంలో, వినియోగదారు స్థానిక హోస్ట్‌లో అధికార ఫారమ్‌తో బ్రౌజర్‌ను తెరుస్తారు.

ఫలితంగా kubeconfig వెబ్‌సైట్‌లో తనిఖీ చేయవచ్చు jwt.io. కేవలం విలువను కాపీ చేయండి users[].user.auth-provider.config.id-token మీ kubeconfig నుండి వెబ్‌సైట్‌లోని ఫారమ్‌కి మరియు వెంటనే ట్రాన్స్క్రిప్ట్‌ను స్వీకరించండి.

RBACని సెటప్ చేస్తోంది

RBACని కాన్ఫిగర్ చేస్తున్నప్పుడు, మీరు వినియోగదారు పేరు (ఫీల్డ్.) రెండింటినీ సూచించవచ్చు name jwt టోకెన్‌లో), మరియు ఒక్కో వినియోగదారు సమూహానికి (ఫీల్డ్ groups jwt టోకెన్‌లో). సమూహం కోసం హక్కులను సెటప్ చేయడానికి ఇక్కడ ఒక ఉదాహరణ ఉంది 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

RBAC కోసం మరిన్ని ఉదాహరణలు ఇందులో చూడవచ్చు అధికారిక Kubernetes డాక్యుమెంటేషన్

auth-proxyని సెట్ చేస్తోంది

అద్భుతమైన ప్రాజెక్ట్ ఉంది కీలాక్-గేట్ కీపర్, ఇది OIDC సర్వర్‌కు ప్రామాణీకరించే సామర్థ్యాన్ని వినియోగదారుకు అందించడం ద్వారా ఏదైనా అప్లికేషన్‌ను రక్షించడానికి మిమ్మల్ని అనుమతిస్తుంది. ఉదాహరణగా Kubernetes డాష్‌బోర్డ్‌ని ఉపయోగించి దీన్ని ఎలా కాన్ఫిగర్ చేయాలో నేను మీకు చూపిస్తాను:

డాష్‌బోర్డ్-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

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి