gpt4 book ai didi

kubernetes - 使用 nginx-ingress 和 keycloak 在 kubernetes 中进行身份验证的正确设计是什么

转载 作者:行者123 更新时间:2023-12-04 12:23:15 56 4
gpt4 key购买 nike

目标
我想使用 keycloak 作为 minikube 集群的 oauth/oidc 提供程序。
问题
我对可用的文档感到困惑。
根据这个documentation ngnix-ingress 可以使用注释处理外部身份验证

  • nginx.ingress.kubernetes.io/auth-method
  • nginx.ingress.kubernetes.io/auth-signin

  • 但是从文档中不清楚这里使用了哪种身份验证。是 OAUTH/BASIC/SAML 吗???
    例如,我没有找到任何变量来为入口提供 oauth CLIENTID。
    其他发现
    我也找到了这个项目 https://github.com/oauth2-proxy/oauth2-proxy
    这似乎是我需要的并提供以下设计
    用户 -> ngnix-ingress -> oauth2-proxy -> keycloak
    问题:
  • 我是否必须使用 oauth2-proxy 来实现 keycloak oauth?
  • 我对 ngnix-ingress 没有直接连接到 keycloak 的功能吗?
  • 是否有关于 nginx.ingress.kubernetes.io/auth-method 和 nginx.ingress.kubernetes.io/auth-signin 究竟在做什么的明确文档?
  • 是否有任何正确的构建方法/文档用户 -> ngnix-ingress -> oauth2-proxy -> keycloak 一体化?
  • 最佳答案

    nginx 入口 Controller 文档提供了一个 exampleauth-urlauth-signin :

    ...  
    metadata:
    name: application
    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"
    ...
    请注意,此功能仅适用于两个入口对象:

    This functionality is enabled by deploying multiple Ingress objectsfor a single host. One Ingress object has no special annotations andhandles authentication.

    Other Ingress objects can then be annotated in such a way that requirethe user to authenticate against the first Ingress's endpoint, and canredirect 401s to the same endpoint.


    document展示了如何使用这两个入口对象来实现此功能的一个很好的示例。
    所以这里的第一个入口指向 /oauth2然后在单独的入口对象中定义的路径,因为这个对象没有为自己配置身份验证。
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
    annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$escaped_request_uri"
    name: external-auth-oauth2
    namespace: MYNAMESPACE
    spec:
    rules:
    - host: foo.bar.com
    前面提到的第二个入口定义了 /oauth2同一域下的路径并指向您的 ouauth2 代理部署,这也回答了您提出的一个问题
    第二个ingress对象定义了同域下的/oauth2路径,指向oauth2-proxy部署:
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
    name: oauth2-proxy
    namespace: MYNAMESPACE
    annotations:
    cert-manager.io/cluster-issuer: designate-clusterissuer-prod
    kubernetes.io/ingress.class: nginx
    spec:
    rules:
    - host: foo.bar.com
    http:
    paths:
    - backend:
    serviceName: oauth2-proxy
    servicePort: 80
    path: /oauth2

    Is there any clear documentation about what exactly nginx.ingress.kubernetes.io/auth-method andnginx.ingress.kubernetes.io/auth-signin are doing?

    auth-method注释指定了要使用的 HTTP 方法,而 auth-signin指定错误页面的位置。请查看有效的 nginx Controller 方法 here .
    需要了解/考虑的几点:
  • 主要目标是什么:
    -- authentication to kubernetes使用 OIDC 和 keycloak 进行集群?
    -- 使用 dex: https://dexidp.io/docs/kubernetes/
    -- minikube openid authentication :
  • Securing使用 keycloak 的应用程序和服务
    Keycloak 支持 OpenID Connect(OAuth 2.0 的扩展)和 SAML 2.0。在保护客户端和服务时,您需要决定的第一件事是您将使用两者中的哪一个。如果需要,您还可以选择使用 OpenID Connect 保护某些安全,而使用 SAML 保护其他安全。
    为了保护客户端和服务,您还需要为您选择的协议(protocol)提供适配器或库。 Keycloak 为选定的平台提供了自己的适配器,但也可以使用通用的 OpenID连接依赖方和 SAML 服务提供商库。
    在大多数情况下,Keycloak 建议使用 OIDC。例如,OIDC 也更适合 HTML5/JavaScript 应用程序,因为它比 SAML 更容易在客户端实现。
    也请查看 adding authentication使用 Keycloak 文档访问您的 Kubernetes Web 应用程序。
  • 关于kubernetes - 使用 nginx-ingress 和 keycloak 在 kubernetes 中进行身份验证的正确设计是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65548562/

    56 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com