如何使用 Kubernetes 令牌对用户进行认证

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Kubernetes 作为一个强大的容器编排平台,依赖于一个强大的认证和授权系统来确保对集群资源的安全访问。该系统的核心是 Kubernetes 令牌,它是认证用户和服务账户的主要机制。在本教程中,我们将探讨 Kubernetes 令牌的基本原理,包括其用途、类型以及在 Kubernetes 认证和授权中的使用。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/set("Set") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/label("Label") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/version("Version") subgraph Lab Skills kubernetes/get -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/create -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/delete -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/set -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/describe -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/label -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/config -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} kubernetes/version -.-> lab-419484{{"如何使用 Kubernetes 令牌对用户进行认证"}} end

Kubernetes 令牌基础

Kubernetes 作为一个强大的容器编排平台,依赖于一个强大的认证和授权系统来确保对集群资源的安全访问。该系统的核心是 Kubernetes 令牌,它是认证用户和服务账户的主要机制。

在本节中,我们将探讨 Kubernetes 令牌的基本原理,包括其用途、类型以及在 Kubernetes 认证和授权中的使用。

理解 Kubernetes 令牌

Kubernetes 令牌是一种加密凭证,用于在与 Kubernetes API 服务器交互时认证用户和服务账户。这些令牌由 Kubernetes 控制平面生成和管理,用于验证发出 API 请求的实体(用户或服务账户)的身份。

Kubernetes 令牌主要有两种类型:

  1. 服务账户令牌:这些令牌与 Kubernetes 服务账户相关联,服务账户是由 Kubernetes 系统自动创建和管理的特殊用户账户。Pod 和其他 Kubernetes 资源使用服务账户令牌代表服务账户与 API 服务器进行交互。

  2. 持有者令牌:这些令牌用于认证与特定 Kubernetes 服务账户无关的单个用户或其他实体(如外部系统)。持有者令牌通常通过外部认证机制(如 OAuth 2.0 或 OIDC)获得。

Kubernetes 令牌基于 JSON Web 令牌(JWT)标准,该标准允许各方之间以 JSON 对象的形式安全地传输信息。Kubernetes 令牌包含有关实体身份的信息以及任何相关的权限或声明。

Kubernetes 令牌的用例

Kubernetes 令牌在各种场景中用于促进对 Kubernetes API 和集群资源的安全访问。一些常见的用例包括:

  1. Pod 与 API 服务器通信:在 Kubernetes 集群中运行的 Pod 使用服务账户令牌来认证和授权它们与 Kubernetes API 服务器的交互,使它们能够执行诸如创建、修改或检索资源等操作。

  2. 用户认证:单个用户在与 Kubernetes API 交互时可以使用持有者令牌进行自我认证,从而根据分配的权限执行管理或用户级任务。

  3. 外部系统集成:Kubernetes 令牌可用于将外部系统(如持续集成/持续部署(CI/CD)管道或监控工具)与 Kubernetes API 集成,使它们能够代表集成系统执行授权操作。

  4. 自动化和脚本编写:Kubernetes 令牌可用于脚本和自动化工具中,以促进对 Kubernetes API 的安全、编程式访问,实现诸如集群管理、资源供应和部署自动化等任务。

通过理解 Kubernetes 令牌的基本原理,你可以有效地利用这种强大的认证和授权机制来保护你的 Kubernetes 集群,并确保只有授权实体才能访问和与你的集群资源进行交互。

生成 Kubernetes 令牌

根据具体的用例和需求,Kubernetes 提供了多种生成和管理令牌的方法。在本节中,我们将探讨生成 Kubernetes 令牌的不同方法,包括使用 kubectl 命令行工具以及直接与 Kubernetes API 进行交互。

生成服务账户令牌

当创建新的服务账户时,Kubernetes 控制平面会自动生成和管理服务账户令牌。你可以使用 kubectl 命令查看服务账户及其关联令牌的详细信息:

kubectl get serviceaccount default -o yaml

这将显示默认服务账户的详细信息,包括生成的令牌。要使用此令牌进行认证,你可以复制 token 字段的值并将其包含在 API 请求中。

或者,你可以使用以下命令创建新的服务账户并为其生成令牌:

## 创建新的服务账户
kubectl create serviceaccount my-service-account

## 获取新服务账户的令牌
kubectl get secret $(kubectl get serviceaccount my-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode

然后,生成的令牌可用于代表 my-service-account 服务账户对 Kubernetes API 进行认证。

生成持有者令牌

除了服务账户令牌外,Kubernetes 还支持使用持有者令牌进行用户认证。持有者令牌可以通过各种外部认证机制(如 OAuth 2.0 或 OIDC)获得。

要生成持有者令牌,你可以使用带有 --token 标志的 kubectl 命令行工具:

kubectl --token= pods < your-bearer-token > get

<your-bearer-token> 替换为你从认证提供方获得的实际持有者令牌。

或者,你可以直接使用 Kubernetes API 生成持有者令牌。这种方法通常用于更复杂的集成场景,在这些场景中,你需要以编程方式管理令牌的生成和使用。

通过了解生成 Kubernetes 令牌的不同方法,你可以在 Kubernetes 集群中有效地管理认证和授权,确保只有授权实体才能访问和与集群资源进行交互。

保护 Kubernetes 令牌安全

Kubernetes 令牌是认证和授权对集群资源进行访问的主要机制。因此,在其整个生命周期中确保这些令牌的安全至关重要。在本节中,我们将探讨保护 Kubernetes 令牌安全的最佳实践和技术。

令牌存储与传输

Kubernetes 令牌,无论是服务账户令牌还是持有者令牌,都应被视为敏感信息并谨慎处理。在存储或传输 Kubernetes 令牌时,请考虑以下准则:

  1. 安全存储:将 Kubernetes 令牌安全地存储,例如存储在秘密管理系统或可信的键值存储中。避免以明文形式存储令牌或存储在版本控制系统中。
  2. 安全传输:在传输 Kubernetes 令牌时,确保通过安全通道(如 HTTPS 或专用网络)发送。避免通过不安全通道(如 HTTP 或公共网络)发送令牌。
  3. 令牌轮换:定期轮换 Kubernetes 令牌,以限制受损或过期令牌的暴露风险。这可以通过生成新令牌并撤销旧令牌来完成。

Kubernetes 令牌轮换

Kubernetes 提供了用于轮换服务账户令牌和持有者令牌的机制。要轮换服务账户令牌,可以删除与该服务账户关联的现有密钥,新令牌将自动生成。

## 删除与服务账户关联的密钥

对于持有者令牌,你需要从认证提供方获取新令牌,并相应地更新你的应用程序。

保护 Kubernetes API 访问安全

除了保护令牌本身的安全外,保护对 Kubernetes API 的访问也很重要。这可以通过以下措施实现:

  1. 基于角色的访问控制(RBAC):实施 RBAC 策略,为用户和服务账户授予最低限度的必要权限,限制他们执行未经授权操作的能力。
  2. 网络策略:使用 Kubernetes 网络策略来控制进出集群的网络流量,限制对 API 服务器的访问。
  3. API 服务器认证和授权:配置 Kubernetes API 服务器以使用强大的认证和授权机制,如客户端证书、OIDC 或基于 webhook 的认证。

通过遵循这些保护 Kubernetes 令牌安全的最佳实践,你可以增强 Kubernetes 集群的整体安全性,并保护关键资源免受未经授权的访问。

总结

Kubernetes 令牌是 Kubernetes 认证和授权系统的关键组成部分,可实现对集群资源的安全访问。通过了解不同类型的令牌、如何生成它们以及保护它们的最佳实践,你可以有效地管理和控制对 Kubernetes 环境的访问。本教程全面概述了 Kubernetes 令牌的基本原理,使你能够在 Kubernetes 部署中实施强大的认证和授权机制。