рд╣рдо Keycloak рдХреЗ рд╕рд╛рде Kubernetes рдХреЗ рд▓рд┐рдП ActiveDirectory рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рддреЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ

рдпрд╣ рд▓реЗрдЦ рдореМрдЬреВрджрд╛ рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ , рд▓реЗрдХрд┐рди Microsoft ActiveDirectory рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рдХ рднреА рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

  • рдХреАрдХреНрд▓реЛрдХ рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ LDAP рдФрд░ OpenID рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
  • Keycloak рджреНрд╡рд╛рд░рдкрд╛рд▓ - рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдЖрдкрдХреЛ Keycloak рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  • рдЧреИрдВрдЧрд╡реЗ - рд╡рд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдХреБрдмреЗрдЯреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдУрдкрдирдЖрдИрдбреА рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХрд╛рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред


рд╣рдо RBAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рд╕рдореВрд╣ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рдкрд╣рд▓реЗ рд╣реА рдмрди рдЪреБрдХреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RBAC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 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

рдЖрдЧреЗ рд╣рдо рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЕрдкрдиреЗ Ingress рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ

Keycloak рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдкрддрд╡рд╛рд░ рдЪрд╛рд░реНрдЯред

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

helm repo add codecentric https://codecentric.imtqy.com/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
рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдирд╛рдоKubernetes

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдИрдореЗрд▓ рдкреБрд╖реНрдЯрд┐ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдЕрдХреНрд╖рдо рдХрд░реЗрдВ:
рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ -> рдИрдореЗрд▓ -> рдореИрдкрд░реНрд╕ -> рдИрдореЗрд▓ рд╕рддреНрдпрд╛рдкрд┐рдд (рд╣рдЯрд╛рдПрдВ) рд╣рдо

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ ActiveDirectory рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рд╕рдВрдШ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╣рд╛рд╕рдВрдШ -> рдкреНрд░рджрд╛рддрд╛ рдЬреЛрдбрд╝реЗрдВ ... -> ldap

рдлреЗрдбрд░реЗрд╢рди рд╕реЗрдЯрдЕрдк



рдпрджрд┐ рд╕рдм рдареАрдХ рд╣реИ, рддреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдлрд▓ рдЖрдпрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рдореВрд╣

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЗрдбрд░реЗрд╢рди -> ldap_localhost -> рдореИрдкрд░реНрд╕ -> рдХреНрд░рд┐рдПрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдореИрдкрд░ рдХреНрд░рд┐рдПрд╢рди


рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк


рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреЗрдХреНрд▓реЛрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХреГрдд рд╣реЛрдЧрд╛ред рдореИрдВ рд▓рд╛рд▓ рд░рдВрдЧ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реВрдВрдЧрд╛ред

рдЧреНрд░рд╛рд╣рдХ -> рдмрдирд╛рдПрдБ

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк


рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреВрдк рдмрдирд╛рдПрдВ:

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк -> рдмрдирд╛рдПрдВ

рд╕реНрдХреВрдк рдмрдирд╛рдирд╛


рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк -> рд╕рдореВрд╣ -> рдореИрдкрд░

-> рдмрдирд╛рдПрдБ

рдореИрдкрд░


рд╣рдорд╛рд░реЗ рд╕рдореВрд╣реЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ

рд╕реНрдХреЛрдкреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ: рдЧреНрд░рд╛рд╣рдХ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ -> рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ -> рдбрд┐рдлреЙрд▓реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк рдЙрдкрд▓рдмреНрдз рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдХрд╛
рдЪрдпрди рдХрд░реЗрдВ , рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЪрдпрдирд┐рдд рдЬреЛрдбрд╝реЗрдВ рд╣рдореЗрдВ рдПрдХ рдЧреБрдкреНрдд рдорд┐рд▓рддрд╛ рд╣реИ (рдФрд░ рдЗрд╕реЗ рдереНрд░реЗрдб рдкрд░ рд▓рд┐рдЦреЗрдВ) рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред Keycloak рдореЗрдВ: рдЧреНрд░рд╛рд╣рдХ -> kubernetes -> рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ -> рдЧреБрдкреНрдд рдпрд╣ рд╕реЗрдЯрдЕрдк рдХрд╛ рдЕрдВрдд рд╣реИ , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬрдм рдПрдХ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА 403. рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ ред рдлрд┐рдХреНрд╕: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ -> рднреВрдорд┐рдХрд╛рдПрдБ -> рдореИрдкрд░ -> рдмрдирд╛рдПрдБ










рдореИрдкрд░


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб
// 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 config:

kubeadm config
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'


рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░рдирд╛:


рдПрдХ ClusterRoleBinding рдмрдирд╛рдПрдБ рдЬреЛ DataOPS рд╕рдореВрд╣ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░ (рдорд╛рдирдХ ClusterRole рдХреНрд▓рд╕реНрдЯрд░-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ) рджреЗрдЧрд╛ред


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.imtqy.com/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 рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрджрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рдЧреИрдВрдЧрд╡реЗ рдХреА рд╕реНрдерд╛рдкрдирд╛


рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЧреИрдВрдЧрд╡реЗ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреБрдмреЗрдЯреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рдХреБрдмреЗрд░рдиреЗрдЯ рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдВрдЧреЗред


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


рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреБрд░рдВрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


All Articles