Among gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Kini nga artikulo gisulat aron sa pagpalapad sa na anaa, apan naghisgot bahin sa mga bahin sa bundle nga adunay Microsoft ActiveDirectory, ug gidugangan usab kini.

Niini nga artikulo isulti ko kanimo kung giunsa ang pag-install ug pag-configure:

  • keycloak usa ka open source nga proyekto. Nga naghatag usa ka punto sa pagsulod alang sa mga aplikasyon. Naglihok uban sa daghang mga protocol, lakip ang LDAP ug OpenID diin kami interesado.
  • tigbantay sa ganghaan sa keycloak - reverse proxy nga aplikasyon nga nagtugot kanimo sa pag-integrate sa pagtugot pinaagi sa Keycloak.
  • gangway - usa ka aplikasyon nga nagmugna og config para sa kubectl diin ikaw maka log in ug makakonektar sa Kubernetes API pinaagi sa OpenID.

Giunsa pagtrabaho ang mga pagtugot sa Kubernetes.

Mahimo namon madumala ang mga katungod sa user / grupo gamit ang RBAC, usa ka hugpong sa mga artikulo ang nahimo na bahin niini, dili ko kini hisgotan sa detalye. Ang problema mao nga mahimo nimong gamiton ang RBAC aron mapugngan ang mga katungod sa tiggamit, apan ang Kubernetes wala’y nahibal-an bahin sa mga tiggamit. Mogawas nga nanginahanglan kami usa ka mekanismo sa pagpadala sa gumagamit sa Kubernetes. Aron mahimo kini, magdugang kami usa ka provider sa Kuberntes OpenID, nga mag-ingon nga ang ingon nga tiggamit naglungtad gyud, ug ang Kubernetes mismo ang maghatag kaniya sa mga katungod.

Training

  • Kinahanglan nimo ang Kubernetes cluster o minikube
  • Active Directory
  • Mga natad:
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • Sertipiko alang sa mga domain o gipirmahan sa kaugalingon nga sertipiko

Dili ko maghunahuna kung giunsa paghimo ang usa ka sertipiko nga gipirmahan sa kaugalingon, kinahanglan nimo nga maghimo 2 nga mga sertipiko, kini ang gamut (Certificate Authority) ug kliyente sa wildcard alang sa *.example.org nga domain

Pagkahuman nimo makadawat / mag-isyu sa mga sertipiko, ang kliyente kinahanglan idugang sa Kubernetes, alang niini naghimo kami usa ka sekreto alang niini:

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

Sunod, atong gamiton kini alang sa atong Ingress controller.

Pag-instalar sa Keycloak

Nakahukom ko nga ang labing kadali nga paagi mao ang paggamit sa mga andam nga solusyon alang niini, nga mao ang mga tsart sa timon.

I-install ang repository ug i-update kini:

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

Paghimo og keycloak.yml file nga adunay mosunod nga sulod:

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

Pag-setup sa Federation

Sunod, adto sa web interface keycloak.example.org

Pag-klik sa wala nga suok Idugang ang gingharian

Key
bili

ngalan
mga kubernetes

Ipakita ang Ngalan
Kubernetes

I-disable ang pag-verify sa email sa user:
Mga sakup sa kliyente -> Email -> Mga Mapper -> Gipamatud-an ang email (Pagtangtang)

Nagtukod kami og federation aron sa pag-import sa mga tiggamit gikan sa ActiveDirectory, akong ibilin ang mga screenshot sa ubos, sa akong hunahuna kini mahimong mas klaro.

User federation -> Add provider… -> ldap

Pag-setup sa FederationAmong gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak
Among gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Kung maayo ang tanan, pagkahuman sa pagpindot sa buton I-synchronize ang tanan nga tiggamit imong makita ang usa ka mensahe mahitungod sa malampuson nga import sa mga tiggamit.

Sunod kinahanglan namon nga mapa ang among mga grupo

User federation -> ldap_localhost -> Mappers -> Create

Paghimo og mapperAmong gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Pag-setup sa kliyente

Kinahanglan nga maghimo usa ka kliyente, sa termino sa Keycloak, kini usa ka aplikasyon nga awtorisado gikan kaniya. Akong i-highlight ang mga importanteng punto sa screenshot nga pula.

Mga kliyente -> Paghimo

Pag-setup sa kliyenteAmong gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Maghimo kita og scoupe para sa mga grupo:

Mga Saklaw sa Kliyente -> Paghimo

Paghimo og scopeAmong gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Ug pagbutang ug mapper alang kanila:

Mga Saklaw sa Kliyente -> mga grupo -> Mga Mapper -> Paghimo

MapperAmong gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Idugang ang pagmapa sa among mga grupo sa Default Client Scopes:

Mga Kliyente β€”> kubernetes β€”> Mga Saklaw sa Kliyente β€”> Default nga Saklaw sa Kliyente
Pagpili mga grupo Π² Anaa nga mga Kasangkaran sa Kliyentei-klik Idugang ang pinili

Nakuha namon ang sekreto (ug isulat kini sa hilo) nga among gamiton alang sa pagtugot sa Keycloak:

Mga kliyente -> kubernetes -> Mga Kredensyal -> Sekreto
Nakompleto niini ang setup, apan naa koy sayop sa dihang, human sa malampusong pagtugot, nakadawat ko og sayop 403. Ulat sa bug.

ayo:

Mga Saklaw sa Kliyente -> mga tahas -> Mga Mapper -> Paghimo

Mga MapperAmong gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Kodigo sa Iskrip

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

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

Pag-configure sa Kubernetes

Kinahanglan namong ipiho kung asa nahimutang ang among root certificate gikan sa site, ug asa nahimutang ang OIDC provider.
Aron mahimo kini, usba ang file /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
...

I-update ang kubeadm config sa cluster:

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

Pagbutang ug auth-proxy

Mahimo nimong gamiton ang keycloak gatekeeper aron mapanalipdan ang imong aplikasyon sa web. Dugang pa sa kamatuoran nga kining reverse proxy magtugot sa user sa dili pa ipakita ang panid, ipasa usab niini ang impormasyon bahin kanimo ngadto sa end application sa mga header. Busa, kung ang imong aplikasyon nagsuporta sa OpenID, nan ang user awtorisado dayon. Tagda ang pananglitan sa Kubernetes Dashboard

Pag-instalar sa Kubernetes Dashboard


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'

Pagbutang sa mga katungod sa pag-access:

Magbuhat ta ug ClusterRoleBinding nga maghatag ug cluster admin rights (standard ClusterRole cluster-admin) para sa mga user sa DataOPS group.


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

I-install ang keycloak gatekeeper:


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"

Human niana, sa diha nga ikaw mosulay sa pag-adto sa kubernetes-dashboard.example.org, kita i-redirect ngadto sa Keycloak ug sa kaso sa malampuson nga pagtugot kita makaadto sa Dashboard nga naka-log in na.

pag-instalar sa gangway

Alang sa kasayon, mahimo nimong idugang ang usa ka gangway nga makamugna og config file para sa kubectl, uban ang tabang diin kita makasulod sa Kubernetes ubos sa atong user.


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

Murag mao ni. Nagtugot kanimo sa pag-download dayon sa config file ug paghimo niini gamit ang usa ka set sa mga sugo:

Among gipalig-on ang pagtugot sa ActiveDirectory sa Kubernetes gamit ang Keycloak

Source: www.habr.com

Idugang sa usa ka comment