【每日一个云原生小技巧 #70】Kubernetes Secret

2024-01-25 09:49:25 浏览数 (3)

Kubernetes Secret 是 Kubernetes 系统中用来存储和管理敏感信息的一个对象。这些敏感信息可能包括密码、OAuth tokens、SSH 密钥等。使用 Secret 可以更安全地管理敏感数据,因为它们不是以明文存储在 Pod 的定义中或者容器镜像中,而是以加密形式存放在 Kubernetes API 服务器上。

使用场景

  1. 存储凭据:用于存储数据库、外部服务的用户名和密码。
  2. 存储配置信息:如 API 密钥,配置文件等。
  3. TLS 证书:存储 TLS 证书和私钥。
  4. Pod 访问控制:给 Pod 提供访问 Kubernetes API 的权限。

使用技巧

  1. 最小权限原则:确保只有需要访问 Secret 的 Pod 和用户才有权限。
  2. 定期轮换秘钥:定期更新 Secret 中的敏感数据。
  3. 避免直接在 Pod 配置中暴露 Secret:使用环境变量或卷挂载的方式引用 Secret。
  4. 加密 Etcd 数据存储:Kubernetes 存储数据的 Etcd 应该被加密。
  5. 审计和监控:监控对 Secret 的访问和更改,以及确保审计日志的生成。

使用案例

存储数据库凭据

假设你有一个需要连接到 MySQL 数据库的应用程序,你可以创建一个 Secret 来存储数据库的用户名和密码。

创建 Secret使用以下命令创建一个名为 mysql-secret 的 Secret:

代码语言:javascript复制
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  username: [base64 encoded username]
  password: [base64 encoded password]

其中,[base64 encoded username][base64 encoded password] 分别是经过 base64 编码的用户名和密码。

在 Pod 中使用 Secret在 Pod 定义中,你可以通过环境变量或卷的方式来使用这个 Secret:

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp
    env:
      - name: MYSQL_USER
        valueFrom:
          secretKeyRef:
            name: mysql-secret
            key: username
      - name: MYSQL_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysql-secret
            key: password

在这个案例中,Pod myapp-pod 将会从 mysql-secret 中获取数据库用户名和密码,并设置为环境变量 MYSQL_USERMYSQL_PASSWORD

0 人点赞