K8S之Secret
简介
secret顾名思义,用于存储一些敏感的需要加密的数据。这些数据可能是要保存在pod的定义文件或者docker的镜像中。把这些数据通过加密的方式存放到secrets对象中,可以降低信息泄露的风险。在secret中存储的数据都需要通过base64进行转换加密后存放。
创建secret
1、加密用户名密码
假设有两个敏感数据,分别是用户名breeze,密码:123456。首先需要使用base64来转换数据:
echo -n "breeze"| base64
YnJlZXpl
echo -n "123456"| base64
MTIzNDU2
然后创建一个secret.yml文件,内容如下:
apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
username: YnJlZXpl
password: MTIzNDU2
创建secret:
kubectl create -f secret.yml
也可以直接使用命令行生成secret:
kubectl create secret generic test-secret --from-literal=username='breeze',password='123456'
2、加密证书文件
kubectl create secret tls ingress-secret --key server.key --cert ca.crt
使用secret
1、使用volume挂载方式
给出一个pod示例:
apiVersion: v1
kind: Pod
metadata:
name: secret-test-pod
spec:
containers:
- name: test-container
image: nginx
volumeMounts:
- name: secret-volume
mountPath: /etc/secret-volume
volumes:
- name: secret-volume
secret:
secretName: test-secret
2、将secret用于env
创建一介secret.yml文件,内容如下:
apiVersion: v1
data:
data-1: c2ltb25zdQ==
data-2: c2ltb25zdS5tYWlsQGdtYWlsLmNvbQ==
kind: Secret
metadata:
name: test-secret
namespace: default
type: Opaque
与configmap的用法一致,下面直接贴上示例文件:
apiVersion: v1
kind: Pod
metadata:
name: secret-by-env
spec:
containers:
- name: busydayeasylife
image: gcr.io/google_containers/busybox:1.24
command:
- /bin/sh
- -c
- --
args:
- "while [ true ]; do echo $NAME; echo $EMAIL; sleep 30; done;"
env:
- name: NAME
valueFrom:
secretKeyRef:
name: test-secret
key: data-1
- name: EMAIL
valueFrom:
secretKeyRef:
name: test-secret
key: data-2