• Русский
  • Настройка Ingress и TLS

    В этом руководстве описано, как опубликовать экземпляр Keycloak во внешнем доступе через Kubernetes Ingress с включенным шифрованием TLS, что требуется для production-развертываний.

    Режимы настройки TLS

    Alauda Build of Keycloak поддерживает два отдельных режима TLS. Выберите тот, который соответствует вашей инфраструктуре:

    РежимПолеОписание
    TLS на Pod Keycloakspec.http.tlsSecretСам Keycloak завершает TLS. Трафик между клиентом и Pod шифруется end-to-end.
    TLS на Ingressspec.ingress.tlsSecretКонтроллер Ingress завершает TLS. Keycloak может обслуживать обычный HTTP внутри кластера (установите spec.http.httpEnabled: true).

    В этом руководстве демонстрируется режим Ingress TLS (рекомендуется для большинства окружений Kubernetes).

    Предварительные требования

    • Запущенный экземпляр Keycloak (см. Установка).
    • Действительный TLS-сертификат и закрытый ключ для целевого hostname.
    • Развернутый в кластере контроллер Ingress (например, NGINX).

    Шаг 1. Создайте TLS Secret

    Создайте Kubernetes TLS Secret на основе сертификата и закрытого ключа:

    kubectl create secret tls keycloak-tls-secret \
      --cert=tls.crt \
      --key=tls.key \
      -n <namespace>

    Проверьте, что Secret создан:

    kubectl get secret keycloak-tls-secret -n <namespace>

    Шаг 2. Обновите CR Keycloak

    Обновите ваш CR Keycloak, чтобы включить Ingress с TLS и настроить hostname:

    apiVersion: k8s.keycloak.org/v2alpha1
    kind: Keycloak
    metadata:
      name: example-kc
    spec:
      instances: 1
      db:
        vendor: postgres
        host: postgres-db
        database: keycloak
        usernameSecret:
          name: keycloak-db-secret
          key: username
        passwordSecret:
          name: keycloak-db-secret
          key: password
      http:
        tlsSecret: keycloak-tls-secret
      ingress:
        enabled: true
        className: nginx
        tlsSecret: keycloak-tls-secret
      hostname:
        hostname: keycloak.example.com
      proxy:
        headers: xforwarded
      unsupported:
        podTemplate:
          spec:
            containers:
              - securityContext:
                  allowPrivilegeEscalation: false
                  runAsNonRoot: true
                  capabilities:
                    drop:
                      - ALL
                  seccompProfile:
                    type: RuntimeDefault

    Примените обновленный манифест:

    kubectl apply -f keycloak.yaml -n <namespace>

    Шаг 3. Проверьте Ingress

    Проверьте, что ресурс Ingress создан и имеет правильный hostname:

    kubectl get ingress -n <namespace>

    Ожидаемый вывод:

    NAME               CLASS   HOSTS                   ADDRESS         PORTS     AGE
    example-kc-ingress nginx   keycloak.example.com    203.0.113.10    80, 443   1m

    Шаг 4. Проверьте доступ по HTTPS

    Откройте Keycloak Admin Console по адресу https://keycloak.example.com и убедитесь, что соединение защищено.

    Проверьте, что Keycloak готов:

    kubectl get keycloak example-kc -n <namespace>

    Справка по конфигурации

    ПолеОписание
    spec.http.tlsSecretИмя TLS Secret для HTTPS на уровне Pod Keycloak
    spec.ingress.enabledУстановите значение true, чтобы создать ресурс Ingress
    spec.ingress.classNameИмя класса Ingress (например, nginx)
    spec.ingress.tlsSecretИмя TLS Secret для завершения TLS на уровне Ingress
    spec.hostname.hostnameПубличный hostname сервера Keycloak
    spec.proxy.headersЗаголовки proxy, принимаемые Keycloak. Для NGINX Ingress установите xforwarded.
    Конфигурация заголовков Proxy

    При использовании reverse proxy или контроллера Ingress необходимо правильно задать spec.proxy.headers. Неверная конфигурация может создать для Keycloak уязвимости безопасности, если он будет доверять поддельным заголовкам.