Kubernetes -- secret (敏感数据管理)
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 (敏感数据管理)的更多相关文章
- Kubernetes Secret(机密存储)
		
Kubernetes Secret(机密存储) 官方文档:https://kubernetes.io/docs/concepts/configuration/secret/ 加密数据并存放Etcd中, ...
 - 【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 ...
 - kubernetes secret 和 serviceaccount删除
		
背景 今天通过配置创建了一个serviceaccounts和secret,后面由于某种原因想再次创建发现已存在一个serviceaccounts和rolebindings.rbac.authoriza ...
 - 【k8s secret token 删掉自动重建】kubernetes secret 和 serviceaccount
		
https://stackoverflow.com/questions/54354243/kubernetes-secret-is-persisting-through-deletes
 - kubernetes Configmap secret的使用
		
kubernetes configmap 核心作用是让配置信息和镜像解耦,pod可以使用configmap的数据生成配置文件.如果后端的pod配置文件要改变时,只需要更改下configmap里面的数据 ...
 - Kubernetes 存储系统 Storage 介绍:PV,PVC,SC
		
要求:先了解数据docker容器中数据卷的挂载等知识 参考网址: https://www.cnblogs.com/sanduzxcvbnm/p/13176938.html https://www.cn ...
 - Kubernetes 配置管理
		
ConfigMap(可变配置管理) 对于应用的可变配置在 Kubernetes 中是通过一个 ConfigMap 资源对象来实现的,我们知道许多应用经常会有从配置文件.命令行参数或者环境变量中读取一些 ...
 - Secret概述
		
Secret 概述 Kubernetes Secret 对象可以用来储存敏感信息,例如:密码.OAuth token.ssh 密钥等.如果不使用 Secret,此类信息可能被放置在 Pod 定义中或者 ...
 - 在Kubernetes中部署GlusterFS+Heketi
		
目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...
 
随机推荐
- dalao高精
			
#ifndef MY_BIGN_H#define MY_BIGN_H 1#pragma GCC system_header#include<cstring>#include<algo ...
 - SonarQube学习(三)- 项目代码扫描
			
一.前言 元旦三天假,两天半都在玩86版本DNF,不得不说,这个服真的粘度太高了,但是真的很良心. 说明: 注册账号上线100w点券,一身+15红字史诗装备以及+21强化新手武器.在线泡点一分钟888 ...
 - IDEA中配置Git,在Github上clone项目到IDEA
			
一.安装git 1.用homebrew安装git 运行以下命令安装 brew install git 默认的安装位置是 /usr/local/Cellar目录中(后面会用到) 二.在idea中配置Gi ...
 - 转载-Oracle 数据库导入导出 dmp文件
			
首先询问对方数据库的表空间名称和大小,然后在你的oracle中建立相应表空间,最后使用命令导入.导出数据.补充:1.要新建一个数据库: Oracle数据导入导出imp/exp就相当于oracle数据还 ...
 - TR2021_0000偶发数据库连接异常问题排查
			
[问题描述] 数据库连接异常是很难排查的一类问题.因为它牵涉到应用端,网络层和服务器端.任何一个组件异常,都会导致数据库连接失败.开发遇到数据库连接不上的问题,都会第一时间找DBA来协助查看,DBA除 ...
 - 配置Oracle数据库和监听随Linux系统自启动【转】
			
配置Oracle数据库和监听随Linux系统自启动 在某些情况下需要在Linux操作系统上提供一种无人值守的随机启动Oracle的功能,目的也许仅仅是为了帮助那些对Oracle细节非常不关心 ...
 - three.js 之cannon.js物理引擎
			
今天郭先生说的是一个物理引擎,它十分小巧并且操作简单,没错他就是cannon.js.这些优点都源自于他是基于js编写的,对于js使用者来说cannon.js拥有其他物理引擎没有的纯粹性.从学习成本来看 ...
 - 【Linux】Centos7 安装redis最新稳定版及问题解决
			
------------------------------------------------------------------------------------------------- | ...
 - 【Oracle】创建用户配额总是不足的解决问题 quota
			
在oracle中,正常创建的用户是没有配额限制的,也就是默认的是unlimited on tablespace的,但是在有些时候,没有设置相关的配额,用户总是会报错用户配额严重不足,查看表空间,也有很 ...
 - 【Oracle】生成随机数
			
Oracle生成随机数: dbms_random.string(opt, 6) --括号里的opt要从下面的列表中选择,数字代表要生成几位随机数,如果是1位的话,就改成1 以此类推 opt可取 ...