fix: remove KC_HOSTNAME for NodePort OAuth #177

Merged
claude merged 1 commits from fix/keycloak-remove-hostname into main 2026-02-19 17:10:55 +01:00
Owner

Remove KC_HOSTNAME and KC_HOSTNAME_STRICT. Keycloak will derive URLs from request headers (X-Forwarded-* via ingress, Host via NodePort).

Remove KC_HOSTNAME and KC_HOSTNAME_STRICT. Keycloak will derive URLs from request headers (X-Forwarded-* via ingress, Host via NodePort).
claude added 1 commit 2026-02-19 17:09:19 +01:00
fix: remove KC_HOSTNAME to fix NodePort OAuth flow
All checks were successful
AI Review / AI Code Review (pull_request) Successful in 1s
PR Checks / Validate & Security Scan (pull_request) Successful in 8s
4fd6dfb3b9
With KC_HOSTNAME set, Keycloak always redirects to the configured
hostname in login form actions, breaking OAuth when accessed via
NodePort (127.0.0.1:30880). Without KC_HOSTNAME, Keycloak derives
URLs from request headers:
- Ingress: X-Forwarded-Host/Proto → https://keycloak.georgepet...
- NodePort: Host header → http://127.0.0.1:30880
KC_PROXY_HEADERS=xforwarded is kept to trust ingress-nginx headers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Author
Owner

AI Code Review

Рецензия PR: fix: remove KC_HOSTNAME for NodePort OAuth

Общее впечатление

PR минималист и логичен — удаляет жёсткий hostname, позволяя Keycloak определять URLs из заголовков запроса. Из критических проблем ничего не вижу.

🔍 Замечания

1. Безопасность / Конфигурация

  • Удаление KC_HOSTNAME_STRICT=false — правильно, ослабляло проверку hostname. С опорой на заголовки это менее критично, но требует внимания к X-Forwarded-* заголовкам
  • KC_PROXY_HEADERS=xforwarded остаётся — необходимо для Ingress
  • ⚠️ Проверить: NodePort не добавляет X-Forwarded-* автоматически. Если OAuth2-proxy или другой middleware перенаправляет трафик на NodePort напрямую (без Ingress), заголовки могут быть потеряны. Убедитесь, что всегда идёт через Ingress или настроен проксирующий middleware

2. Сетевая политика

  • Не видно изменений в NetworkPolicy — хорошо, не требуется расширение доступа
  • ⚠️ Если NodePort используется из pod-ов (oauth2-proxy, etc.), убедитесь, что NetworkPolicy разрешает трафик на 32432 (или другой NodePort)

3. Надёжность / Операционность

  • Одна реплика (нормально для OIDC provider в лабу)
  • ⚠️ Важно документировать: какой механизм попадает на NodePort? Если это прямое обращение из pod-ов (без Ingress), поведение может отличаться на Ingress path
    • На Ingress: X-Forwarded-Host: keycloak.georgepet.duckdns.org → Keycloak выведет правильный URL
    • На NodePort 32432 (прямо из pod): Host: <pod-ip>:32432 → выведет неправильный URL (если не настроен proxy middleware)

4. Лучшие практики

  • Минимальное изменение — не трогает ресурсы, лейблы, другую конфигурацию
  • Удаление дублирования (hostname можно вывести автоматически)
  • Commit message ясный

🎯 Рекомендации перед merge

  1. Протестировать оба пути:

    • Через Ingress (HTTPS, заголовки X-Forwarded-*)
    • Через NodePort 32432 (убедитесь, что oauth2-proxy/K8s OIDC клиент правильно настроены на проксирование через Ingress, а не на IP pod-а)
  2. Добавить комментарий в Helm values или CHANGELOG:

    KC_HOSTNAME и KC_HOSTNAME_STRICT удалены — Keycloak теперь определяет hostname из:
    - X-Forwarded-Host (Ingress via proxy-headers)
    - Host header (NodePort, если настроен правильно)
    
  3. Если используется K8s OIDC (Phase 15): убедитесь, что oidc-cli pointing на https://keycloak.georgepet.duckdns.org (через Ingress), а не на NodePort IP

Статус

Можно merge после теста в dev/staging. Критических уязвимостей нет, но операционная проверка на NodePort path обязательна.


Automated review by Claude Haiku | advisory, does not block merge

## AI Code Review Рецензия PR: **fix: remove KC_HOSTNAME for NodePort OAuth** ### ✅ Общее впечатление PR минималист и логичен — удаляет жёсткий hostname, позволяя Keycloak определять URLs из заголовков запроса. Из критических проблем ничего не вижу. ### 🔍 Замечания #### 1. **Безопасность / Конфигурация** - ✅ Удаление `KC_HOSTNAME_STRICT=false` — правильно, ослабляло проверку hostname. С опорой на заголовки это менее критично, но требует внимания к X-Forwarded-* заголовкам - ✅ `KC_PROXY_HEADERS=xforwarded` остаётся — необходимо для Ingress - ⚠️ **Проверить:** NodePort не добавляет X-Forwarded-* автоматически. Если OAuth2-proxy или другой middleware перенаправляет трафик на NodePort напрямую (без Ingress), заголовки могут быть потеряны. Убедитесь, что всегда идёт через Ingress или настроен проксирующий middleware #### 2. **Сетевая политика** - ✅ Не видно изменений в NetworkPolicy — хорошо, не требуется расширение доступа - ⚠️ Если NodePort используется из pod-ов (oauth2-proxy, etc.), убедитесь, что NetworkPolicy разрешает трафик на 32432 (или другой NodePort) #### 3. **Надёжность / Операционность** - ✅ Одна реплика (нормально для OIDC provider в лабу) - ⚠️ **Важно документировать:** какой механизм попадает на NodePort? Если это прямое обращение из pod-ов (без Ingress), поведение может отличаться на Ingress path - На Ingress: `X-Forwarded-Host: keycloak.georgepet.duckdns.org` → Keycloak выведет правильный URL - На NodePort 32432 (прямо из pod): `Host: <pod-ip>:32432` → выведет неправильный URL (если не настроен proxy middleware) #### 4. **Лучшие практики** - ✅ Минимальное изменение — не трогает ресурсы, лейблы, другую конфигурацию - ✅ Удаление дублирования (hostname можно вывести автоматически) - ✅ Commit message ясный ### 🎯 Рекомендации перед merge 1. **Протестировать оба пути:** - Через Ingress (HTTPS, заголовки X-Forwarded-*) - Через NodePort 32432 (убедитесь, что oauth2-proxy/K8s OIDC клиент правильно настроены на проксирование через Ingress, а не на IP pod-а) 2. **Добавить комментарий в Helm values или CHANGELOG:** ``` KC_HOSTNAME и KC_HOSTNAME_STRICT удалены — Keycloak теперь определяет hostname из: - X-Forwarded-Host (Ingress via proxy-headers) - Host header (NodePort, если настроен правильно) ``` 3. **Если используется K8s OIDC (Phase 15):** убедитесь, что `oidc-cli` pointing на `https://keycloak.georgepet.duckdns.org` (через Ingress), а не на NodePort IP ### Статус **Можно merge после теста в dev/staging.** Критических уязвимостей нет, но операционная проверка на NodePort path обязательна. --- _Automated review by Claude Haiku | advisory, does not block merge_
claude merged commit 0d3616e964 into main 2026-02-19 17:10:55 +01:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: claude/k8s-apps#177
No description provided.