Secret 是一个主要用来存储密码、token 等一些敏感信息的资源对象。其中,敏感信息是采用 Base64 编码保存起来的。
注意:Base64只是一种编码,不含密钥的,并不安全。默认情况下,Kubernetes Secret 未加密地存储在 API 服务器的底层数据存储(etcd)中。 任何拥有 API 访问权限的人都可以检索或修改 Secret,任何有权访问 etcd 的人也可以。 此外,任何有权限在命名空间中创建 Pod 的人都可以使用该访问权限读取该命名空间中的任何 Secret;
secret安全相关的静态加密等,将在k8s学习-思维导图与学习笔记中的安全部分详细展开。
secret_test.yaml
apiVersion: v1
kind: Secret
metadata:
name: secret-test
type: Opaque
data:
username: YWRtaW4=
stringData:
username: administrator
| 内置类型 | 用法 |
|---|---|
Opaque | 用户定义的任意数据 |
kubernetes.io/service-account-token | 服务账号令牌 |
kubernetes.io/dockercfg | ~/.dockercfg 文件的序列化形式 |
kubernetes.io/dockerconfigjson | ~/.docker/config.json 文件的序列化形式 |
kubernetes.io/basic-auth | 用于基本身份认证的凭据 |
kubernetes.io/ssh-auth | 用于 SSH 身份认证的凭据 |
kubernetes.io/tls | 用于 TLS 客户端或者服务器端的数据 |
bootstrap.kubernetes.io/token | 启动引导令牌数据 |
命令
写入账号密码
echo -n 'lady-killer9' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt
创建secret
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt -n killer
结果


可以看到默认密钥名称是文件名,值是base64编码的。
注意,特殊字符需要使用 \ 进行转义,例如$
可以base64编码后放到data或者明文放到stringData,同时存在时,后者优先级更高。
命令

结果

与k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致,configMapRef改为secretKeyRef即可。
示例
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- secretRef:
name: mysecret
restartPolicy: Never
与k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致
示例
apiVersion: v1
kind: Secret
metadata:
name: dotfile-secret
data:
.secret-file: dmFsdWUtMg0KDQo=
---
apiVersion: v1
kind: Pod
metadata:
name: secret-dotfiles-pod
spec:
volumes:
- name: secret-volume
secret:
secretName: dotfile-secret
containers:
- name: dotfile-test-container
image: k8s.gcr.io/busybox
command:
- ls
- "-l"
- "/etc/secret-volume"
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: "/etc/secret-volume"
imagePullSecrets 字段中包含一个列表,列举对同一名字空间中的 Secret 的引用。 你可以使用 imagePullSecrets 将包含 Docker(或其他)镜像仓库密码的 Secret 传递给 kubelet。kubelet 使用此信息来替你的 Pod 拉取私有镜像。
手动指定 imagePullSecret
可以阅读容器镜像文档 以了解如何设置 imagePullSecrets。
设置自动附加 imagePullSecrets
可以手动创建 imagePullSecret,并在 ServiceAccount 中引用。 使用该 ServiceAccount 创建的任何 Pod 和默认使用该 ServiceAccount 的 Pod 将会将其的 imagePullSecret 字段设置为服务帐户的 imagePullSecret 值。 详细说明请参阅 将 ImagePullSecrets 添加到服务帐户。
自动挂载手动创建的 Secret
手动创建的 Secret(例如包含用于访问 GitHub 帐户令牌的 Secret)可以根据其服务帐户自动附加到 Pod。
与k8s学习-ConfigMap(创建、使用、更新、删除等)的基本一致
命令
kubectl delete secret db-user-pass -n killer
结果

更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记