> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/organizaciya-dostupov/spravochnaya-informaciya/keycloak/instrukcii-po-razvertyvaniyu/razvyortyvanie-keycloak-v-k8s-alisa-ai/keycloak-na-https.md).

# Keycloak на HTTPS

#### Полная инструкция по переключению Keycloak на HTTPS (для домена `keycloak.utmsoft.ru`)

***

#### 1. Подготовка

**Требования:**

* работающий Kubernetes‑кластер;
* установленный **NGINX Ingress Controller**;
* **cert‑manager** (версия ≥ v1.0);
* доступ к DNS‑записи `keycloak.utmsoft.ru`;
* права администратора Kubernetes.

**Проверка компонентов:**

bash

```bash
kubectl get pods -n ingress-nginx        # статус Ingress Controller
kubectl get pods -n cert-manager         # статус cert‑manager
```

***

#### 2. Настройка ClusterIssuer для Let’s Encrypt

Создайте файл `cluster-issuer.yaml`:

yaml

```yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: admin@utmsoft.ru  # замените на актуальный email
    privateKeySecretRef:
      name: letsencrypt-prod-key
    solvers:
    - http01:
        ingress:
          class: nginx
```

Примените конфигурацию:

bash

```bash
kubectl apply -f cluster-issuer.yaml
```

***

#### 3. Создание Certificate для Keycloak

Создайте `keycloak-certificate.yaml`:

yaml

```yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: keycloak-cert
  namespace: keycloak  # укажите ваш namespace
spec:
  secretName: keycloak-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  commonName: keycloak.utmsoft.ru
  dnsNames:
    - keycloak.utmsoft.ru
```

Примените:

bash

```bash
kubectl apply -f keycloak-certificate.yaml
```

Проверьте статус сертификата:

bash

```bash
kubectl get certificate keycloak-cert -n keycloak
# Ожидайте: Ready=True
```

***

#### 4. Настройка Ingress для HTTPS

Создайте `keycloak-ingress.yaml`:

yaml

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: keycloak-ingress
  namespace: keycloak
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: "100m"
spec:
  tls:
  - hosts:
    - keycloak.utmsoft.ru
    secretName: keycloak-tls
  rules:
  - host: keycloak.utmsoft.ru
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: keycloak-service  # имя вашего сервиса Keycloak
            port:
              number: 8443  # порт HTTPS Keycloak
```

Примените:

bash

```bash
kubectl apply -f keycloak-ingress.yaml
```

***

#### 5. Конфигурация Keycloak для HTTPS

**Вариант 1. Через переменные окружения (в Deployment)**\
Добавьте в секцию `env` вашего Deployment Keycloak:

yaml

```yaml
env:
- name: KC_HOSTNAME
  value: "keycloak.utmsoft.ru"
- name: KC_HTTPS_PROTOCOL
  value: "https"
- name: KC_PROXY
  value: "edge"
- name: KC_HTTP_ENABLED
  value: "false"  # отключить HTTP
```

**Вариант 2. Через конфигурационный файл**\
В `keycloak.conf` укажите:

properties

```properties
KC_HOSTNAME=keycloak.utmsoft.ru
KC_HTTPS_PROTOCOL=https
KC_PROXY=edge
KC_HTTP_ENABLED=false
```

***

#### 6. Проверка сертификатов

Убедитесь, что секрет создан:

bash

```bash
kubectl get secret keycloak-tls -n keycloak -o yaml
```

Должны присутствовать:

* `tls.crt` — сертификат;
* `tls.key` — приватный ключ.

***

#### 7. Перезапуск Keycloak

Пересоздайте поды:

bash

```bash
kubectl rollout restart deployment/keycloak-deployment -n keycloak
```

***

#### 8. Проверка работы HTTPS

1. **Тест через curl:**

   bash

   ```bash
   curl -vI https://keycloak.utmsoft.ru
   # Должно быть: HTTP/2 200
   # Проверьте: SSL certificate verify ok
   ```
2. **Проверка сертификата:**

   bash

   ```bash
   openssl s_client -connect keycloak.utmsoft.ru:443 -showcerts </dev/null
   # Ищите: Verify return code: 0 (ok)
   ```
3. **Браузер:**
   * Откройте `https://keycloak.utmsoft.ru`;
   * Убедитесь в наличии зелёного замка;
   * Попробуйте войти в админ‑панель.

***

#### 9. Мониторинг и обслуживание

1. **Автообновление сертификатов:**\
   cert‑manager обновляет сертификаты за 30 дней до истечения.
2. **Проверка статуса:**

   bash

   ```bash
   kubectl describe certificate keycloak-cert -n keycloak
   ```
3. **Логи:**

   bash

   ```bash
   kubectl logs -l app=keycloak -n keycloak
   kubectl logs -l app=ingress-nginx -n ingress-nginx
   ```

***

#### 10. Отладка распространённых проблем

* **404 Not Found:**\
  Проверьте:
  * путь в Ingress (`path: /`);
  * эндпоинт Keycloak (например, `/auth` для версии 18+).
* **502 Bad Gateway:**\
  Причины:

  * Keycloak недоступен;
  * ошибка SSL‑проверки между Ingress и Keycloak.\
    Действия:

  bash

  ```bash
  kubectl logs <ingress-pod> -n ingress-nginx
  curl -k https://keycloak-service:8443/  # из внутри кластера
  ```
* **SSL certificate problem:**\
  Убедитесь, что:
  * секрет `keycloak-tls` актуален;
  * в Ingress указан верный `secretName`.
* **Let’s Encrypt rate limits:**\
  Для тестов используйте staging‑сервер:

  yaml

  ```yaml
  server: https://acme-staging-v02.api.letsencrypt.org/directory
  ```

***

#### Итоговый результат

* Keycloak доступен по HTTPS: `https://keycloak.utmsoft.ru`.
* Сертификат Let’s Encrypt валиден и автоматически обновляется.
* Включена защита от атак (HSTS, X‑Frame‑Options, X‑Content‑Type‑Options).
* Для масштабирования используйте DNS‑имена вместо IP.
*
*
*
*

<br>
