首页 > 解决方案 > 如何在 Kubernetes 中创建基本身份验证?

问题描述

我想在 Kubernetes 中创建基本身份验证。每个文件都说我应该创建 CSV 或文件,然后在其中输入用户名和密码。但我不想使用我想要一些数据库或 kubernetes 处理它的文件。我可以为基本身份验证做什么?

标签: kubernetes

解决方案


如果您不想使用静态密码文件,则可以基于令牌进行身份验证。

第一个选项:

服务帐户令牌

服务帐户是一个自动启用的身份验证器,它使用签名的承载令牌来验证请求。该插件使用两个标志(可选):

服务帐户通常由 API 服务器自动创建,并通过 ServiceAccount 准入控制器与集群中运行的 pod 相关联。Bearer 令牌安装在已知位置的 pod 中,并允许集群内进程与 API 服务器通信。帐户可以使用PodSpec的 serviceAccountName 字段与 pod 显式关联。

服务帐户不记名令牌完全可以在集群外使用,并可用于为希望与 Kubernetes API 对话的长期作业创建身份。要手动创建服务帐户,只需使用 kubectl create serviceaccount (NAME) 命令。这会在当前命名空间中创建一个服务帐户和一个关联的机密。

创建的密钥包含 API 服务器的公共 CA 和签名的 JSON Web 令牌 (JWT)。

签名的JWT可用作不记名令牌,以作为给定服务帐户进行身份验证。有关令牌如何包含在请求中的信息,请参见上文。通常,这些秘密被挂载到 pod 中,以便在集群内访问 API 服务器,但也可以从集群外部使用。

由于服务帐户令牌存储在机密中,因此存在一些缺点,任何对这些机密具有读取权限的用户都可以作为服务帐户进行身份验证。在授予服务帐户权限和读取机密功能时要小心。

第二:

安装OpenID Connect(您可以在此处找到完整的文档:) oidc

OpenID Connect (OIDC) 是一些服务提供商支持的 OAuth2 的超集,尤其是 Azure Active Directory、Salesforce 和 Google。该协议在 OAuth2 之上的主要添加是一个与访问令牌一起返回的字段,称为 ID 令牌。此令牌是一个JSON Web 令牌 (JWT),具有由服务器签名的众所周知的字段,例如用户的电子邮件。

为了识别用户,身份验证器使用OAuth2 令牌响应中的id_token (而不是 access_token)作为不记名令牌。

由于验证您身份所需的所有数据都在id_token中,Kubernetes 不需要“打电话回家”给身份提供者。在每个请求都是无状态的模型中,这为身份验证提供了一个非常可扩展的解决方案。

Kubernetes没有“Web 界面”来触发身份验证过程。没有浏览器或界面来收集凭据,这就是为什么您需要首先向您的身份提供者进行身份验证的原因。如果不使用 kubectl proxy 命令或注入id_token的反向代理,没有简单的方法可以向 Kubernetes 仪表板进行身份验证。

您可以在这里找到更多信息:kubernetes-authentication.


推荐阅读