如何使用Keycloak配置Nginx-Ingress规则

ep6jt1vc  于 2023-03-22  发布在  Nginx
关注(0)|答案(1)|浏览(282)

我有一个Kubernetes v1.26自管理集群。我有多个通过Nginx-ingress proxy暴露的应用程序。
我想通过身份验证来保护对这些应用程序的访问,我找到了Keycloak并将其部署在bitnami chart,版本docker.io/bitnami/keycloak:20.0.5-debian-11-r4中。我已经在此领域中创建了一个领域services和一个客户端nginx。(我对这代表什么不完全有信心)
现在我被困在更新我的入口规则以强制认证时访问我的应用程序.我在这里找到了一个例子与oauth添加以下注解:

annotations:
  nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
  nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"

我尝试了$host/auth/realms/services的多种组合,但到目前为止,我找不到正确的端点,所有请求都被重定向到404。
在Keycloak的客户端页面上,有Client id和secret,但我没有找到任何nginx注解来使用它们。
谢谢!

46qrfjad

46qrfjad1#

希望这能帮助任何处于这种情况的人:
我发现了这个类似的question。从我的理解来看,Nginx不能直接与Keycloak通信,oauth2代理也不能代替Nginx功能来管理kubernetes入口。
我用以下方法实现了它:
oauth2-proxy已部署。我没有找到任何部署示例,下面是我所做的:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: oauth2-proxy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oauth2-proxy
  template:
    metadata:
      labels:
        app: oauth2-proxy
    spec:
      containers:
      - name: oauth2-proxy
        image: quay.io/oauth2-proxy/oauth2-proxy:latest
        ports:
        - containerPort: 8091
        args:
        - --provider=keycloak-oidc
        - --client-id=nginx
        - --client-secret=###
        - --cookie-secret=###=
        - --oidc-issuer-url=https://###/realms/test
        - --oidc-extra-audience=account
        - --scope=openid
        - --pass-authorization-header=true
        - --pass-access-token=true
        - --pass-user-headers=true
        - --set-authorization-header=true
        - --set-xauthrequest=true
        - --cookie-refresh=1m
        - --cookie-expire=30m
        - --http-address=0.0.0.0:8091
        - --code-challenge-method=S256
---

apiVersion: v1
kind: Service
metadata:
  name: oauth2-proxy
  namespace: kc
  labels:
    name: oauth2-proxy
spec:
  type: NodePort
  ports:
  - name: http
    port: 8091
  selector:
    app: oauth2-proxy

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-buffer-size: "16k"
  name: oauth2-proxy
  namespace: kc
spec:
  rules:
    - host: ###
      http:
        paths:
          - path: /oauth2
            pathType: Prefix
            backend:
              service:
                name: oauth2-proxy
                port:
                  number: 8091

以及需要保护的资源的Nginx ingress注解:

nginx.ingress.kubernetes.io/auth-url: "https://###/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://###/oauth2/start?rd=$escaped_request_uri"

相关问题