Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

இந்தக் கட்டுரை ஏற்கனவே விரிவுபடுத்துவதற்காக எழுதப்பட்டுள்ளது இருக்கும், ஆனால் மைக்ரோசாஃப்ட் ஆக்டிவ் டைரக்டரியுடன் தொகுப்பின் அம்சங்களைப் பற்றி பேசுகிறது, மேலும் அதை நிறைவு செய்கிறது.

இந்த கட்டுரையில் எவ்வாறு நிறுவுவது மற்றும் கட்டமைப்பது என்பதை நான் உங்களுக்கு கூறுவேன்:

  • திறவுகோல் ஒரு திறந்த மூல திட்டமாகும். இது விண்ணப்பங்களுக்கான நுழைவுப் புள்ளியை வழங்குகிறது. நாங்கள் ஆர்வமாக உள்ள LDAP மற்றும் OpenID உட்பட பல நெறிமுறைகளுடன் வேலை செய்கிறது.
  • திறவுகோல் வாயில்காப்பாளர் - கீக்ளோக் மூலம் அங்கீகாரத்தை ஒருங்கிணைக்க உங்களை அனுமதிக்கும் ரிவர்ஸ் ப்ராக்ஸி பயன்பாடு.
  • கும்பல் வழி - ஓபன்ஐடி மூலம் குபெர்னெட்ஸ் ஏபிஐயுடன் நீங்கள் உள்நுழைந்து இணைக்கக்கூடிய kubectl க்கான கட்டமைப்பை உருவாக்கும் பயன்பாடு.

குபெர்னெட்ஸில் அனுமதிகள் எவ்வாறு செயல்படுகின்றன.

RBAC ஐப் பயன்படுத்தி பயனர் / குழு உரிமைகளை நாம் நிர்வகிக்கலாம், இதைப் பற்றி ஏற்கனவே ஒரு சில கட்டுரைகள் உருவாக்கப்பட்டுள்ளன, நான் இதைப் பற்றி விரிவாகக் கூறமாட்டேன். பிரச்சனை என்னவென்றால், பயனர் உரிமைகளைக் கட்டுப்படுத்த RBACஐப் பயன்படுத்தலாம், ஆனால் பயனர்களைப் பற்றி குபெர்னெட்டஸுக்கு எதுவும் தெரியாது. குபெர்னெட்ஸில் ஒரு பயனர் டெலிவரி மெக்கானிசம் தேவை என்று மாறிவிடும். இதைச் செய்ய, Kuberntes OpenID இல் ஒரு வழங்குநரைச் சேர்ப்போம், அத்தகைய பயனர் உண்மையில் இருக்கிறார் என்று கூறும், மேலும் Kubernetes தானே அவருக்கு உரிமைகளை வழங்கும்.

பயிற்சி

  • உங்களுக்கு குபெர்னெட்ஸ் கிளஸ்டர் அல்லது மினிகுப் தேவைப்படும்
  • செயலில் உள்ள அடைவு
  • களங்கள்:
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • டொமைன்களுக்கான சான்றிதழ் அல்லது சுய கையொப்பமிட்ட சான்றிதழ்

சுய கையொப்பமிடப்பட்ட சான்றிதழை எவ்வாறு உருவாக்குவது என்பதில் நான் கவனம் செலுத்த மாட்டேன், நீங்கள் 2 சான்றிதழ்களை உருவாக்க வேண்டும், இது *.example.org டொமைனுக்கான ரூட் (சான்றிதழ் ஆணையம்) மற்றும் வைல்டு கார்டு கிளையண்ட் ஆகும்.

நீங்கள் சான்றிதழ்களைப் பெற்ற பிறகு / வழங்கிய பிறகு, கிளையன்ட் குபெர்னெட்டஸில் சேர்க்கப்பட வேண்டும், இதற்காக நாங்கள் ஒரு ரகசியத்தை உருவாக்குகிறோம்:

kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem

அடுத்து, அதை எங்கள் இன்க்ரஸ் கன்ட்ரோலருக்குப் பயன்படுத்துவோம்.

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

இதற்கான ஆயத்த தீர்வுகளைப் பயன்படுத்துவதே எளிதான வழி என்று முடிவு செய்தேன், அதாவது ஹெல்ம் விளக்கப்படங்கள்.

களஞ்சியத்தை நிறுவி புதுப்பிக்கவும்:

helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update

பின்வரும் உள்ளடக்கத்துடன் keycloak.yml கோப்பை உருவாக்கவும்:

keycloak.yml

keycloak:
  # Имя администратора
  username: "test_admin"
  # Пароль администратор  
  password: "admin"
  # Эти флаги нужны что бы позволить загружать в Keycloak скрипты прямо через web морду. Это нам 
  понадобиться что бы починить один баг, о котором ниже.
  extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled" 
  # Включаем ingress, указываем имя хоста и сертификат который мы предварительно сохранили в secrets
  ingress:
    enabled: true 
    path: /
    annotations:
      kubernetes.io/ingress.class: nginx
      ingress.kubernetes.io/affinity: cookie
    hosts:
      - keycloak.example.org
    tls:
    - hosts:
        - keycloak.example.org
      secretName: tls-keycloak
  # Keycloak для своей работы требует базу данных, в тестовых целях я разворачиваю Postgresql прямо в Kuberntes, в продакшене так лучше не делать!
  persistence:
    deployPostgres: true
    dbVendor: postgres

postgresql:
  postgresUser: keycloak
  postgresPassword: ""
  postgresDatabase: keycloak
  persistence:
    enabled: true

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

அடுத்து, இணைய இடைமுகத்திற்குச் செல்லவும் keycloak.example.org

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

சாவி
மதிப்பு

பெயர்
குபர்னெட்ஸ்

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

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

ஆக்டிவ் டைரக்டரியிலிருந்து பயனர்களை இறக்குமதி செய்ய கூட்டமைப்பை அமைத்துள்ளோம், கீழே ஸ்கிரீன் ஷாட்களை விடுகிறேன், அது தெளிவாக இருக்கும் என்று நினைக்கிறேன்.

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

கூட்டமைப்பு அமைப்புKeycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்
Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

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

அடுத்து நமது குழுக்களை வரைபடமாக்க வேண்டும்

பயனர் கூட்டமைப்பு --> ldap_localhost --> மேப்பர்கள் --> உருவாக்கு

ஒரு வரைபடத்தை உருவாக்குதல்Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

கிளையண்ட் அமைப்பு

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

வாடிக்கையாளர்கள் -> உருவாக்கவும்

கிளையண்ட் அமைப்புKeycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

குழுக்களுக்கான ஸ்கூப்பை உருவாக்குவோம்:

வாடிக்கையாளர் நோக்கங்கள் -> உருவாக்கவும்

நோக்கத்தை உருவாக்குங்கள்Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

அவர்களுக்காக ஒரு வரைபடத்தை அமைக்கவும்:

வாடிக்கையாளர் நோக்கங்கள் —> குழுக்கள் —> வரைபடங்கள் —> உருவாக்கு

மேப்பர்Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

எங்கள் குழுக்களின் மேப்பிங்கை இயல்புநிலை கிளையன்ட் ஸ்கோப்பில் சேர்க்கவும்:

வாடிக்கையாளர்கள் —> kubernetes —> Client Scopes —> Default Client Scopes
நாம் தேர்வு செய்கிறோம் குழுக்கள் в கிடைக்கும் கிளையண்ட் ஸ்கோப்கள், அச்சகம் தேர்ந்தெடுக்கப்பட்டதைச் சேர்க்கவும்

கீக்ளோக்கில் அங்கீகாரத்திற்காகப் பயன்படுத்தும் ரகசியத்தைப் பெறுகிறோம் (அதை நூலில் எழுதுகிறோம்):

வாடிக்கையாளர்கள் —> kubernetes —> நற்சான்றிதழ்கள் —> இரகசியம்
இது அமைப்பை நிறைவு செய்கிறது, ஆனால் வெற்றிகரமான அங்கீகாரத்திற்குப் பிறகு, 403 என்ற பிழையைப் பெற்றபோது எனக்கு ஒரு பிழை ஏற்பட்டது. பிழை அறிக்கை.

சரி:

கிளையண்ட் ஸ்கோப்கள் —> பாத்திரங்கள் —> மேப்பர்கள் —> உருவாக்கு

மேப்பர்Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

ஸ்கிரிப்ட் குறியீடு

// add current client-id to token audience
token.addAudience(token.getIssuedFor());

// return token issuer as dummy result assigned to iss again
token.getIssuer();

குபெர்னெட்ஸை உள்ளமைக்கிறது

தளத்தில் இருந்து எங்களின் ரூட் சான்றிதழ் எங்கு உள்ளது மற்றும் OIDC வழங்குநர் எங்கு உள்ளது என்பதைக் குறிப்பிட வேண்டும்.
இதைச் செய்ய, /etc/kubernetes/manifests/kube-apiserver.yaml கோப்பைத் திருத்தவும்

kube-apiserver.yaml


...
spec:
  containers:
  - command:
    - kube-apiserver
...
    - --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
    - --oidc-client-id=kubernetes
    - --oidc-groups-claim=groups
    - --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
    - --oidc-username-claim=email
...

கிளஸ்டரில் kubeadm கட்டமைப்பைப் புதுப்பிக்கவும்:

kubeadmconfig

kubectl edit -n kube-system configmaps kubeadm-config


...
data:
  ClusterConfiguration: |
    apiServer:
      extraArgs:
        oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
        oidc-client-id: kubernetes
        oidc-groups-claim: groups
        oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
        oidc-username-claim: email
...

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

உங்கள் இணைய பயன்பாட்டைப் பாதுகாக்க, கீக்ளோக் கேட் கீப்பரைப் பயன்படுத்தலாம். இந்த தலைகீழ் ப்ராக்ஸி பக்கத்தைக் காண்பிக்கும் முன் பயனரை அங்கீகரிக்கும் என்பதுடன், அது உங்களைப் பற்றிய தகவலை தலைப்புகளில் உள்ள இறுதி பயன்பாட்டிற்கு அனுப்பும். எனவே, உங்கள் பயன்பாடு OpenID ஐ ஆதரித்தால், பயனர் உடனடியாக அங்கீகரிக்கப்படுவார். குபெர்னெட்ஸ் டாஷ்போர்டின் உதாரணத்தைக் கவனியுங்கள்

குபெர்னெட்ஸ் டாஷ்போர்டை நிறுவுகிறது


helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml

values_dashboard.yaml

enableInsecureLogin: true
service:
  externalPort: 80
rbac:
  clusterAdminRole: true
  create: true
serviceAccount:
  create: true
  name: 'dashboard-test'

அணுகல் உரிமைகளை அமைத்தல்:

DataOPS குழுவில் உள்ள பயனர்களுக்கு கிளஸ்டர் நிர்வாக உரிமைகளை (நிலையான ClusterRole cluster-admin) வழங்கும் ClusterRoleBinding ஐ உருவாக்குவோம்.


kubectl apply -f rbac.yaml

rbac.yaml


apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dataops_group
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: DataOPS

கீக்ளோக் கேட் கீப்பரை நிறுவவும்:


helm repo add gabibbo97 https://gabibbo97.github.io/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml

மதிப்புகள்_proxy.yaml



# Включаем ingress
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
  path: /
  hosts:
    - kubernetes-dashboard.example.org
  tls:
   - secretName: tls-keycloak
     hosts:
       - kubernetes-dashboard.example.org

# Говорим где мы будем авторизовываться у OIDC провайдера
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
# Имя клиента которого мы создали в Keycloak
ClientID: "kubernetes"
# Secret который я просил записать
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Куда перенаправить в случае успешной авторизации. Формат <SCHEMA>://<SERVICE_NAME>.><NAMESAPCE>.<CLUSTER_NAME>
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
# Пропускаем проверку сертификата, если у нас самоподписанный
skipOpenidProviderTlsVerify: true
# Настройка прав доступа, пускаем на все path если мы в группе DataOPS
rules:
  - "uri=/*|groups=DataOPS"

அதன் பிறகு, நீங்கள் செல்ல முயற்சிக்கும்போது kubernetes-dashboard.example.org, நாங்கள் Keycloak க்கு திருப்பி விடப்படுவோம், வெற்றிகரமான அங்கீகாரம் கிடைத்தால் ஏற்கனவே உள்நுழைந்துள்ள டாஷ்போர்டைப் பெறுவோம்.

கேங்வே நிறுவல்

வசதிக்காக, kubectl க்கான config கோப்பை உருவாக்கும் ஒரு கேங்வேயை நீங்கள் சேர்க்கலாம், அதன் உதவியுடன் நாங்கள் எங்கள் பயனரின் கீழ் Kubernetes இல் நுழைவோம்.


helm install --name gangway stable/gangway -f values_gangway.yaml

மதிப்புகள்_gangway.yaml


gangway:
  # Произвольное имя кластера
  clusterName: "my-k8s"
  # Где у нас OIDC провайдер
  authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
  tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
  audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
  # Теоритически сюда можно добавить groups которые мы замапили
  scopes: ["openid", "profile", "email", "offline_access"]
  redirectURL: "https://gangway.example.org/callback"
  # Имя клиента
  clientID: "kubernetes"
  # Секрет
  clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
  # Если оставить дефолтное значние, то за имя пользователя будет братья <b>Frist name</b> <b>Second name</b>, а при "sub" его логин
  usernameClaim: "sub"
  # Доменное имя или IP адресс API сервера
  apiServerURL: "https://192.168.99.111:8443"

# Включаем Ingress
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
  path: /
  hosts:
  - gangway.example.org
  tls:
  - secretName: tls-keycloak
    hosts:
      - gangway.example.org

# Если используем самоподписанный сертификат, то его(открытый корневой сертификат) надо указать.
trustedCACert: |-
 -----BEGIN CERTIFICATE-----
 MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
 -----END CERTIFICATE-----

இது போல் தெரிகிறது. config கோப்பை உடனடியாக பதிவிறக்கம் செய்து, கட்டளைகளின் தொகுப்பைப் பயன்படுத்தி அதை உருவாக்க உங்களை அனுமதிக்கிறது:

Keycloak ஐப் பயன்படுத்தி Kubernetes க்கு ActiveDirectory அங்கீகாரத்தை இணைக்கிறோம்

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

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