用于敏感数据的密钥
使用密钥安全地存储和管理密码、API 密钥等敏感信息。
用于敏感数据的密钥 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 4 节课。
保护敏感信息
构建应用程序时,您经常会处理敏感信息,例如数据库密码、API 密钥或私有证书。
将这些信息直接存储在应用程序代码或配置文件中会带来很大的安全风险!这可能导致数据泄露并暴露您的系统。
介绍 Kubernetes Secrets
Kubernetes Secrets 是用于在集群中安全存储敏感数据的对象。
它们可以帮助您将敏感信息与 Pod 定义和应用程序代码分离,从而让部署更安全、更易于管理。
- 分离:将敏感数据排除在容器镜像和 Pod YAML 之外。
- 可访问:Pod 可以将其作为环境变量使用,或将其挂载为文件。
Secrets 与 ConfigMaps 的区别
您可能还记得上一课介绍过的 ConfigMaps,它用于存储非敏感的配置数据。
Secrets 与它类似,但专门用于存储敏感数据。两者都存储键值对,但 Secrets 用于处理敏感信息。
- ConfigMaps:用于一般的非敏感配置(例如日志级别、API 端点)。
- Secrets:用于敏感数据(例如密码、令牌、私钥)。
请记住,Secrets 默认经过 base64 编码,而不是加密!
从字面值创建 Secret
创建 Secret 最简单的方法,是使用 kubectl create secret generic 从字面值创建。
对于简单密码等单个、较短的敏感数据,这种方法非常实用。
kubectl create secret generic my-db-secret \
--from-literal=username=admin \
--from-literal=password=SuperSecretP@ssw0rd!从文件创建 Secret
对于较大或包含多行的敏感数据(例如私钥或完整的配置文件),最好从文件创建 Secret。
首先在本地创建文件,然后引用这些文件。Kubernetes 会读取文件内容并将其存储起来。
# Create local files first
echo "my-api-key-12345" > api-key.txt
echo "my-token-abcde" > auth-token.txt
# Create the Secret
kubectl create secret generic app-credentials \
--from-file=api-key.txt \
--from-file=auth-token.txt将 Secrets 用作环境变量
Pod 可以将 Secret 数据直接注入环境变量中来使用。这种方式常用于简单的键值对。
您可以引用 Secret 中的单个键,也可以使用 envFrom 引用其中的全部键。
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod-env
spec:
containers:
- name: my-app
image: nginx:latest
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: my-db-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-db-secret
key: password将 Secrets 用作挂载文件
对于敏感文件(例如证书、私钥),或者应用程序需要从特定文件路径读取配置的情况,您可以将 Secrets 作为文件挂载到 Pod 中。
Secret 中的每个键都会成为挂载目录中的一个文件,其值就是该文件的内容。
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod-vol
spec:
containers:
- name: my-app
image: nginx:latest
volumeMounts:
- name: app-secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: app-secret-volume
secret:
secretName: app-credentials保护您的 Secrets
虽然 Secrets 可以防止数据被随意查看,但它们并不是万全之策。请记住以下几点:
- Base64 编码:Secrets 经过 base64 编码,而不是加密。任何有权访问 Secret 的人都可以将其解码。
- RBAC:使用基于角色的访问控制(RBAC)限制可以读取、创建或修改 Secrets 的人员。
- 静态数据加密:为了实现真正的安全,请为 etcd(Kubernetes 的后端存储)中的数据启用静态加密。云服务提供商通常会提供此功能。
更新 Secrets
如果敏感数据发生变化,您需要更新 Secret。使用新值重新运行 kubectl create secret 即可更新它,也可以使用包含更新后 YAML 的 kubectl apply -f。
但是,正在运行且使用该 Secret 的 Pod 不会自动获取更改。要应用更改,通常需要重启或重新部署使用该 Secret 的 Pod。
快速检查:Secrets
假设您有一个应用程序需要访问的私有 API 密钥。哪种方法最安全、最适合存储该密钥并将其提供给 Kubernetes Pod?
回顾:用于存储敏感数据的 Secrets
做得很好!您已经学会了如何在 Kubernetes 中处理敏感数据!
- Secrets 用于存储密码和 API 密钥等敏感信息。
- 它们经过 base64 编码,并且可以作为环境变量或挂载文件使用。
- 请始终应用 RBAC,并考虑使用静态数据加密来实现最高级别的安全性。
- 请记住,Pod 需要重启才能获取 Secret 的更新。
常见问题解答
「用于敏感数据的密钥」课时是免费的吗?
是的 — 「用于敏感数据的密钥」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kubernetes Basics 课程的其余内容,请升级到 CoddyKit PRO。 Kubernetes Basics 课程共包含 4 节课。
「用于敏感数据的密钥」这节课中我会学到什么?
使用密钥安全地存储和管理密码、API 密钥等敏感信息。 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kubernetes Basics 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kubernetes Basics 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「用于敏感数据的密钥」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kubernetes Basics 课中编写并运行代码吗?
能。每节 Kubernetes Basics 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。