የቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

ይህ ጽሑፍ የተፃፈው ቀደም ሲል የነበረውን ለማስፋት ነው። ነባር, ነገር ግን ስለ ቅርቅቡ ባህሪያት ከማይክሮሶፍት አክቲቭ ዳይሬክቶሪ ጋር ይነጋገራል, እና እንዲሁም ይሟላል.

በዚህ ጽሑፍ ውስጥ እንዴት መጫን እና ማዋቀር እንደሚችሉ እነግርዎታለሁ-

  • ቁልፍ ካባ ክፍት ምንጭ ፕሮጀክት ነው። ለመተግበሪያዎች አንድ ነጠላ ነጥብ የሚያቀርበው። እኛ የምንፈልገውን LDAP እና OpenIDን ጨምሮ ከብዙ ፕሮቶኮሎች ጋር ይሰራል።
  • ቁልፍ ካባ በረኛ - ፈቃድን በ Keycloak በኩል እንዲያዋህዱ የሚያስችልዎ የተገላቢጦሽ ፕሮክሲ መተግበሪያ።
  • ጋንግዌይ - ለ kubectl ውቅረት የሚያመነጭ መተግበሪያ በ OpenID በኩል ከኩበርኔትስ ኤፒአይ ጋር ገብተው መገናኘት ይችላሉ።

ፈቃዶች በኩበርኔትስ ውስጥ እንዴት እንደሚሠሩ።

RBAC ን በመጠቀም የተጠቃሚ / የቡድን መብቶችን ማስተዳደር እንችላለን ፣ ስለዚህ ጉዳይ ብዙ መጣጥፎች ተፈጥረዋል ፣ በዚህ ላይ በዝርዝር አልቀመጥም። ችግሩ የተጠቃሚ መብቶችን ለመገደብ RBAC ን መጠቀም ትችላለህ ነገር ግን Kubernetes ስለተጠቃሚዎች ምንም የሚያውቀው ነገር የለም። በ Kubernetes ውስጥ የተጠቃሚ ማቅረቢያ ዘዴን እንፈልጋለን። ይህንን ለማድረግ አቅራቢን ወደ Kuberntes OpenID እንጨምራለን, እሱም እንደዚህ አይነት ተጠቃሚ በእርግጥ እንዳለ ይናገራል, እና Kubernetes እራሱ መብቶቹን ይሰጠዋል.

ዝግጅት

  • የኩበርኔትስ ክላስተር ወይም ሚኒኩቤ ያስፈልግዎታል
  • የ Active Directory
  • ጎራዎች፡
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • ለጎራዎች የምስክር ወረቀት ወይም በራስ የተፈረመ የምስክር ወረቀት

በራስ የተፈረመ ሰርተፍኬት እንዴት መፍጠር እንደሚቻል ላይ አልቆይም ፣ 2 የምስክር ወረቀቶችን መፍጠር ያስፈልግዎታል ፣ ይህ የ * .example.org ጎራ ስር (የምስክር ወረቀት ባለስልጣን) እና የዱር ካርድ ደንበኛ ነው።

የምስክር ወረቀቶችን ከተቀበሉ / ከሰጡ በኋላ ደንበኛው ወደ Kubernetes መታከል አለበት ፣ ለዚህም ምስጢር እንፈጥራለን-

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

በመቀጠል, ለ Ingress መቆጣጠሪያችን እንጠቀማለን.

የቁልፍ ካባ መጫኛ

በጣም ቀላሉ መንገድ ለዚህ ዝግጁ የሆኑ መፍትሄዎችን ማለትም የሄልም ቻርቶችን መጠቀም እንደሆነ ወሰንኩ.

ማከማቻውን ይጫኑ እና ያዘምኑት፡-

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

መጠሪያው ስም
ኩባንያቶች

የተጠቃሚ ኢሜይል ማረጋገጫን አሰናክል፡
የደንበኛ ወሰን -> ኢሜል -> ካርታዎች -> ኢሜል የተረጋገጠ (ሰርዝ)

ተጠቃሚዎችን ከActiveDirectory ለማስመጣት ፌዴሬሽን አቋቁመናል፣ከዚህ በታች ቅጽበታዊ ገጽ እይታዎችን እተወዋለሁ፣ የበለጠ ግልጽ ይሆናል ብዬ አስባለሁ።

የተጠቃሚ ፌዴሬሽን —> አቅራቢ አክል… —> ldap

ፌዴሬሽን ማዋቀርየቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።
የቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

ሁሉም ነገር ደህና ከሆነ አዝራሩን ከተጫኑ በኋላ ሁሉንም ተጠቃሚዎች ያመሳስሉ ስለተጠቃሚዎች ስኬታማ ማስመጣት መልእክት ያያሉ።

በመቀጠል የቡድኖቻችንን ካርታ ማዘጋጀት አለብን

የተጠቃሚ ፌዴሬሽን --> ldap_localhost --> ካርታዎች --> ፍጠር

ካርታ መፍጠርየቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

የደንበኛ ማዋቀር

ደንበኛን መፍጠር አስፈላጊ ነው, ከ Keycloak አንፃር, ይህ ከእሱ የተፈቀደለት መተግበሪያ ነው. በቀይ ቅፅበታዊ ገጽ እይታ ውስጥ ያሉትን አስፈላጊ ነጥቦች አጉልቻለሁ።

ደንበኞች -> ይፍጠሩ

የደንበኛ ማዋቀርየቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

ለቡድኖች ስካውፕ እንፍጠር፡-

የደንበኛ ወሰን -> ፍጠር

ወሰን ይፍጠሩየቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

እና ካርታ አዘጋጅላቸው፡-

የደንበኛ ወሰን -> ቡድኖች -> ካርታዎች -> ይፍጠሩ

ካርታየቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

የቡድኖቻችንን ካርታ ወደ ነባሪ የደንበኛ ወሰን ያክሉ፡

ደንበኞች -> kubernetes -> የደንበኛ ወሰን -> ነባሪ የደንበኛ ወሰን
እንመርጣለን ቡድኖች в የሚገኙ የደንበኛ ወሰን, ይጫኑ የተመረጠውን ያክሉ

በ Keycloak ውስጥ ለፍቃድ የምንጠቀምበትን ምስጢሩን አግኝተናል (እና ወደ ክር እንጽፋለን)

ደንበኞች -> kubernetes -> ምስክርነቶች -> ሚስጥር
ይህ ማዋቀሩን ያጠናቅቃል, ነገር ግን ከተሳካ ፍቃድ በኋላ, ስህተት 403 ሲደርሰው ስህተት አጋጥሞኛል. የሳንካ ሪፖርት.

አስተካክል፡

የደንበኛ ወሰን -> ሚናዎች -> ካርታዎች -> ይፍጠሩ

ካርታየቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

የስክሪፕት ኮድ

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

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

Kubernetes በማዋቀር ላይ

የእኛ ስርወ ሰርተፊኬት ከጣቢያው የት እንደሚገኝ እና የኦኢዲሲ አገልግሎት አቅራቢው የት እንደሚገኝ መግለፅ አለብን።
ይህንን ለማድረግ ፋይሉን ያርትዑ /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ን የሚደግፍ ከሆነ ተጠቃሚው ወዲያውኑ ተፈቅዶለታል። የኩበርኔትስ ዳሽቦርድ ምሳሌን ተመልከት

Kubernetes ዳሽቦርድ በመጫን ላይ


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

እሴቶች_ዳሽቦርድ.yaml

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

የመዳረሻ መብቶችን ማቀናበር፡

በDataOPS ቡድን ውስጥ ላሉ ተጠቃሚዎች የክላስተር አስተዳዳሪ መብቶችን (standard 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ወደ ኪሎክ እንመራለን እና ከተሳካ ፈቃድ ወደ ገባን ዳሽቦርድ እንሄዳለን።

የጋንግዌይ መጫኛ

ለመመቻቸት, ለ kubectl የውቅር ፋይል የሚያመነጭ ጋንግዌይ ማከል ይችላሉ, በእሱ እርዳታ በተጠቃሚዎቻችን ወደ 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-----

ይህን ይመስላል። የውቅር ፋይሉን ወዲያውኑ እንዲያወርዱ እና የትእዛዞችን ስብስብ በመጠቀም እንዲያመነጩ ይፈቅድልዎታል።

የቁልፍ ክሎክን በመጠቀም የActiveDirectory ፍቃድን ወደ ኩበርኔትስ እንሰጣለን።

ምንጭ: hab.com

አስተያየት ያክሉ