k8s接入ldap

k8s接入ldap,第1张

为了对接上 LDAP,可谓是煞费苦心。网上能找到的对接上 LDAP 的方案,都得在 LDAP 上自定义一个 token 的 schema,然后将在 k8s 集群上已创建好的 service account 的 token 跟 LDAP 绑定起来。这样,在进行 webhook 认证时,便能带着 token 去 LDAP 上进行认证。例如这里所描述的: Kubernetes-LDAP-Authentication 。另外,还有些是对接上 OpenID connect token,然后再这些服务提供系统那里对接上 LDAP,例如: Step by step guide to integrate LDAP with Kubernetes 。这种办法又觉得太复杂,麻烦了。

使用 webhook 进行 LDAP 认证,平常的用户名密码认证行不通的主要原因是 k8s apiserver 进行认证请求时,带过来只有用户名和 bearer token,没有密码。为了能够使用用户名密码和 bearer token 去 ldap 进行认证,这里做了些 trick 的东西。

如下图所示,客户端通过 nginx 访问 apiserver,在 nginx 一层里,配置了 auth-request,将 basic auth 的请求发送给后端的 ldap 认证代理,ldap 认证代理认证通过后,会随机生成一段 bearer token,并通过相应头部告诉给 nginx。nginx 收到这个响应头部后,就配置使用 bearer token 访问 apiserver。也就是说,请求到达 apiserver 的时候,使用的是 bearer token 这种方式进行认证。apiserver 收到请求后,会同时出发内部认证机制和 webhook 认证机制,webhook 认证在这里同样配置了 nginx 的 ldap 认证代理。由于 ldap 认证代理保存了所有经过 ldap 认证的用户的 bearer token,因此便可以通过 apiserver 带过来的 bearer token 成功认证用户!

如果需要更细粒度的权限控制,可以在 ldap 认证代理那里,接入公司的一些内部系统,根据不同的用户,返回不同的用户组即可。

取决于api的加密方式。

如加密方式为bearer token的方式。

调用一个需要验证的api步骤是:

POST请求接口:http://ip地址/api/token

参数:{"username":"xxx","password":"xxx","grant_type":"password"}  http请求头: {"Content-Type":"application/x-www-form-urlencoded"}

第一个接口会返回一个"access_token"(以下称为token)。请求需要验证接口的api时,http头上加入:{"Authorization:bearer [token]"}即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11723921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存