[英]What is proper design for authentication in kubernetes using nginx-ingress and keycloak
目標
我想使用 keycloak 作為我的 minikube 集群的 oauth/oidc 提供程序。
問題
我對可用的文檔感到困惑。
根據此文檔,ngnix-ingress 可以使用注釋處理外部身份驗證
但是從文檔中不清楚這里使用了哪種身份驗證。 是 OAUTH/BASIC/SAML 嗎???
例如,我沒有找到任何變量來為入口提供 oauth CLIENTID。
其他發現
我還發現了這個項目https://github.com/oauth2-proxy/oauth2-proxy這似乎是我需要的並提供以下設計
用戶 -> ngnix-ingress -> oauth2-proxy -> keycloak
問題:
nginx 入口 controller 文檔提供了auth-url
和auth-signin
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"
...
請注意,此功能僅適用於兩個入口對象:
通過為單個主機部署多個 Ingress 對象來啟用此功能。 一個 Ingress object 沒有特殊的注解並處理身份驗證。
然后其他 Ingress 對象可以被注釋,要求用戶對第一個 Ingress 的端點進行身份驗證,並且可以將
401
重定向到同一個端點。
本文檔展示了如何使用這兩個入口對象以實現此功能的一個很好的示例。
所以這里的第一個入口指向/oauth2
路徑,然后在單獨的入口 object 中定義,因為這個入口沒有為自己配置身份驗證。
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 and nginx.ingress.kubernetes.io/auth-signin are doing?
auth-method
注釋指定要使用的 HTTP 方法,而auth-signin
signin 指定錯誤頁面的位置。 請在此處查看有效的 nginx 控制器方法。
需要了解/考慮的幾點:
主要目標是什么:
-- 使用 OIDC 和 keycloak 對 kubernetes集群進行身份驗證?
-- 使用 dex: https://dexidp.io/docs/kubernetes/
-- minikube openid 認證:
使用 keycloak保護應用程序和服務
Keycloak 支持 OpenID Connect(OAuth 2.0 的擴展)和 SAML 2.0。 在保護客戶端和服務時,您需要決定的第一件事是您將使用兩者中的哪一個。 如果您願意,您還可以選擇使用 OpenID Connect 保護一些,使用 SAML 保護其他一些。
為了保護客戶端和服務,您還需要一個適用於您選擇的協議的適配器或庫。 Keycloak 自帶適用於選定平台的適配器,但也可以使用通用OpenID Connect 依賴方和 SAML 服務提供程序庫。
在大多數情況下,Keycloak 建議使用 OIDC。 例如,OIDC 也更適合 HTML5/JavaScript 應用程序,因為它比 SAML 更容易在客戶端實現。
另請查看使用 Keycloak 文檔向您的 Kubernetes Web 應用程序添加身份驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.