Fork me on GitHub

配置管理系列(一) Secret

一、简介

Secret对象类型用来保存敏感信息,解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod中。Secret 可以以两种方式来进行使用:

  • 数据卷(Volume)
  • 环境变量

敏感信息以base64编码格式存储,之后Pod会自动读取明文。

二、Secret的创建与使用

(一)创建Secret加密数据

一般数据加密使用base64编码,所以可以先使用base64编码对用户名和密码进行加密:

# 对用户名root 密码123进行加密
[root@k8smaster ~]# echo -n "root" | base64
cm9vdA==
[root@k8smaster ~]# echo -n "123" | base64
MTIz

 secret.yaml文件创建:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: cm9vdA==
  password: MTIz

执行:

[root@k8smaster ~]# kubectl create -f secret.yaml

查看:

[root@k8smaster ~]# kubectl get Secret 
NAME                  TYPE                                  DATA   AGE
default-token-mtnzx   kubernetes.io/service-account-token   3      66d
mysecret              Opaque                                2      8m35s

(二)使用

1、以环境变量的形式使用

secret_var.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

其中:

  • 声明了两个环境变量 SECRET_USERNAME、SECRET_PASSWORD
  • secretKeyRef 中的name是之前创建的Secret名称
  • key 是之前创建Secret中的username和password

执行:

[root@k8smaster ~]# kubectl create -f secret_var.yaml

查看:

[root@k8smaster ~]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          4m4s

此时可以进入Pod中使用环境变量:

# 自动将base64密码进行反解
[root@k8smaster ~]# kubectl exec -it mypod bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.

root@mypod:/# echo $SECRET_USERNAME
root
root@mypod:/# echo $SECRET_PASSWORD
123

2、以数据卷形式使用

基于secret.yaml文件之上进行操作,创建secret_volume.yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: volpod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

使用:

[root@k8smaster ~]# kubectl exec -it volpod bash
...
root@volpod:/# ls /etc/foo
password  username
root@volpod:/# cat /etc/foo/username 
root
root@volpod:/# cat /etc/foo/password 
123

 

posted @ 2021-06-23 21:31  iveBoy  阅读(156)  评论(0编辑  收藏  举报
TOP