Mamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Ity lahatsoratra ity dia nosoratana mba hanitarana ny efa misy, fa miresaka momba ny endrik'ilay fonosana miaraka amin'ny Microsoft ActiveDirectory, ary mameno azy io koa.

Amin'ity lahatsoratra ity dia hilaza aminao ny fomba fametrahana sy configure aho:

  • keycloak dia tetikasa open source. Izay manome teboka tokana ho an'ny fampiharana. Miara-miasa amin'ny protocols maro, anisan'izany ny LDAP sy OpenID izay mahaliana anay.
  • mpiandry vavahady keycloak - fampiharana proxy mivadika izay ahafahanao mampiditra fanomezan-dΓ lana amin'ny alΓ lan'ny Keycloak.
  • gangway - fampiharana mamorona config ho an'ny kubectl izay ahafahanao miditra sy mifandray amin'ny API Kubernetes amin'ny alΓ lan'ny OpenID.

Ahoana ny fiasan'ny fahazoan-dΓ lana amin'ny Kubernetes.

Afaka mitantana ny zon'ny mpampiasa / vondrona amin'ny alΓ lan'ny RBAC izahay, lahatsoratra maromaro no efa noforonina momba izany, tsy hiresaka amin'ny antsipiriany aho. Ny olana dia afaka mampiasa RBAC ianao hamerana ny zon'ny mpampiasa, saingy tsy mahalala na inona na inona momba ny mpampiasa i Kubernetes. Hita fa mila mekanika fanaterana mpampiasa ao amin'ny Kubernetes izahay. Mba hanaovana izany dia hanampy mpanome tolotra amin'ny Kuberntes OpenID izahay, izay hilaza fa tena misy ny mpampiasa toy izany, ary ny Kubernetes mihitsy no hanome azy ny zo.

Fiomanana

  • Mila cluster Kubernetes na minikube ianao
  • Active Directory
  • Domains:
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • Taratasy ho an'ny sehatra na taratasy fanamarinana nosoniavin'ny tena

Tsy hieritreritra ny fomba hamoronana certificat nosoniavin'ny tena aho, mila mamorona certificat 2 ianao, izany no fotony (Certificate Authority) sy mpanjifa wildcard ho an'ny domain *.example.org

Rehefa avy nahazo/mamoaka taratasy fanamarinana ianao dia tsy maintsy ampidirina ao amin'ny Kubernetes ny mpanjifa, noho izany dia mamorona tsiambaratelo ho azy izahay:

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

Avy eo dia hampiasa azy io ho an'ny mpanara-maso ny Ingress izahay.

Fametrahana Keycloak

Nanapa-kevitra aho fa ny fomba tsotra indrindra dia ny fampiasana vahaolana efa vita ho an'izany, dia ny sarin'ny familiana.

Mametraka ny tahiry ary manavao azy:

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

Mamorona rakitra keycloak.yml miaraka amin'ireto atiny manaraka ireto:

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

Fametrahana federasiona

Manaraka, mandehana any amin'ny tranonkala interface keycloak.example.org

Tsindrio eo amin'ny zorony havia Ampio fanjakana

Key
sarobidy

anarana
kubernetes

Anarana isehoana
Kubernetes

Atsaharo ny fanamarinana mailaka mpampiasa:
Saran'ny mpanjifa -> Email -> Mappers -> Email voamarina (Delete)

Nanangana federasiona izahay hanafatra mpampiasa avy amin'ny ActiveDirectory, hamela pikantsary etsy ambany aho, heveriko fa hazava kokoa izany.

Federasiona mpampiasa -> Ampio mpamatsy… -> ldap

Fametrahana federasionaMamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak
Mamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Raha tsara ny zava-drehetra, dia rehefa avy manindry ny bokotra Ampifanaraho ny mpampiasa rehetra hahita hafatra momba ny fanafarana mahomby ny mpampiasa ianao.

Avy eo dia mila manao sarintany ny vondrona misy antsika isika

Federasiona mpampiasa -> ldap_localhost -> Mappers -> Mamorona

Mamorona sarintanyMamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Fametrahana mpanjifa

Ilaina ny mamorona mpanjifa, raha ny Keycloak, dia fampiharana izay hahazo alalana avy aminy. Hanasongadina ireo teboka manan-danja amin'ny pikantsary amin'ny loko mena aho.

Mpanjifa -> Mamorona

Fametrahana mpanjifaMamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Andao hamorona scoupe ho an'ny vondrona:

Saran'ny mpanjifa -> Mamorona

Mamorona sehatraMamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Ary manangΓ na sarintany ho azy ireo:

Client Scopes -> vondrona -> Mappers -> Create

MapperMamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Ampio ny sarintany ny vondronay amin'ny Default Client Scopes:

Clients β€”> kubernetes β€”> Client Scopes β€”> Default Client Scopes
Mifidy isika vondrona Π² Sahan'ny mpanjifa misy, gazety Ampio voafantina

Mahazo ny tsiambaratelo izahay (ary soraty amin'ny kofehy) izay hampiasainay amin'ny alΓ lan'ny Keycloak:

Mpanjifa -> kubernetes -> Fanomezana fahazoan-dΓ lana -> tsiambaratelo
Izany dia mamita ny fananganana, saingy nanana hadisoana aho rehefa nahazo alalana 403, taorian'ny fanomezan-dΓ lana nahomby. Tatitra momba ny bug.

Ahitsio

Sahan'ny mpanjifa -> anjara -> Mappers -> Mamorona

MappersMamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Kaody script

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

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

Fametrahana Kubernetes

Mila mamaritra ny toerana misy ny taratasy fanamarinana fototra avy amin'ny tranokala, ary ny toerana misy ny mpamatsy OIDC.
Mba hanaovana izany, ovay ny rakitra /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
...

Fanavaozana ny config kubeadm ao amin'ny 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
...

Fametrahana auth-proxy

Azonao atao ny mampiasa keycloak gatekeeper mba hiarovana ny rindranasa tranonkalanao. Ho fanampin'ny hoe manome alalana ny mpampiasa ity proxy mivadika ity alohan'ny hampisehoana ny pejy, dia handefa fampahalalana momba anao amin'ny fampiharana farany amin'ny lohapejy ihany koa izy. Noho izany, raha manohana ny OpenID ny fampiharanao, dia mahazo alalana avy hatrany ny mpampiasa. Diniho ny ohatra momba ny Dashboard Kubernetes

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

Fametrahana zo fidirana:

Andao hamorona ClusterRoleBinding izay hanome zon'ny admin cluster (manara-penitra ClusterRole cluster-admin) ho an'ny mpampiasa ao amin'ny vondrona DataOPS.


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

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

Rehefa afaka izany, rehefa miezaka ny ho any kubernetes-dashboard.example.org, dia halefa any amin'ny Keycloak isika ary raha misy fanomezan-dΓ lana mahomby dia ho tonga any amin'ny Dashboard efa tafiditra.

fametrahana gangway

Ho fanamorana dia azonao atao ny manampy gangway izay hamokatra rakitra config ho an'ny kubectl, miaraka amin'ny fanampiana izay hidirantsika ao amin'ny Kubernetes eo ambany mpampiasa anay.


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

Toa izao. Mamela anao misintona avy hatrany ny fisie config ary mamorona azy amin'ny alΓ lan'ny baiko maromaro:

Mamehy ny fanomezan-dΓ lana ActiveDirectory amin'ny Kubernetes izahay amin'ny fampiasana Keycloak

Source: www.habr.com

Add a comment