使用 K8s Ingress + Python 进行 API 网关身份验证
Posted
技术标签:
【中文标题】使用 K8s Ingress + Python 进行 API 网关身份验证【英文标题】:API Gateway Auth with K8s Ingress + Python 【发布时间】:2021-03-03 09:56:49 【问题描述】:自从my previous Q 关于微服务集群身份验证,我得到了以下更具体的问题。如何在 Kubernetes 集群中实现 API Gateway 模式以使用 Python 执行身份验证?这样任何自定义的auth方法都可以使用,其他微服务不用担心这个问题。
我的要求/愿望清单:
-
使用 Python 代码验证请求,处理登录和注销。
使用 K8s Ingress URL 列表,或者至少使用类似的简单 YAML 接口,这样路由就不会嵌入到服务代码中并且可以快速更新。
解决方案的性能不应该是最差的。
任何形式的帮助都非常感谢????
【问题讨论】:
github 上有example,带有 Docker 镜像和 Python 中的一个小脚本,用于 k8s 入口的外部身份验证。你能检查一下这是否是你要找的吗?此外,there 是 tyk api 网关的另一个示例,there 是一个项目 authelia,它是提供 2 因素身份验证和单点登录的身份验证和授权服务器,但它基于 go,而不是 python。 @Jakub 感谢您的信息!我还发现了这个article,它解释了这个过程,an official repo 有一个例子。我需要更多时间来整理并可能尝试一下。当我得到一些结果时我会通知你:)
@Jakub 我主要担心支持的身份验证协议:在所有这些文章中,我只看到基本身份验证,所以我想检查是否支持其他方法。如果您能澄清这个问题,我将不胜感激。
@Jakub 我发现this repo 有另一个Python+LDAP+nginx 的例子,我认为这是一个好的开始,尽管我仍然有一些疑问。我发现类似的 NginX 模块 ngx_http_auth_request_module
具有更简单的身份验证协议。虽然文档说所有这些模块都不是默认内置到 NginX 中的,所以我不确定我的 K8s Ingress 是否支持它......我也看过 Tyk & Authelia,它们看起来很酷,但现在太复杂了,希望能用纯NginX解决问题。好吧,你可以用所有这些信息写一个答案,我会接受它;)
很高兴它有帮助,我已将我们所有的 cmets 合并为简短的答案,如果您想添加任何内容,请随时添加。
【参考方案1】:
正如我们在 cmets 中提到的那样。
NginX 可以处理 LDAP:
an article 解释了这个过程,an official repo 用一个例子解释了 Python+LDAP+NginX 用于 k8s 入口的外部身份验证。
还有a good unofficial example这个技术。
NginX 模块ngx_http_auth_request_module
支持更简单的协议,这里是docs 和an unofficial example。
可以使用其他软件解决问题:
Tyk api gateway Authelia【讨论】:
以上是关于使用 K8s Ingress + Python 进行 API 网关身份验证的主要内容,如果未能解决你的问题,请参考以下文章