рдпрд╣ рд▓реЗрдЦ рдореМрдЬреВрджрд╛ рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ , рд▓реЗрдХрд┐рди 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.ymlkeycloak:
#
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рдлреЗрдбрд░реЗрд╢рди рд╕реЗрдЯрдЕрдк рдпрджрд┐ рд╕рдм рдареАрдХ рд╣реИ, рддреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдлрд▓ рдЖрдпрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛редрдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рдореВрд╣рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлреЗрдбрд░реЗрд╢рди -> ldap_localhost -> рдореИрдкрд░реНрд╕ -> рдХреНрд░рд┐рдПрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИрдореИрдкрд░ рдХреНрд░рд┐рдПрд╢рди рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк
рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреЗрдХреНрд▓реЛрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХреГрдд рд╣реЛрдЧрд╛ред рдореИрдВ рд▓рд╛рд▓ рд░рдВрдЧ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реВрдВрдЧрд╛редрдЧреНрд░рд╛рд╣рдХ -> рдмрдирд╛рдПрдБрдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрдЕрдк рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреВрдк рдмрдирд╛рдПрдВ:рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк -> рдмрдирд╛рдПрдВрд╕реНрдХреВрдк рдмрдирд╛рдирд╛ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк -> рд╕рдореВрд╣ -> рдореИрдкрд░-> рдмрдирд╛рдПрдБрд╣рдорд╛рд░реЗ рд╕рдореВрд╣реЛрдВ рдХреА рдореИрдкрд┐рдВрдЧ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯрд╕реНрдХреЛрдкреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ: рдЧреНрд░рд╛рд╣рдХ -> рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ -> рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ -> рдбрд┐рдлреЙрд▓реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдк рдЙрдкрд▓рдмреНрдз рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ рдореЗрдВ рд╕рдореВрд╣реЛрдВ рдХрд╛рдЪрдпрди рдХрд░реЗрдВ , рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЪрдпрдирд┐рдд рдЬреЛрдбрд╝реЗрдВ
рд╣рдореЗрдВ рдПрдХ рдЧреБрдкреНрдд рдорд┐рд▓рддрд╛ рд╣реИ (рдФрд░ рдЗрд╕реЗ рдереНрд░реЗрдб рдкрд░ рд▓рд┐рдЦреЗрдВ) рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред Keycloak рдореЗрдВ: рдЧреНрд░рд╛рд╣рдХ -> kubernetes -> рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ -> рдЧреБрдкреНрдд
рдпрд╣ рд╕реЗрдЯрдЕрдк рдХрд╛ рдЕрдВрдд рд╣реИ , рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬрдм рдПрдХ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА 403. рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ ред рдлрд┐рдХреНрд╕: рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреЛрдкреНрд╕ -> рднреВрдорд┐рдХрд╛рдПрдБ -> рдореИрдкрд░ -> рдмрдирд╛рдПрдБрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб
token.addAudience(token.getIssuedFor());
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 configkubectl 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.yamlenableInsecureLogin: 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:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
path: /
hosts:
- kubernetes-dashboard.example.org
tls:
- secretName: tls-keycloak
hosts:
- kubernetes-dashboard.example.org
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
ClientID: "kubernetes"
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
skipOpenidProviderTlsVerify: true
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"
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"
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
clientID: "kubernetes"
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
usernameClaim: "sub"
apiServerURL: "https://192.168.99.111:8443"
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-----
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рддреБрд░рдВрдд рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдХрдорд╛рдВрдб рдХреЗ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: