เจ…เจธเฉ€เจ‚ Keycloak เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ Kubernetes เจฒเจˆ ActiveDirectory เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚

เจ‡เจน เจฒเฉ‡เจ– เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ 'เจคเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจ•เจฐเจจ เจฒเจˆ เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจฎเฉŒเจœเฉ‚เจฆเจพ, เจชเจฐ Microsoft ActiveDirectory เจฆเฉ‡ เจจเจพเจฒ เจฌเฉฐเจกเจฒ เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจชเฉ‚เจฐเจ• เจตเฉ€ เจนเฉˆเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉฑเจธเจพเจ‚เจ—เจพ เจ•เจฟ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเจฅเจพเจชเจฟเจค เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆ:

  • เจ•เฉ€เจ•เจฒเฉ‹เจ• เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจนเฉˆเฅค เจœเฉ‹ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฒเจˆ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจชเฉเจ†เจ‡เฉฐเจŸ เจ†เจซ เจเจ‚เจŸเจฐเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค LDAP เจ…เจคเฉ‡ OpenID เจธเจฎเฉ‡เจค เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒเจพเจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจพเจกเฉ€ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉˆเฅค
  • เจ•เฉ€เจ•เจฒเฉŒเจ• เจ—เฉ‡เจŸเจ•เฉ€เจชเจฐ - เจฐเจฟเจตเจฐเจธ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉ€เจ•เจฒเฉŒเจ• เจฆเฉเจ†เจฐเจพ เจ…เจงเจฟเจ•เจพเจฐ เจจเฉ‚เฉฐ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค
  • เจ—เฉˆเจ‚เจ—เจตเฉ‡เจ… - เจ‡เฉฑเจ• เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจœเฉ‹ kubectl เจฒเจˆ เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆ เจœเจฟเจธ เจจเจพเจฒ เจคเฉเจธเฉ€เจ‚ เจ“เจชเจจเจ†เจˆเจกเฉ€ เจฆเฉเจ†เจฐเจพ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ API เจจเจพเจฒ เจฒเฉŒเจ—เจ‡เจจ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจ•เจจเฉˆเจ•เจŸ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจ‡เจœเจพเจœเจผเจคเจพเจ‚ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจ…เจธเฉ€เจ‚ RBAC เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ / เจธเจฎเฉ‚เจน เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ‡เจธ เจฌเจพเจฐเฉ‡ เจฒเฉ‡เจ–เจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจšเฉเฉฑเจ•เจพ เจนเฉˆ, เจฎเฉˆเจ‚ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจจเจนเฉ€เจ‚ เจธเฉ‹เจšเจพเจ‚เจ—เจพเฅค เจธเจฎเฉฑเจธเจฟเจ† เจ‡เจน เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ…เจงเจฟเจ•เจพเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉ€เจฎเจค เจ•เจฐเจจ เจฒเจˆ RBAC เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฌเจพเจฐเฉ‡ เจ•เฉเจ เจจเจนเฉ€เจ‚ เจœเจพเจฃเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจชเจคเจพ เจšเจฒเจฆเจพ เจนเฉˆ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจกเจฟเจฒเฉ€เจตเจฐเฉ€ เจตเจฟเจงเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ…เจธเฉ€เจ‚ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ“เจชเจจเจ†เจˆเจกเฉ€ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจชเฉเจฐเจฆเจพเจคเจพ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡, เจœเฉ‹ เจ•เจนเฉ‡เจ—เจพ เจ•เจฟ เจ…เจœเจฟเจนเจพ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ, เจ…เจคเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ–เฉเจฆ เจ‰เจธเจจเฉ‚เฉฐ เจ…เจงเจฟเจ•เจพเจฐ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจธเจฟเจ–เจฒเจพเจˆ

  • เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจ•เจฒเฉฑเจธเจŸเจฐ เจœเจพเจ‚ เจฎเจฟเจจเฉ€เจ•เจฟเจŠเจฌ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€
  • เจเจ•เจŸเจฟเจต เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€
  • เจกเฉ‹เจฎเฉ‡เจจ:
    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

เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ‡เจจเจ—เจฐเฉˆเจธ เจ•เฉฐเจŸเจฐเฉ‹เจฒเจฐ เจฒเจˆ เจตเจฐเจคเจพเจ‚เจ—เฉ‡เฅค

เจ•เฉ€เจ•เจฒเฉŒเจ• เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ

เจฎเฉˆเจ‚ เจซเฉˆเจธเจฒเจพ เจ•เฉ€เจคเจพ เจนเฉˆ เจ•เจฟ เจธเจญ เจคเฉ‹เจ‚ เจ†เจธเจพเจจ เจคเจฐเฉ€เจ•เจพ เจนเฉˆ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ เจนเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ, เจ…เจฐเจฅเจพเจค เจนเฉˆเจฒเจฎ เจšเจพเจฐเจŸเฅค

เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเฉ‹:

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 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ Kubernetes เจฒเจˆ ActiveDirectory เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚

เจ†เจ‰ เจธเจฎเฉ‚เจนเจพเจ‚ เจฒเจˆ เจธเจ•เฉ‚เจช เจฌเจฃเจพเจˆเจ:

เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจ•เฉ‹เจช -> เจฌเจฃเจพเจ“

เจฆเจพเจ‡เจฐเจพ เจฌเจฃเจพเจ“เจ…เจธเฉ€เจ‚ Keycloak เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ Kubernetes เจฒเจˆ ActiveDirectory เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚

เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฒเจˆ เจ‡เฉฑเจ• เจฎเฉˆเจชเจฐ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเฉ‹:

เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจ•เฉ‹เจชเจธ โ€”> เจ—เจฐเฉเฉฑเจช โ€”> เจฎเฉˆเจชเจฐ โ€”> เจฌเจฃเจพเจ“

เจฎเฉˆเจชเจฐเจ…เจธเฉ€เจ‚ Keycloak เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ Kubernetes เจฒเจˆ ActiveDirectory เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚

เจธเจพเจกเฉ‡ เจธเจฎเฉ‚เจนเจพเจ‚ เจฆเฉ€ เจฎเฉˆเจชเจฟเฉฐเจ— เจจเฉ‚เฉฐ เจกเจฟเจซเฉŒเจฒเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจ•เฉ‹เจชเจพเจ‚ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹:

เจ•เจฒเจพเจ‡เฉฐเจŸเจธ โ€”> เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ โ€”> เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจ•เฉ‹เจชเจธ โ€”> เจกเจฟเจซเจพเจฒเจŸ เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจ•เฉ‹เจชเจธ
เจšเฉเจฃเฉ‹ เจ—เจฐเฉเฉฑเจช ะฒ เจ‰เจชเจฒเจฌเจง เจ—เจพเจนเจ• เจฆเจพเจ‡เจฐเฉ‡, เจชเฉเจฐเฉˆเจธ เจšเฉเจฃเจฟเจ† เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹

เจธเจพเจจเฉ‚เฉฐ เจ—เฉเจชเจค เจฎเจฟเจฒเจฆเจพ เจนเฉˆ (เจ…เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจงเจพเจ—เฉ‡ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‹) เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ•เฉ€เจ•เจฒเฉ‹เจ• เจตเจฟเฉฑเจš เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฒเจˆ เจตเจฐเจคเจพเจ‚เจ—เฉ‡:

เจ•เจฒเจพเจ‡เฉฐเจŸเจธ โ€”> 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();

เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจ•เฉ€เจคเฉ€ เจœเจพ เจฐเจนเฉ€ เจนเฉˆ

เจธเจพเจจเฉ‚เฉฐ เจ‡เจน เจฆเฉฑเจธเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ•เจฟ เจธเจพเจˆเจŸ เจคเฉ‹เจ‚ เจธเจพเจกเจพ เจฐเฉ‚เจŸ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจ•เจฟเฉฑเจฅเฉ‡ เจนเฉˆ, เจ…เจคเฉ‡ 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
...

เจชเฉเจฐเจฎเจพเจฃ-เจชเฉเจฐเจพเจ•เจธเฉ€ เจธเฉˆเฉฑเจŸ เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจตเฉˆเจฌ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฒเจˆ เจ•เฉ€เจ•เจฒเฉŒเจ• เจ—เฉ‡เจŸเจ•เฉ€เจชเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจ‡เจธ เจคเฉฑเจฅ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ เจ•เจฟ เจ‡เจน เจฐเจฟเจตเจฐเจธ เจชเฉเจฐเฉŒเจ•เจธเฉ€ เจชเฉฐเจจเฉ‡ เจจเฉ‚เฉฐ เจฆเจฟเจ–เจพเจ‰เจฃ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจ…เจงเจฟเจ•เจพเจฐเจค เจ•เจฐเฉ‡เจ—เฉ€, เจ‡เจน เจธเจฟเจฐเจฒเฉ‡เจ–เจพเจ‚ เจตเจฟเฉฑเจš เจ…เฉฐเจคเจฎ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจฌเจพเจฐเฉ‡ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจตเฉ€ เจญเฉ‡เจœ เจฆเฉ‡เจตเฉ‡เจ—เฉ€เฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ 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 เจธเจฎเฉ‚เจน เจตเจฟเฉฑเจš เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฒเจˆ เจ•เจฒเฉฑเจธเจŸเจฐ เจเจกเจฎเจฟเจจ เจ…เจงเจฟเจ•เจพเจฐ (เจธเจŸเฉˆเจ‚เจกเจฐเจก เจ•เจฒเฉฑเจธเจŸเจฐเจฐเฉ‹เจฒ เจ•เจฒเฉฑเจธเจŸเจฐ-เจเจกเจฎเจฟเจจ) เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค


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, เจธเจพเจจเฉ‚เฉฐ เจ•เฉ€เจ•เจฒเฉ‹เจ• 'เจคเฉ‡ เจฐเฉ€เจกเจพเจ‡เจฐเฉˆเจ•เจŸ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจธเจซเจฒ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจฒเฉŒเจ—เจ‡เจจ เจ•เฉ€เจคเฉ‡ เจกเฉˆเจธเจผเจฌเฉ‹เจฐเจก 'เจคเฉ‡ เจชเจนเฉเฉฐเจš เจœเจพเจตเจพเจ‚เจ—เฉ‡เฅค

เจ—เฉˆเจ‚เจ—เจตเฉ‡เจ… เจธเจฅเจพเจชเจจเจพ

เจธเจนเฉ‚เจฒเจค เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ—เฉˆเจ‚เจ—เจตเฉ‡เจ… เจœเฉ‹เฉœ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเฉ‹ เจ•เจฟ kubectl เจฒเจˆ เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจคเจฟเจ†เจฐ เจ•เจฐเฉ‡เจ—เจพ, เจœเจฟเจธเจฆเฉ€ เจฎเจฆเจฆ เจจเจพเจฒ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฆเฉ‡ เจ…เจงเฉ€เจจ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจœเจพเจตเจพเจ‚เจ—เฉ‡เฅค


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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹