අපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

මෙම ලිපිය දැනටමත් විස්තර කිරීමට ලියා ඇත පවතින, නමුත් මයික්‍රොසොෆ්ට් ඇක්ටිව් ඩිරෙක්ටරි සමඟ බණ්ඩලයේ විශේෂාංග ගැන කතා කරයි, සහ එය සම්පූර්ණ කරයි.

මෙම ලිපියෙන් මම ඔබට කියමි ස්ථාපනය කරන්නේ කෙසේද සහ වින්‍යාස කරන්නේ කෙසේද:

  • යතුරු පුවරුව විවෘත මූලාශ්‍ර ව්‍යාපෘතියකි. එය යෙදුම් සඳහා තනි පිවිසුම් ලක්ෂ්‍යයක් සපයයි. අප උනන්දු වන LDAP සහ OpenID ඇතුළු බොහෝ ප්‍රොටෝකෝල සමඟ ක්‍රියා කරයි.
  • යතුරු සළුව දොරටු පාලකයා - Keycloak හරහා අවසරය ඒකාබද්ධ කිරීමට ඔබට ඉඩ සලසන ප්‍රතිලෝම ප්‍රොක්සි යෙදුම.
  • ගැන්ග්වේ - ඔබට OpenID හරහා Kubernetes API වෙත ලොග් වී සම්බන්ධ විය හැකි kubectl සඳහා වින්‍යාසයක් ජනනය කරන යෙදුමකි.

Kubernetes හි අවසර ක්‍රියා කරන ආකාරය.

අපට RBAC භාවිතයෙන් පරිශීලක / කණ්ඩායම් අයිතිවාසිකම් කළමනාකරණය කළ හැකිය, මේ පිළිබඳව දැනටමත් ලිපි ගොන්නක් නිර්මාණය කර ඇත, මම මේ ගැන විස්තරාත්මකව වාසය නොකරමි. ගැටළුව වන්නේ පරිශීලක අයිතිවාසිකම් සීමා කිරීමට ඔබට RBAC භාවිතා කළ හැකි නමුත් Kubernetes පරිශීලකයින් ගැන කිසිවක් නොදනී. අපට Kubernetes හි පරිශීලක බෙදා හැරීමේ යාන්ත්‍රණයක් අවශ්‍ය බව පෙනේ. මෙය සිදු කිරීම සඳහා, අපි Kuberntes OpenID වෙත සැපයුම්කරුවෙකු එක් කරන්නෙමු, එවැනි පරිශීලකයෙකු සැබවින්ම පවතින බව පවසන අතර Kubernetes විසින්ම ඔහුට අයිතිවාසිකම් ලබා දෙනු ඇත.

සකස් කිරීම

  • ඔබට Kubernetes පොකුරක් හෝ minikube අවශ්ය වනු ඇත
  • සක්රීය නාමාවලිය
  • වසම්:
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • වසම් සඳහා සහතිකය හෝ ස්වයං අත්සන් සහතිකය

මම ස්වයං අත්සන් සහතිකයක් සාදා ගන්නේ කෙසේද යන්න ගැන කතා නොකරමි, ඔබට සහතික 2ක් සෑදිය යුතුය, මෙය *.example.org වසම සඳහා මූල (සහතික අධිකාරිය) සහ Wildcard සේවාදායකයා වේ.

ඔබට සහතික ලැබීමෙන් / නිකුත් කිරීමෙන් පසු, සේවාදායකයා Kubernetes වෙත එක් කළ යුතුය, මේ සඳහා අපි ඒ සඳහා රහසක් සාදන්නෙමු:

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

වම් කෙළවරේ ක්ලික් කරන්න රාජධානිය එක් කරන්න

යතුර
වටිනාකම

නම
කුබර්නෙට්ස්

ප්රදර්ශන නාමය
කුබර්නෙට්ස්

පරිශීලක ඊමේල් සත්‍යාපනය අබල කරන්න:
සේවාලාභී විෂය පථයන් —> විද්‍යුත් තැපෑල —> සිතියම් කරන්නන් —> විද්‍යුත් තැපෑල සත්‍යාපනය කරන ලදී (මකන්න)

අපි ActiveDirectory වෙතින් පරිශීලකයින් ආනයනය කිරීමට ෆෙඩරේෂන් පිහිටුවා ඇත, මම පහත තිරපිටපත් තබමි, එය වඩාත් පැහැදිලි වනු ඇතැයි මම සිතමි.

පරිශීලක සම්මේලනය -> සපයන්නා එක් කරන්න... -> ldap

සම්මේලනය පිහිටුවීමඅපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු
අපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

සියල්ල හොඳින් නම්, බොත්තම එබීමෙන් පසු සියලුම පරිශීලකයින් සමමුහුර්ත කරන්න පරිශීලකයින්ගේ සාර්ථක ආනයනය පිළිබඳ පණිවිඩයක් ඔබට පෙනෙනු ඇත.

ඊළඟට අපි අපේ කණ්ඩායම් සිතියම්ගත කළ යුතුයි

පරිශීලක සම්මේලනය --> ldap_localhost --> සිතියම්කරුවන් --> සාදන්න

සිතියම්කරුවෙකු නිර්මාණය කිරීමඅපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

සේවාලාභී සැකසුම

සේවාදායකයෙකු නිර්මාණය කිරීම අවශ්‍ය වේ, Keycloak අනුව, මෙය ඔහුගෙන් අවසර දෙනු ලබන යෙදුමකි. මම තිර පිටපතේ ඇති වැදගත් කරුණු රතු පැහැයෙන් ඉස්මතු කරමි.

ගනුදෙනුකරුවන් -> සාදන්න

සේවාලාභී සැකසුමඅපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

කණ්ඩායම් සඳහා ස්කූප් නිර්මාණය කරමු:

සේවාලාභී විෂය පථයන් -> නිර්මාණය කරන්න

විෂය පථය සාදන්නඅපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

ඔවුන් සඳහා සිතියම්කරුවෙකු සකසන්න:

සේවාලාභී විෂය පථයන් —> කණ්ඩායම් —> සිතියම්කරුවන් —> නිර්මාණය කරන්න

සිතියම්කරුඅපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

අපගේ කණ්ඩායම් සිතියම්ගත කිරීම පෙරනිමි සේවාදායක විෂය පථයට එක් කරන්න:

සේවාලාභීන් —> kubernetes —> Client Scopes —> Default Client Scopes
තෝරන්න කණ්ඩායම් в පවතින සේවාදායක විෂය පථයන්, ඔබන්න තෝරාගත් එකතු කරන්න

අපි Keycloak හි අවසරය සඳහා භාවිතා කරන රහස (සහ එය නූල් වෙත ලියන්න) ලබා ගනිමු:

සේවාලාභීන් —> 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();

Kubernetes වින්‍යාස කිරීම

වෙබ් අඩවියෙන් අපගේ මූල සහතිකය තිබෙන්නේ කොතැනද සහ 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
...

auth-proxy සැකසීම

ඔබගේ වෙබ් යෙදුම ආරක්ෂා කිරීමට ඔබට යතුරු පුවරුවේ දොරටු පාලකය භාවිතා කළ හැක. මෙම ප්‍රතිලෝම ප්‍රොක්සිය පිටුව පෙන්වීමට පෙර පරිශීලකයාට අවසර දෙනු ඇත යන කාරණයට අමතරව, එය ඔබ පිළිබඳ තොරතුරු ශීර්ෂකවල අවසාන යෙදුම වෙත ලබා දෙනු ඇත. මේ අනුව, ඔබගේ යෙදුම OpenID සඳහා සහය දක්වන්නේ නම්, පරිශීලකයා වහාම අවසර දෙනු ලැබේ. Kubernetes Dashboard හි උදාහරණය සලකා බලන්න

Kubernetes උපකරණ පුවරුව ස්ථාපනය කිරීම


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

values_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 වෙත හරවා යවනු ලබන අතර සාර්ථක අවසරයකදී අපි දැනටමත් පුරනය වී ඇති උපකරණ පුවරුව වෙත පිවිසෙනු ඇත.

gangway ස්ථාපනය

පහසුව සඳහා, ඔබට kubectl සඳහා වින්‍යාස ගොනුවක් ජනනය කරන කල්ලියක් එක් කළ හැකිය, එහි ආධාරයෙන් අපි අපගේ පරිශීලකයා යටතේ Kubernetes වෙත පිවිසෙනු ඇත.


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

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

මේ වගේ. වින්‍යාස ගොනුව වහාම බාගත කර විධාන කට්ටලයක් භාවිතයෙන් එය ජනනය කිරීමට ඔබට ඉඩ සලසයි:

අපි Keycloak භාවිතයෙන් Kubernetes වෙත ActiveDirectory අවසරය සවි කරමු

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න