首页 > 解决方案 > 在 nginx 入口控制器后面启用 tls 时,keycloak 停止工作

问题描述

我需要有关如何使用 TLS 在 eks kubernetes 上配置 nginx 入口控制器和 keycloak 的建议。

我的第一次尝试是让 keycloak 在没有 TLS 的情况下工作。这工作正常。但是当我将 TLS 添加到入口定义时,keycloak 给出了一个无效参数:redirect_uri错误。

这是工作样本:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: keycloak-tls-test
  namespace: keycloak-tls-test
spec:
  rules:
  - host: keycloak.test.myhops.com
    http:
      paths:
      - backend:
          serviceName: keycloak
          servicePort: 80

当我添加 tls 部分时,出现上述错误。请参阅下面的 yaml 文件。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: keycloak-tls-test
  namespace: keycloak-tls-test
spec:
  tls:
  - hosts:
    - keycloak.test.myhops.com
    secretName: test-myhops-tls
  rules:
  - host: keycloak.test.myhops.com
    http:
      paths:
      - backend:
          serviceName: keycloak
          servicePort: 80

关于如何解决这个问题的任何建议?一个在线建议是将https://keycloak.test.myhops.com/ * 添加到主域中 security-admin-console 客户端的有效重定向 URL。这解决了无效的 redirect_uri 错误,但后来我只有空白页。我在 keycloak 日志中找不到提示。

标签: sslkeycloaknginx-ingressamazon-eks

解决方案


我弄清楚是什么导致了这个问题。似乎当在终止 TLS 的反向代理后面使用 keycloak 时,keycloak 需要设置代理地址转发。对于 docker 容器,这意味着 env var PROXY_ADDRESS_FORWARDING=true 可以解决问题。所以 Ingress 是正确的,keycloak 部署需要一个额外的环境变量。

请注意,ingress-nginx 已经为此设置了正确的标头:

  • X-Forwarded-For
  • X-Forwarded-Proto

Docker 文档 [keycloak 文档2


推荐阅读