Secret 是 Kubernetes 中用来存储敏感信息的对象,它可以用来存储密码、OAuth 令牌或 ssh key 等。
Secret 有三种类型:
- Opaque: 默认类型,用来存储任意数据,一般用来存储密码等。
- kubernetes.io/service-account-token: 用于 service account,由 Kubernetes 自动创建和管理。
- kubernetes.io/dockercfg: 用于保存 Docker CLI 的自动登录授权信息。
例如,我们可以创建一个 Opaque 类型的 Secret 来存储 MySQL 的密码:
yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
password: bXkgcGFzc3dvcmQ=
这里我们将密码编码为 base64 后存储在 Secret 的 data 字段中。要使用这个密码,需要先将其解码:
echo 'bXkgcGFzc3dvcmQ=' | base64 --decode
# my password
然后我们可以在 Pod 中以文件或环境变量的形式使用这个 Secret:
yaml
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
这里我们将 Secret 设置为环境变量,Pod 启动后就可以使用这个环境变量来访问数据库。
我们也可以将 Secret 挂载为数据卷使用:
yaml
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
spec:
containers:
- name: mysql
image: mysql
volumeMounts:
- name: mysql-secret-volume
mountPath: /etc/secret-data
readOnly: true
volumes:
- name: mysql-secret-volume
secret:
secretName: mysql-secret
然后 Secret 中的数据就可以在 /etc/secret-data 路径下访问。
所以总结来说,Secret 有以下主要用途:
- 存储敏感数据:如密码、密钥等。
- 以环境变量或数据卷的形式在 Pod 中使用。
- 主要有 Opaque、kubernetes.io/service-account-token 和 kubernetes.io/dockercfg 三种类型。