如何管理 Kubernetes 认证令牌

KubernetesKubernetesBeginner
立即练习

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

简介

本教程全面概述了 Kubernetes 令牌、其类型及其用法。你将学习 Kubernetes 令牌管理的基础知识,包括在 Kubernetes 集群中安全地生成和使用令牌。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/version("Version") subgraph Lab Skills kubernetes/get -.-> lab-419483{{"如何管理 Kubernetes 认证令牌"}} kubernetes/create -.-> lab-419483{{"如何管理 Kubernetes 认证令牌"}} kubernetes/delete -.-> lab-419483{{"如何管理 Kubernetes 认证令牌"}} kubernetes/describe -.-> lab-419483{{"如何管理 Kubernetes 认证令牌"}} kubernetes/config -.-> lab-419483{{"如何管理 Kubernetes 认证令牌"}} kubernetes/version -.-> lab-419483{{"如何管理 Kubernetes 认证令牌"}} end

Kubernetes 令牌基础

Kubernetes 使用各种类型的令牌来促进集群内的安全通信和授权。这些令牌在 Kubernetes 生态系统的整体安全性和功能中起着至关重要的作用。

Kubernetes 令牌类型

Kubernetes 支持多种类型的令牌,每种令牌都有特定用途:

  1. 服务账户令牌:这些令牌是自动生成的,并与 Kubernetes 服务账户相关联。它们由 Pod 用于向 API 服务器进行身份验证并访问集群内的资源。

  2. JWT(JSON Web 令牌):Kubernetes 也使用 JWT 令牌进行身份验证和授权。这些令牌通常用于基于用户的访问,可以手动生成或通过外部身份提供程序获取。

  3. 引导令牌:引导令牌在 Kubernetes 集群的初始设置和配置期间使用。它们允许新节点安全地加入集群。

令牌生成与使用

Kubernetes 中的令牌可以使用 Kubernetes API 或命令行工具生成和管理。以下是使用 kubectl 命令生成服务账户令牌的示例:

## 创建一个新的服务账户
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

然后,生成的令牌可用于向 Kubernetes API 服务器进行身份验证并在集群内执行授权操作。

## 使用令牌访问 Kubernetes API
kubectl --token=$(kubectl get secret $(kubectl get serviceaccount my-service-account -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode) get pods

正确管理和安全存储这些令牌对于维护 Kubernetes 环境的整体安全性至关重要。

Kubernetes 中的安全令牌管理

正确管理 Kubernetes 令牌对于维护集群的整体安全性至关重要。以下是一些安全令牌管理的最佳实践:

令牌轮换

Kubernetes 支持自动令牌轮换,可以配置为定期生成新令牌并撤销旧令牌。这有助于降低令牌暴露或泄露的风险。

## 启用令牌自动轮换
kubectl get serviceaccount default -o yaml | sed 's/automountServiceAccountToken: false/automountServiceAccountToken: true/' | kubectl apply -f -

令牌存储与传输

令牌应在集群内安全地存储和传输。避免以明文形式存储令牌或通过不安全的通道传输它们。

## 在 Pod 中将令牌作为卷挂载
apiVersion: v1
kind: Pod
spec:
containers:
- name: my-container
volumeMounts:
- name: token
mountPath: /var/run/secrets/kubernetes.io/serviceaccount
volumes:
- name: token
secret:
secretName: default-token-xxxxx

基于角色的访问控制 (RBAC)

实施 RBAC 策略以限制 Kubernetes 集群内基于令牌的访问范围。为每个服务账户或用户分配最低必要权限。

## 创建自定义 RBAC 角色
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] ## "" 表示核心 API 组
resources: ["pods"]
verbs: ["get", "watch", "list"]

正确的令牌管理,包括轮换、安全存储和 RBAC,有助于确保 Kubernetes 环境的整体安全性和完整性。

实际操作:令牌生成与使用

在本节中,我们将探讨在 Kubernetes 集群中生成和使用令牌的实际操作。

服务账户令牌生成

创建新的服务账户时会自动生成服务账户令牌。你可以使用以下命令获取令牌:

## 创建一个新的服务账户
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

然后,生成的令牌可用于向 Kubernetes API 服务器进行身份验证并在集群内执行授权操作。

基于令牌的身份验证

要使用生成的令牌进行身份验证,可以在 API 请求的 Authorization 标头中作为承载令牌传递:

## 使用令牌访问 Kubernetes API
kubectl --token=$(kubectl get secret $(kubectl get serviceaccount my-service-account -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode) get pods

或者,你可以在 Kubernetes 客户端配置文件(例如 ~/.kube/config)中配置令牌,以实现无缝集成。

令牌最佳实践

在使用 Kubernetes 令牌时,请考虑以下最佳实践:

  1. 限制令牌范围:为每个服务账户或用户令牌分配最低必要权限,以降低未经授权访问的风险。
  2. 定期轮换令牌:启用自动令牌轮换,以降低令牌暴露或泄露的风险。
  3. 安全存储令牌:安全地存储令牌,避免明文存储或通过不安全通道传输。
  4. 监控令牌使用情况:定期审查令牌使用情况,并撤销任何未使用或可疑的令牌。

通过遵循这些实践,你可以确保 Kubernetes 环境的安全性和完整性。

总结

Kubernetes 使用各种类型的令牌来促进集群内的安全通信和授权。本教程涵盖了不同类型的令牌,例如服务账户令牌、JWT 令牌和引导令牌,并演示了如何生成和使用这些令牌来安全访问你的 Kubernetes 环境。通过了解 Kubernetes 令牌管理的基础知识,你可以确保 Kubernetes 生态系统的整体安全性和功能。