Kubernetes Keycloak Gatekeeper 坏网关

标签 kubernetes keycloak

我正在尝试设置 ProxyInjector 以自动将 keycloak-gateway 注入(inject)到任何具有注释的容器中,如下所示,我在 kubernetes 上部署的服务具有以下注释:

"annotations": {
  "authproxy.stakater.com/client-id": "bitwarden",
  "authproxy.stakater.com/client-secret": "<secret>",
  "authproxy.stakater.com/discovery-url": "https://keycloak.example.com/auth/realms/realmname",
  "authproxy.stakater.com/enabled": "true",
  "authproxy.stakater.com/listen": "127.0.0.1:3000",
  "authproxy.stakater.com/redirection-url": "http://127.0.0.1:3000",
  "authproxy.stakater.com/source-service-name": "bitwarden",
  "authproxy.stakater.com/target-port": "3000",
  "authproxy.stakater.com/upstream-url": "http://127.0.0.1:80",
}

这适用于 Kubernetes 中的 bitwardenrs 部署。服务内容如下:

---
kind: Service
apiVersion: v1
metadata:
  name: bitwarden
spec:
  selector:
    app: bitwarden
  ports:
    - protocol: TCP
      name: bitwarden-http
      port: 80
      targetPort: 80
    - protocol: TCP
      name: bitwarden-https
      port: 443
      targetPort: 443
  type: NodePort

我可以通过ingress正常访问服务。但是当我在它前面添加注释进行身份验证时,我收到 502 bad gateway 错误。

检查 bitwarden pod 日志,我可以看到代理容器成功启动并根据我在此处定义的内容进行代理。但我没有看到任何有关它实际尝试代理任何内容的日志(无论是在该 Pod 中,还是在我的入口 Controller Pod 中)。

 

我是否做错了什么导致它返回 502?

最佳答案

根据文档here , authproxy.stakater.com/listen 是代理监听的内容。所以它应该是 0.0.0.0:800.0.0.0:443。因此,nginx 重定向到服务的每个调用都会落在代理容器上。请求通过keycloak验证后。它将重定向到 authproxy.stakater.com/redirection-url 中提到的 url,例如https://cool.myweb.app.com (应该可以通过 keycloak 访问)。来自 keycloak 的重定向请求将再次到达代理容器,但这次已通过身份验证,并将被重定向到 authproxy.stakater.com/upstream-url ,即您尝试代理的应用程序,例如

Recommended setting is to run proxy on port 80/443 and app on any other port e.g. 3000 etc.

参见Flow diagram以供进一步引用。

如果您有任何其他问题,请随时在存储库中提出问题。 或询问Stakater slack channel

关于Kubernetes Keycloak Gatekeeper 坏网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839374/

相关文章:

MySQL - Galera 还是 Kubernetes 复制 Controller ?

amazon-web-services - 无法使用 Kops 验证 Kubernetes 集群

kubernetes - 将删除的节点读到 kubernetes

oauth-2.0 - Keycloak - 检索 RSA 公钥

docker - 在 Docker 中使用 KeyCloak 设置集成测试环境

java - 创建 keycloak 客户端并以编程方式从其他客户端分配角色

docker - Keycloak 无法导入在 docker 中运行的导出领域

azure - 通过 Kubernetes 在 Docker 容器中挂载 Azure 文件存储

kubernetes - nginx 配置到 kubernetes ingress-nginx

api - 使用 Keycloak REST API 创建客户端时出现未知错误