使用 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 网关身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Ingress安装

k8s学习-Ingress(安装模板创建删除)

k8s学习-Ingress(安装模板创建删除)

k8s的ingress使用

k8s资源对象-ingress通俗理解及配置使用

k8s配置ingress