ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ืžืืžืจ ื–ื” ื ื›ืชื‘ ื›ื“ื™ ืœื”ืจื—ื™ื‘ ืืช ื”ื ื•ืฉื ืงื™ื™ื, ืื‘ืœ ืžื“ื‘ืจ ืขืœ ื”ืชื›ื•ื ื•ืช ืฉืœ ื”ื—ื‘ื™ืœื” ืขื Microsoft ActiveDirectory, ื•ื’ื ืžืฉืœื™ื ืื•ืชื•.

ื‘ืžืืžืจ ื–ื” ืืกืคืจ ืœื›ื ื›ื™ืฆื“ ืœื”ืชืงื™ืŸ ื•ืœื”ื’ื“ื™ืจ:

  • ื’ืœื™ืžืช ืžืคืชื— ื”ื•ื ืคืจื•ื™ืงื˜ ืงื•ื“ ืคืชื•ื—. ืžื” ืฉืžืกืคืง ื ืงื•ื“ืช ื›ื ื™ืกื” ืื—ืช ืœื™ื™ืฉื•ืžื™ื. ืขื•ื‘ื“ ืขื ืคืจื•ื˜ื•ืงื•ืœื™ื ืจื‘ื™ื, ื›ื•ืœืœ LDAP ื•-OpenID ืฉืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ื”ื.
  • ืฉื•ืžืจ ืกืฃ ื‘ืžืขื™ืœ ืžืคืชื— - ืืคืœื™ืงืฆื™ื™ืช ืคืจื•ืงืกื™ ื”ืคื•ืš ื”ืžืืคืฉืจืช ืœืš ืœืฉืœื‘ ื”ืจืฉืื•ืช ื“ืจืš Keycloak.
  • ื’ึทืžืœึธื” - ื™ื™ืฉื•ื ืฉืžื™ื™ืฆืจ ืงื•ื ืคื™ื’ื•ืจืฆื™ื” ืขื‘ื•ืจ kubectl ืฉืื™ืชื” ื ื™ืชืŸ ืœื”ื™ื›ื ืก ื•ืœื”ืชื—ื‘ืจ ืœ-Kubernetes API ื“ืจืš OpenID.

ื›ื™ืฆื“ ืคื•ืขืœื•ืช ื”ืจืฉืื•ืช ื‘-Kubernetes.

ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื ื”ืœ ืืช ื–ื›ื•ื™ื•ืช ื”ืžืฉืชืžืฉ/ื”ืงื‘ื•ืฆื” ื‘ืืžืฆืขื•ืช RBAC, ื›ื‘ืจ ื ื•ืฆืจื• ืขืœ ื–ื” ื—ื‘ื•ืจื” ืฉืœ ืžืืžืจื™ื, ืœื ืืชืขื›ื‘ ืขืœ ื–ื” ื‘ืคื™ืจื•ื˜. ื”ื‘ืขื™ื” ื”ื™ื ืฉืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-RBAC ื›ื“ื™ ืœื”ื’ื‘ื™ืœ ืืช ื–ื›ื•ื™ื•ืช ื”ืžืฉืชืžืฉ, ืื‘ืœ Kubernetes ืœื ื™ื•ื“ืข ื›ืœื•ื ืขืœ ืžืฉืชืžืฉื™ื. ืžืกืชื‘ืจ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืžื ื’ื ื•ืŸ ืžืกื™ืจืช ืžืฉืชืžืฉื™ื ื‘-Kubernetes. ืœืฉื ื›ืš ื ื•ืกื™ืฃ ืœ-Kuberntes OpenID ืกืคืง ืฉื™ื’ื™ื“ ืฉืžืฉืชืžืฉ ื›ื–ื” ื‘ืืžืช ืงื™ื™ื, ื•-Kubernetes ื‘ืขืฆืžื” ืชื™ืชืŸ ืœื• ืืช ื”ื–ื›ื•ื™ื•ืช.

ื”ื“ืจื›ื”

  • ืชื–ื“ืงืง ืœืืฉื›ื•ืœ Kubernetes ืื• ืžื™ื ื™ืงื•ื‘
  • ืฉืœ Active Directory
  • ื“ื•ืžื™ื™ื ื™ื:
    keycloak.example.org
    kubernetes-dashboard.example.org
    gangway.example.org
  • ืื™ืฉื•ืจ ืœื“ื•ืžื™ื™ื ื™ื ืื• ืื™ืฉื•ืจ ื‘ื—ืชื™ืžื” ืขืฆืžื™ืช

ืื ื™ ืœื ืืชืขื›ื‘ ืขืœ ืื™ืš ืœื™ืฆื•ืจ ืชืขื•ื“ื” ื‘ื—ืชื™ืžื” ืขืฆืžื™ืช, ืืชื” ืฆืจื™ืš ืœื™ืฆื•ืจ 2 ืชืขื•ื“ื•ืช, ื–ื” ื”ืฉื•ืจืฉ (ืจืฉื•ืช ื”ืื™ืฉื•ืจื™ื) ื•ืœืงื•ื— ื”ืชื•ื•ื™ื ื”ื›ืœืœื™ื™ื ืœื“ื•ืžื™ื™ืŸ *.example.org

ืœืื—ืจ ืงื‘ืœืช / ื”ื ืคืงืช ืื™ืฉื•ืจื™ื, ื™ืฉ ืœื”ื•ืกื™ืฃ ืืช ื”ืœืงื•ื— ืœ-Kubernetes, ืœืฉื ื›ืš ืื ื• ื™ื•ืฆืจื™ื ืขื‘ื•ืจื• ืกื•ื“:

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

ืœืื—ืจ ืžื›ืŸ, ื ืฉืชืžืฉ ื‘ื• ืขื‘ื•ืจ ื‘ืงืจ ื”-Ingress ืฉืœื ื•.

ื”ืชืงื ืช Keycloak

ื”ื—ืœื˜ืชื™ ืฉื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ื”ื™ื ืœื”ืฉืชืžืฉ ื‘ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื ืœื›ืš, ื›ืœื•ืžืจ ืชืจืฉื™ืžื™ ื”ื’ื”.

ื”ืชืงืŸ ืืช ื”ืžืื’ืจ ื•ืขื“ื›ืŸ ืื•ืชื•:

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

ื”ื’ื“ืจืช ื”ืคื“ืจืฆื™ื”ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak
ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ืื ื”ื›ืœ ื‘ืกื“ืจ, ืื– ืœืื—ืจ ืœื—ื™ืฆื” ืขืœ ื”ื›ืคืชื•ืจ ืกื ื›ืจืŸ ืืช ื›ืœ ื”ืžืฉืชืžืฉื™ื ืชืจืื” ื”ื•ื“ืขื” ืขืœ ื™ื™ื‘ื•ื โ€‹โ€‹ืžื•ืฆืœื— ืฉืœ ืžืฉืชืžืฉื™ื.

ื‘ืฉืœื‘ ื”ื‘ื ืขืœื™ื ื• ืœืžืคื•ืช ืืช ื”ืงื‘ื•ืฆื•ืช ืฉืœื ื•

ืคื“ืจืฆื™ื™ืช ื”ืžืฉืชืžืฉื™ื --> ldap_localhost --> ืžืืคื™ื --> ืฆื•ืจ

ื™ืฆื™ืจืช ืžืžืคื”ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ื”ื’ื“ืจืช ืœืงื•ื—

ื™ืฉ ืฆื•ืจืš ืœื™ืฆื•ืจ ืœืงื•ื—, ืžื‘ื—ื™ื ืช Keycloak ื–ื• ืืคืœื™ืงืฆื™ื” ืฉืชืื•ืฉืจ ืžืžื ื•. ืื“ื’ื™ืฉ ืืช ื”ื ืงื•ื“ื•ืช ื”ื—ืฉื•ื‘ื•ืช ื‘ืฆื™ืœื•ื ื”ืžืกืš ื‘ืื“ื•ื.

ืœืงื•ื—ื•ืช โ€”> ืฆื•ืจ

ื”ื’ื“ืจืช ืœืงื•ื—ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ื‘ื•ืื• ื ื™ืฆื•ืจ ืชืจื•ืžื” ืœืงื‘ื•ืฆื•ืช:

ื”ื™ืงืคื™ ืœืงื•ื— โ€”> ืฆื•ืจ

ืฆื•ืจ ื”ื™ืงืฃืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ื•ื”ื’ื“ืจ ืขื‘ื•ืจื ืžืคื”:

ื”ื™ืงืคื™ ืœืงื•ื— โ€”> ืงื‘ื•ืฆื•ืช โ€”> ืžืžืคื™ื โ€”> ืฆื•ืจ

Mapperืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ื”ื•ืกืฃ ืืช ื”ืžื™ืคื•ื™ ืฉืœ ื”ืงื‘ื•ืฆื•ืช ืฉืœื ื• ืœื”ื™ืงืคื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืฉืœ ืœืงื•ื—ื•ืช:

ืœืงื•ื—ื•ืช โ€”> kubernetes โ€”> ื”ื™ืงืคื™ ืœืงื•ื— โ€”> ื”ื™ืงืคื™ ืœืงื•ื— ื‘ืจื™ืจืช ืžื—ื“ืœ
ื‘ื—ืจ ืงื‘ื•ืฆื•ืช ะฒ ื”ื™ืงืคื™ ืœืงื•ื— ื–ืžื™ื ื™ืืœื—ืฅ ื”ื•ืกืฃ ื ื‘ื—ืจื™ื

ืื ื• ืžืงื‘ืœื™ื ืืช ื”ืกื•ื“ (ื•ื ื›ืชื•ื‘ ืื•ืชื• ืœืฉืจืฉื•ืจ) ื‘ื• ื ืฉืชืžืฉ ืœื”ืจืฉืื” ื‘-Keycloak:

ืœืงื•ื—ื•ืช โ€”> kubernetes โ€”> ืื™ืฉื•ืจื™ื โ€”> ืกื•ื“
ื–ื” ืžืฉืœื™ื ืืช ื”ื”ื’ื“ืจื”, ืื‘ืœ ื”ื™ื™ืชื” ืœื™ ืฉื’ื™ืื” ื›ืืฉืจ, ืœืื—ืจ ื”ืจืฉืื” ืžื•ืฆืœื—ืช, ืงื™ื‘ืœืชื™ ืฉื’ื™ืื” 403. ื“ื•ื— ืฉื’ื™ืื•ืช.

ืœืชืงืŸ:

ื”ื™ืงืคื™ ืœืงื•ื— โ€”> ืชืคืงื™ื“ื™ื โ€”> ืžืžืคื™ื โ€”> ืฆื•ืจ

ืžืžืคื”ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ืงื•ื“ ืกืงืจื™ืคื˜

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

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

ื”ื’ื“ืจืช Kubernetes

ืขืœื™ื ื• ืœืฆื™ื™ืŸ ื”ื™ื›ืŸ ื ืžืฆื ืื™ืฉื•ืจ ื”ืฉื•ืจืฉ ืฉืœื ื• ืžื”ืืชืจ, ื•ื”ื™ื›ืŸ ื ืžืฆื ืกืคืง ื”-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
...

ื”ื’ื“ืจืช ืื™ืฉื•ืจ ืคืจื•ืงืกื™

ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-keycloak gatekeeper ื›ื“ื™ ืœื”ื’ืŸ ืขืœ ื™ื™ืฉื•ื ื”ืื™ื ื˜ืจื ื˜ ืฉืœืš. ื‘ื ื•ืกืฃ ืœืขื•ื‘ื“ื” ืฉืคืจื•ืงืกื™ ื”ืคื•ืš ื–ื” ื™ืืฉืจ ืืช ื”ืžืฉืชืžืฉ ืœืคื ื™ ื”ืฆื’ืช ื”ืขืžื•ื“, ื”ื•ื ื’ื ื™ืขื‘ื™ืจ ืžื™ื“ืข ืขืœื™ืš ืœื™ื™ืฉื•ื ื”ืงืฆื” ื‘ื›ื•ืชืจื•ืช. ืœืคื™ื›ืš, ืื ื”ืืคืœื™ืงืฆื™ื” ืฉืœืš ืชื•ืžื›ืช ื‘-OpenID, ื”ืžืฉืชืžืฉ ืžื•ืจืฉื” ืžื™ื“. ืฉืงื•ืœ ืืช ื”ื“ื•ื’ืžื” ืฉืœ Kubernetes 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'

ื”ื’ื“ืจืช ื–ื›ื•ื™ื•ืช ื’ื™ืฉื”:

ื‘ื•ืื• ื ื™ืฆื•ืจ ClusterRoleBinding ืฉื™ืขื ื™ืง ื–ื›ื•ื™ื•ืช ืื“ืžื™ืŸ ืœืืฉื›ื•ืœ (ClusterRole cluster-admin ืกื˜ื ื“ืจื˜ื™) ืœืžืฉืชืžืฉื™ื ื‘ืงื‘ื•ืฆืช 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

ื”ืชืงืŸ 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"

ืื—ืจื™ ื–ื”, ื›ืฉืืชื” ืžื ืกื” ืœืœื›ืช ืœ kubernetes-dashboard.example.org, ื ืคื ื” ืืœ Keycloak ื•ื‘ืžืงืจื” ืฉืœ ื”ืจืฉืื” ืžื•ืฆืœื—ืช ื ื’ื™ืข ืœืœื•ื— ื”ืžื—ื•ื•ื ื™ื ืฉื›ื‘ืจ ืžื—ื•ื‘ืจ.

ื”ืชืงื ืช ืžืกืœื•ืœ

ืžื˜ืขืžื™ ื ื•ื—ื•ืช, ื ื™ืชืŸ ืœื”ื•ืกื™ืฃ gangway ืฉื™ื™ืฆื•ืจ ืงื•ื‘ืฅ ื”ื’ื“ืจื•ืช ืขื‘ื•ืจ kubectl, ื‘ืขื–ืจืชื• ื ื™ื›ื ืก ืœ-Kubernetes ืชื—ืช ื”ืžืฉืชืžืฉ ืฉืœื ื•.


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

ื ืจืื” ื›ื›ื”. ืžืืคืฉืจ ืœืš ืœื”ื•ืจื™ื“ ืžื™ื“ ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ื•ืœื™ืฆื•ืจ ืื•ืชื• ื‘ืืžืฆืขื•ืช ืกื˜ ืคืงื•ื“ื•ืช:

ืื ื• ืžื”ื“ืงื™ื ืืช ื”ืจืฉืืช ActiveDirectory ืœ-Kubernetes ื‘ืืžืฆืขื•ืช Keycloak

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”