https://www.kubernetes.org.cn/secret

secret 主要解决密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod Spec中

Secret可以以Volume或者环境变量的方式使用(共两种方式)

Secret有三种类型:

  • Service Account:用来访问Kubernetes API,由Kubernetes自动创建,并且会自动挂载到Pod的/run/secrets/kubernetes.io/serviceaccount目录中;
  • Opaque:base64编码格式的Secret,用来存储密码、密钥等;
  • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息;

实验 (Opaque)

第一步:加密用户及密码

╭─root@node1 ~
╰─➤ echo "123" | base64
MTIzCg==
╭─root@node1 ~
╰─➤ echo "node1" | base64
bm9kZTEK

第二步:编写secret的yml文件

apiVersion: v1
kind: Secret
metadata:
name: mysecret
data:
hostname: bm9kZTEK
password: MTIzCg==

第三步:执行secret文件

╭─root@node1 ~
╰─➤ kubectl apply -f secret.yml
secret/mysecret created

第四步:查看

╭─root@node1 ~
╰─➤ kubectl get secret
NAME TYPE DATA AGE
default-token-ngn4n kubernetes.io/service-account-token 3 10d
mysecret Opaque 2 2m4s
╭─root@node1 ~
╰─➤ kubectl describe secret mysecret
Name: mysecret
Namespace: default
Labels: <none>
Annotations:
Type: Opaque Data
====
hostname: 6 bytes
password: 4 bytes

第五步:获取加密数据

╭─root@node1 ~
╰─➤ kubectl edit secret mysecret # Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
hostname: bm9kZTEK # 加密数据
password: MTIzCg== # 加密数据
kind: Secret
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"hostname":"bm9kZTEK","password":"MTIzCg=="},"kind":"Secret","metadata":{"annotations":{},"name":"mysecret","namespace":"default"}}
creationTimestamp: "2019-08-30T08:00:24Z"
name: mysecret
namespace: default
resourceVersion: "244709"
selfLink: /api/v1/namespaces/default/secrets/mysecret
uid: f8a21f4c-18ce-4b13-814a-c20ee5efbe23
type: Opaque

第六步:解码

╭─root@node1 ~
╰─➤ echo "MTIzCg==" | base64 --decode
123
╭─root@node1 ~
╰─➤ echo "bm9kZTEK" | base64 --decode
node1

使用secret

以volume的形式挂载到pod

第一步:编写pod的yml文件

apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch test;sleep 60000"]
volumeMounts:
- name: du
mountPath: /tmp
volumes:
- name: du
secret:
secretName: mysecret

第二步:执行

╭─root@node1 ~
╰─➤ kubectl apply -f busybox-secret.yml
pod/pod-secret created

第三步:进入pod查看

╭─root@node1 ~
╰─➤ kubectl exec -it pod-secret /bin/sh
/ # ls
bin dev etc home proc root sys test tmp usr var
/ # cd tmp
/tmp # ls
hostname password
/tmp # cat hostname
node1
/tmp # cat password
123
/tmp #

第四步:动态更新密码

1、生成新密码

╭─root@node1 ~
╰─➤ echo 1234 | base64
MTIzNAo=

2、修改secret文件

apiVersion: v1
kind: Secret
metadata:
name: mysecret
data:
hostname: bm9kZTEK
password: MTIzNAo=

3、重新执行secret的yml文件

╭─root@node1 ~
╰─➤ kubectl apply -f secret.yml
secret/mysecret configured

第五步:查看密码

╭─root@node1 ~
╰─➤ kubectl exec -it pod-secret /bin/sh
/ # cd tmp
/tmp # ls
hostname password
/tmp # cat password
1234

以环境变量的方式使用secret

第一步:编写yml文件

apiVersion: v1
kind: Pod
metadata:
name: pod-mysql
spec:
containers:
- name: mysql
image: mysql
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password

第二步:执行

╭─root@node1 ~
╰─➤ kubectl apply -f mysql-secret.yml
pod/pod-mysql created

第三步:查看

╭─root@node1 ~
╰─➤ kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-mysql 1/1 Running 0 8s
╭─root@node1 ~
╰─➤ kubectl exec -it pod-mysql bash
root@pod-mysql:/# env
...
MYSQL_ROOT_PASSWORD=1234
...
root@pod-mysql:/#

Kubernetes -- secret (敏感数据管理)的更多相关文章

  1. Kubernetes Secret(机密存储)

    Kubernetes Secret(机密存储) 官方文档:https://kubernetes.io/docs/concepts/configuration/secret/ 加密数据并存放Etcd中, ...

  2. 【kubernetes secret 和 aws ecr helper】kubernetes从docker拉取image,kubernetes docker私服认证(argo docker私服认证),no basic auth credentials错误解决

    aws ecr helper: https://aws.amazon.com/blogs/compute/authenticating-amazon-ecr-repositories-for-dock ...

  3. kubernetes secret 和 serviceaccount删除

    背景 今天通过配置创建了一个serviceaccounts和secret,后面由于某种原因想再次创建发现已存在一个serviceaccounts和rolebindings.rbac.authoriza ...

  4. 【k8s secret token 删掉自动重建】kubernetes secret 和 serviceaccount

    https://stackoverflow.com/questions/54354243/kubernetes-secret-is-persisting-through-deletes

  5. kubernetes Configmap secret的使用

    kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...

  6. Kubernetes 存储系统 Storage 介绍:PV,PVC,SC

    要求:先了解数据docker容器中数据卷的挂载等知识 参考网址: https://www.cnblogs.com/sanduzxcvbnm/p/13176938.html https://www.cn ...

  7. Kubernetes 配置管理

    ConfigMap(可变配置管理) 对于应用的可变配置在 Kubernetes 中是通过一个 ConfigMap 资源对象来实现的,我们知道许多应用经常会有从配置文件.命令行参数或者环境变量中读取一些 ...

  8. Secret概述

    Secret 概述 Kubernetes Secret 对象可以用来储存敏感信息,例如:密码.OAuth token.ssh 密钥等.如果不使用 Secret,此类信息可能被放置在 Pod 定义中或者 ...

  9. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...

随机推荐

  1. flume的一些使用

    一.第一层采集通道的编写 1.第一层采集脚本Source的选择①Source: 数据源在日志文件中! 读取日志中的数据,可以使用以下Source ExecSource: 可以执行一个linux命令,例 ...

  2. 日常ie兼容问题(持续整理)

    1.关于new Date()格式为何要转成y/m/d格式 IE不会识别时间状态为"y-m-d"的形式,如果获取的new Date("2020-05-01") 那 ...

  3. RewriteCond 和RewriteRule规则说明 (转)

    Apache的Mod_rewrite学习 (RewriteCond重写规则的条件)收藏RewriteCond Syntax: RewriteCond TestString CondPattern [f ...

  4. LAMP搭建 转

    LAMP搭建 LAMP环境配置安装注意安装步骤及说明事项. (一)           安装gcc gcc glibc-devel glibc-headers kernel-headers libgo ...

  5. JWT初识记录

    因为前一段时间做了一个系统持续操作期间自动刷新token有效性的需求,然后就想着找一个空闲时间总结一下JWT,所以今天就简单的记录一下自己了解的内容. JWT是什么 JWT全称是JSON Web To ...

  6. 如何构建一个多人(.io) Web 游戏,第 2 部分

    原文:How to Build a Multiplayer (.io) Web Game, Part 2 探索 .io 游戏背后的后端服务器. 上篇:如何构建一个多人(.io) Web 游戏,第 1 ...

  7. scp等不需要存入know_host

    1.修改sshd的配置文件 vi /etc/ssh/ssh_config 修改为如下 StrictHostKeyChecking no UserKnownHostsFile /dev/null 重启s ...

  8. 浅入深出了解XXE漏洞

    环境搭建 https://github.com/c0ny1/xxe-lab 为了更深入的理解,我准备理论和实际相结合的了解XXE! 浅谈XML 初识XML 一个好的代码基础能帮助你更好理解一类漏洞,所 ...

  9. wmic 操作文件的datafile

    wmic datafile /?动词有ASSOC,CALL,CREATE,DELETE,GET,LIST 这几个 命令:wmic datafile where "filename='dsc0 ...

  10. python7、8章

    目录 第七章 用户输入和while循环 7.1 函数input()的工作原理 7.1.1 编写清晰的程序 7.1.2 使用int()来获取数值输入 分析: 结果: 7.1.3 求模运算符 7.1.4 ...