我正在尝试设置 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:80
或 0.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/