எல்டிஏபி அங்கீகாரத்தை குபெர்னெட்டஸுக்குக் கட்டுகிறோம்

எல்டிஏபி அங்கீகாரத்தை குபெர்னெட்டஸுக்குக் கட்டுகிறோம்

உங்கள் LDAP சேவையகத்துடன் Kubernetes ஐ இணைப்பதற்கும் பயனர்கள் மற்றும் குழுக்களின் இறக்குமதியை அமைப்பதற்கும் Keycloak ஐ எவ்வாறு பயன்படுத்துவது என்பது பற்றிய ஒரு சிறிய பயிற்சி. இது உங்கள் பயனர்களுக்கு RBAC ஐ அமைக்கவும், Kubernetes Dashboard மற்றும் தங்களை எவ்வாறு அங்கீகரிப்பது என்று தெரியாத பிற பயன்பாடுகளைப் பாதுகாக்க auth-proxy ஐப் பயன்படுத்தவும் உங்களை அனுமதிக்கும்.

கீக்ளோக் நிறுவல்

உங்களிடம் ஏற்கனவே LDAP சர்வர் உள்ளது என்று வைத்துக்கொள்வோம். அது ஆக்டிவ் டைரக்டரி, ஃப்ரீஐபிஏ, ஓபன்எல்டிஏபி அல்லது எதுவாக இருந்தாலும் இருக்கலாம். உங்களிடம் LDAP சேவையகம் இல்லையென்றால், கொள்கையளவில் நீங்கள் Keycloak இடைமுகத்தில் நேரடியாக பயனர்களை உருவாக்கலாம் அல்லது பொது oidc வழங்குநர்களைப் பயன்படுத்தலாம் (Google, Github, Gitlab), விளைவு கிட்டத்தட்ட ஒரே மாதிரியாக இருக்கும்.

முதலில், Keycloak ஐ நிறுவுவோம், நிறுவலை தனித்தனியாக அல்லது நேரடியாக Kubernetes கிளஸ்டருக்குச் செய்யலாம், ஒரு விதியாக, உங்களிடம் பல Kubernetes கிளஸ்டர்கள் இருந்தால், அதை தனித்தனியாக நிறுவுவது எளிதாக இருக்கும். மறுபுறம், நீங்கள் எப்போதும் பயன்படுத்தலாம் அதிகாரப்பூர்வ தலைமை விளக்கப்படம் அதை நேரடியாக உங்கள் கிளஸ்டரில் நிறுவவும்.

Keycloak தரவைச் சேமிக்க, உங்களுக்கு ஒரு தரவுத்தளம் தேவைப்படும். இயல்புநிலை ஆகும் h2 (அனைத்து தரவும் உள்ளூரில் சேமிக்கப்படுகிறது), ஆனால் அதைப் பயன்படுத்தவும் முடியும் postgres, mysql அல்லது mariadb.
நீங்கள் இன்னும் Keycloak ஐ தனித்தனியாக நிறுவ முடிவு செய்தால், நீங்கள் இன்னும் விரிவான வழிமுறைகளைக் காணலாம் அதிகாரப்பூர்வ ஆவணங்கள்.

கூட்டமைப்பு அமைப்பு

முதலில், ஒரு புதிய சாம்ராஜ்யத்தை உருவாக்குவோம். சாம்ராஜ்யம் என்பது எங்கள் பயன்பாட்டின் இடம். ஒவ்வொரு பயன்பாடும் வெவ்வேறு பயனர்கள் மற்றும் அங்கீகார அமைப்புகளுடன் அதன் சொந்த மண்டலத்தைக் கொண்டிருக்கலாம். முதன்மை சாம்ராஜ்யம் கீக்ளோக்கால் பயன்படுத்தப்படுகிறது மற்றும் அதை வேறு எதற்கும் பயன்படுத்துவது தவறானது.

செய்தியாளர் சாம்ராஜ்யத்தைச் சேர்க்கவும்

விருப்பத்தை
மதிப்பு

பெயர்
kubernetes

காட்சி பெயர்
Kubernetes

HTML காட்சி பெயர்
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

பயனரின் மின்னஞ்சல் உறுதிப்படுத்தப்பட்டதா இல்லையா என்பதை Kubernetes இயல்பாகச் சரிபார்க்கிறது. நாங்கள் எங்கள் சொந்த LDAP சேவையகத்தைப் பயன்படுத்துவதால், இந்தக் காசோலை எப்போதும் திரும்பும் false. குபெர்னெட்டஸில் இந்த அமைப்பின் பிரதிநிதித்துவத்தை முடக்குவோம்:

வாடிக்கையாளர் நோக்கங்கள் -> மின்னஞ்சல் -> வரைபடங்கள் -> மின்னஞ்சல் சரிபார்க்கப்பட்டது (அழி)

இப்போது கூட்டமைப்பை அமைப்போம், இதற்காக நாம் செல்வோம்:

பயனர் கூட்டமைப்பு -> வழங்குநரைச் சேர்… -> LDAP

FreeIPA க்கான ஒரு எடுத்துக்காட்டு அமைவு இங்கே:

விருப்பத்தை
மதிப்பு

கன்சோல் காட்சி பெயர்
freeipa.example.org

விற்பனையாளர்
Red Hat Directory Server

UUID LDAP பண்புக்கூறு
ipauniqueid

இணைப்பு URL
ldaps://freeipa.example.org

பயனர் டிஎன்
cn=users,cn=accounts,dc=example,dc=org

டிஎன் பைண்ட்
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 அங்கீகாரத்திற்காக Kubernetes அமைப்பது மிகவும் அற்பமானது மற்றும் மிகவும் சிக்கலான ஒன்று அல்ல. நீங்கள் செய்ய வேண்டியது உங்கள் 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 அங்கீகாரம் உள்ளமைக்கப்பட்ட குபெர்னெட்ஸ் கிளஸ்டர் உங்களிடம் ஏற்கனவே இருக்கும். ஒரே விஷயம் என்னவென்றால், உங்கள் பயனர்கள் இன்னும் ஒரு கிளையன்ட் உள்ளமைக்கப்படவில்லை, அதே போல் அவர்களின் சொந்த 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 க்கான கூடுதல் எடுத்துக்காட்டுகளைக் காணலாம் அதிகாரப்பூர்வ குபெர்னெட்ஸ் ஆவணங்கள்

அங்கீகார ப்ராக்ஸியை அமைத்தல்

ஒரு அற்புதமான திட்டம் உள்ளது திறவுகோல்-வாயில்காப்பாளர், இது OIDC சேவையகத்தை அங்கீகரிக்க பயனரை அனுமதிப்பதன் மூலம் எந்தவொரு பயன்பாட்டையும் பாதுகாக்க உங்களை அனுமதிக்கிறது. உதாரணமாக, குபெர்னெட்ஸ் டாஷ்போர்டைப் பயன்படுத்தி அதை எவ்வாறு அமைக்கலாம் என்பதை நான் உங்களுக்குக் காண்பிப்பேன்:

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

ஆதாரம்: www.habr.com

கருத்தைச் சேர்