在 Kubernetes 中,Secret 是一种用于存储和管理敏感信息的对象类型,如密码、API密钥、证书等等。它们与 ConfigMap 相似,但在处理敏感信息时,Secret 会提供更高的安全性和保密性。
Secret 可以用于将这些敏感信息注入到容器中,并确保这些信息在运行时不会被意外泄漏或暴露给其他人。Secret 可以通过多种方式定义和使用,例如直接定义、从文件中加载、从环境变量中加载等。
在 Kubernetes 中,Secrets 通常被用于以下场景:
Secrets 可以在 Pod 的 spec 中通过 volume 和环境变量的方式引用。当容器使用 volume 来引用 Secret 时,Secret 会以文件的形式挂载到容器中。当容器使用环境变量来引用 Secret 时,Secret 中的数据会以 base64 编码后,以键值对的形式注入到容器的环境变量中。
需要注意的是,Secret 并不提供强大的安全保证,只是简单地将数据存储在 base64 编码的形式下,并不提供加密或其他安全措施,因此不要将高度敏感的信息存储在 Secret 中。在处理高度敏感的信息时,需要使用更高级别的保护机制,如使用加密数据的 Volume 类型,或者使用第三方加密解决方案等。
使用命令行创建:
可以使用 kubectl create secret 命令来创建 secret,例如:
shkubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=admin123
使用 YAML 文件定义:
ymlapiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: YWRtaW4= # base64 编码后的用户名 admin
password: MWYyZDFlMmU2N2Rm # base64 编码后的密码 1f2d1e2e67df
env方式
ymlapiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: myapp-container
image: busybox
command: ["/bin/sh","-c","echo $username;echo $password;sleep 3600;"]
env:
- name: username
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: password
valueFrom:
secretKeyRef:
name: my-secret
key: password
envFrom方式
ymlapiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: myapp-container
image: busybox
command: ["/bin/sh","-c","echo $username;echo $password;sleep 3600;"]
# 一次性注入这个 secret
envFrom:
- secretRef:
name: my-secret
restartPolicy: Never
volume 使用
ymlapiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
containers:
- name: myapp-container
image: busybox
command: ["/bin/sh","-c","sleep 3600"]
volumeMounts:
- name: secret-volume
mountPath: /data
volumes:
- name: secret-volume
secret:
secretName: my-secret
本文作者:松轩(^U^)
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!