简介
在现代云原生应用程序中,安全地管理诸如凭证和配置数据等敏感信息至关重要。本教程提供了关于向Kubernetes Pod注入机密信息的全面指导,帮助开发人员和DevOps专业人员在容器化环境中实施强大的安全策略来管理机密信息。
在现代云原生应用程序中,安全地管理诸如凭证和配置数据等敏感信息至关重要。本教程提供了关于向Kubernetes Pod注入机密信息的全面指导,帮助开发人员和DevOps专业人员在容器化环境中实施强大的安全策略来管理机密信息。
Kubernetes 机密信息是用于帮助管理敏感信息的对象,如密码、OAuth 令牌、SSH 密钥及其他机密数据。它们提供了一种将敏感配置数据与 Pod 和容器定义分离的方式,增强了应用程序部署中的安全性和灵活性。
Kubernetes 支持多种类型的机密信息,以适应不同的用例:
| 机密信息类型 | 描述 | 常见用例 |
|---|---|---|
| Opaque | 默认机密信息类型 | 通用键值对 |
| Docker Registry | 存储容器镜像仓库的凭证 | 拉取私有镜像 |
| TLS | 存储 TLS 证书 | HTTPS 配置 |
| Service Account | 认证令牌 | 集群访问管理 |
## 从文字值创建机密信息
kubectl create secret generic db-credentials \
--from-literal=username=admin \
--from-literal=password=mysecretpassword
## 从文件创建机密信息
kubectl create secret generic ssl-cert \
--from-file=./tls.crt \
--from-file=./tls.key
为了实际操作 Kubernetes 机密信息,LabEx 提供了交互式环境,使你能够在安全、可控的环境中试验机密信息的创建和管理。
Kubernetes 提供了多种将机密信息注入 Pod 的方法,每种方法都有其独特的用例和优势。
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: myapp
image: ubuntu:22.04
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-credentials
key: username
apiVersion: v1
kind: Pod
metadata:
name: secret-volume-pod
spec:
containers:
- name: myapp
image: ubuntu:22.04
volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: db-credentials
| 方法 | 优点 | 缺点 |
|---|---|---|
| 环境变量 | 简单、快速 | 仅限于小数据 |
| 卷挂载 | 支持大文件 | 需要更多配置 |
| projected 卷 | 灵活、多源 | 更复杂 |
apiVersion: v1
kind: Pod
metadata:
name: projected-secrets-pod
spec:
containers:
- name: myapp
image: ubuntu:22.04
volumeMounts:
- name: projected-secrets
mountPath: "/projected-secrets"
volumes:
- name: projected-secrets
projected:
sources:
- secret:
name: db-credentials
- secret:
name: ssl-certs
LabEx 提供交互式实验,以便在真实的 Kubernetes 环境中练习不同的机密信息注入技术。
对存储在 etcd 中的机密信息实施加密:
## 启用静态加密
sudo vi /etc/kubernetes/manifests/encryption-config.yaml
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: ${ENCRYPTION_KEY}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
| 安全维度 | 建议 | 实施级别 |
|---|---|---|
| 加密 | 使用 AES - 256 | 集群级别 |
| 访问控制 | 最小化 RBAC | 命名空间级别 |
| 机密信息轮换 | 自动轮换 | 应用程序级别 |
## 自动机密信息轮换脚本
#!/bin/bash
CURRENT_SECRET=$(kubectl get secret db-credentials -o jsonpath='{.data.password}' | base64 -d)
NEW_SECRET=$(openssl rand -base64 32)
kubectl create secret generic db-credentials-new --from-literal=password=$NEW_SECRET
LabEx 提供全面的实验,以便在可控环境中实践和验证 Kubernetes 机密信息安全配置。
在 Kubernetes 中理解并实施恰当的机密信息注入技术对于维护应用程序安全至关重要。通过利用 Kubernetes 原生的机密信息管理功能并遵循最佳实践,团队能够在确保容器化应用程序无缝部署和配置的同时,有效地保护敏感数据。