口子网站怎么做,免费下载百度,做商城网站哪个好,wordpress发表的文章百度抓取失败一、什么是 Secret#xff1f;
Kubernetes#xff08;K8s#xff09;中的 Secret 是一种用于存储和管理敏感信息#xff08;如密码、令牌、证书、API 密钥等#xff09;的资源对象。它避免了将敏感数据明文写入配置文件、镜像或代码中#xff0c;提供了一种更安全的方式…一、什么是 Secret
KubernetesK8s中的 Secret 是一种用于存储和管理敏感信息如密码、令牌、证书、API 密钥等的资源对象。它避免了将敏感数据明文写入配置文件、镜像或代码中提供了一种更安全的方式来处理机密信息。
二、主要用途 安全需求敏感信息如数据库密码、API 令牌不应以明文形式硬编码在配置文件或镜像中否则可能导致泄露。解耦配置与代码将敏感数据与应用逻辑分离便于统一管理和更新。标准化管理K8s 提供内置机制管理 Secret支持通过 API 或命令行动态创建、更新和分发。 三、核心特性 数据编码 默认使用 Base64 编码存储数据非加密需结合其他加密手段如 etcd 加密或外部密钥管理系统。数据以键值对Key-Value形式存储支持通过环境变量或 Volume 挂载到 Pod。作用域Secret 属于特定 Namespace命名空间默认仅在所属 Namespace 内可见。类型常见三种内置 Secret 类型 Opaque通用型用于存储任意键值对默认类型。kubernetes.io/service-account-token自动为 ServiceAccount 生成的令牌用于访问 API Server。kubernetes.io/tls用于存储 TLS 证书和私钥供 Ingress、Service 等使用。 四、 创建 Secret 的常用方式
4.1. 通过 kubectl 命令创建
通过 kubectl 命令创建需要为其设置命令参数。 kubectl create secret --help generic用来创建 Opaque 类型的 Secret。用于存储任意键值对。tls用来创建 kubernetes.io/tls 类型的 Secret。用于存储 TLS 证书和私钥。docker-registry若要保存 docker 仓库的认证信息的话就必须使用此种类型来创建。 4.1.1、直接指定字面量适合小数据 # 创建 Opaque 类型 Secret键值对直接通过 --from-literal 指定
kubectl create secret generic my-secret \--from-literalusernameadmin \--from-literalpassword123456 已用 Base64 编码。 4.1.2、从文件加载适合文件型机密如证书、密钥
vim username.txt
# 输入 admin
vim password.txt
# 输入 123456# 从单个文件创建文件名作为键值为文件内容
kubectl create secret generic db-credentials --from-fileusername.txt --from-filepassword.txt 4.1.3、从目录创建目录下所有文件作为键值对
mkdir dir
cd dir
vim usr.txt
# 输入 admin
vim pwd.txt
# 输入 123456kubectl create secret generic app-secret --from-file. 4.2、通过 YAML 清单创建
apiVersion: v1
kind: Secret
metadata:name: yml-secretnamespace: default
type: Opaque # 类型可选 Opaque、service-account-token、tls 等
data:# 键值对需手动进行 Base64 编码username: YWRtaW4 # 明文 admin 的 Base64 编码password: MTIzNDU2 # 明文 123456 的 Base64 编码 编码方法echo -n 明文 | base64 -n 不换行的意思。echo -n 密文 | base64 -d-d decode 的意思。 五、在 Pod 中使用 Secret
5.1、作为环境变量注入
apiVersion: v1
kind: Pod
metadata:name: secret-env-pod
spec:restartPolicy: Nevercontainers:- name: appimage: alpine:latest imagePullPolicy: IfNotPresentcommand: [sleep, 3600]env:- name: DB_USERNAME # 环境变量名valueFrom:secretKeyRef:name: my-secret # Secret 名称key: username # Secret 中的键- name: DB_PASSWORDvalueFrom:secretKeyRef:name: my-secretkey: password 进入容器查看环境变量
kubectl exec -it secret-env-pod -- /bin/sh
/ # env 5.2、作为 Volume 挂载
apiVersion: v1
kind: Pod
metadata:name: secret-volume-pod
spec:restartPolicy: Nevervolumes:- name: secret-volumesecret:secretName: yml-secret # 指定 Secret 名称containers:- name: appimage: alpine:latest imagePullPolicy: IfNotPresentcommand: [sleep, 3600]volumeMounts:- name: secret-volume # 跟卷的名称一致mountPath: /etc/secrets # 挂载路径readOnly: true # 必须设为只读 进入容器查看挂载路径
kubectl exec -it secret-volume-pod -- /bin/sh 数据已帮我们解密。