Secret资源的功能类似于ConfigMap,但它专用于存放敏感数据,如密码、数字证书、私钥、令牌和ssh key等。

一、概述

Secret对象存储数据以键值方式存储数据,再pod资源中通过环境变量或存储卷进行数据访问。Secret对象仅会被分发至调用了此对象的pod资源所在的工作节点,且只能由节点将其存储于内存中。另外,Secret对象的数据的存储及打印格式为base64编码的字符串,因此用户在创建对象时也要提供此种编码格式的数据。不过,在容器中以环境变量或存储卷的方式访问时,他们会被自动解码为明文格式。

在master节点上,Secret对象以非加密的格式存储于etcd中,因此管理员必须加以精心管控以确保敏感数据的机密性,必须确保etcd集群节点间以及与APIserver的安全通信,etcd服务的访问授权,还包括用户访问APIServer时的授权,因为拥有创建pod资源的用户都可以使用Secret资源并能够通过pod中的容器访问其数据。

Secret对象主要有两种用途,一是作为存储卷注入到pod上,由容器应用程序所使用,二是用于kubelet为pod里的容器拉取镜像时向私有仓库提供认证信息。Secret资源主要有四种类型组成:

1、Opaque:自定义数据内容;base64编码,用来存储密码、密钥、信息、证书等数据,类型标识符为generic

2、kubernetes.io/service-account-token:ServiceAccount的认证信息,可在创建service account时由kubernetes自动创建

3、kubernetes.io/dockerconfigjson: 用来存储Docker镜像仓库的认证信息,类型标识符为docker-registry

4、kubernetes.io/tls:用于为ssl通信模式存储证书和私钥文件,命令式创建时类型标识符为tls。

二、创建Secret资源

1、命令式创建

$ kubectl -n testing create secrete generic mysql-auth --from-literal=username=root --from-literal=password=
[root@master secret]# kubectl -n testing get secret
NAME TYPE DATA AGE
default-token-hs2jc kubernetes.io/service-account-token 24d
mysql-auth Opaque 15s
[root@master secret]# kubectl -n testing describe secret mysql-auth
Name: mysql-auth
Namespace: testing
Labels: <none>
Annotations: <none> Type: Opaque Data
====
password: bytes
username: bytes
[root@master secret]# kubectl -n testing get secret mysql-auth -o yaml
apiVersion: v1
data:
password: MTIzNDU2
username: cm9vdA==
kind: Secret
metadata:
creationTimestamp: "2019-08-20T05:38:39Z"
name: mysql-auth
namespace: testing
resourceVersion: ""
selfLink: /api/v1/namespaces/testing/secrets/mysql-auth
uid: c37a3fc1-c30c-11e9-8f53-000c29b9991f
type: Opaque [root@master secret]# echo cm9vdA== | base64 -d
root

对于本身业已存储于文件中的数据,也可在创建generic格式secret对象时使用--from-file选项从文件中直接进行加载,例如创建用于ssh认证的secret对象时:

$ kubectl -n testing create secret generic ssh-key --from-file=prikey=/root/.ssh/id_rsa --from-file=pubkey=/root/.ssh/id_rsa.pub

另外,若要基于私钥和数字证书文件创建用于ssl/tls通信的secret对象,则需要使用--cert=--key=选项来进行,其类型标识符为TLS:

$ kubectl -n testing create secret tls nginx-ssl --key=./nginx.key --cert=./nginx.crt
[root@master secret]# kubectl -n testing describe secret nginx-ssl
Name: nginx-ssl
Namespace: testing
Labels: <none>
Annotations: <none> Type: kubernetes.io/tls Data
====
tls.crt: bytes
tls.key: bytes

无论用户提供的证书和私钥文件使用的是什么名称,它们一律会被转换为分别以tls.key和tls.crt为其键名。

2、清单式创建

secret资源对象除了标准的apiVersion、kind、metadata字段外,还有:

data:key:value格式的数据,通常是敏感信息,数据格式需是以base64格式编码的字符串,因此,需要事先完成编码。

stringData:以明文格式定义的key:value数据,非base64编码,而是在创建为secret对象时自动进行编码并保存于data字段中;stringData字段中的明文不会被api server输出,不过若是使用apply命令创建,那么注解信息中还是可能会直接输出这些信息的

type:仅是为了便于编程方式处理secret数据而提供的类型标识。

apiVersion: v1
kind: Secret
metadata:
name: redis-sct
namespace: testing
stringData:
username: redis
password: 123pass
type: Opaque

根据此配置清单,使用apply命令创建后,用describe命令会输出未转换为base64编码的字符,若使用create命令创建,则输出base64编码后的字符。

三、secret存储卷

类似于pod消费configmap对象的方式,secret对象可以注入为环境变量,也可以存储为卷形式挂载使用。不过,容器应用通常会在发生错误时将所有环境变量保存于日志信息中,甚至有些应用在启动时即会将运行环境打印到日志中;另外,容器应用调用第三方程序为子进程时,这些子进程能够继承并使用父进程的所有环境变量。有鉴于此,使用环境变量引用secret对象中的敏感信息实在算不上明智之举。

在pod中使用secret存储卷的方式,除了其类型及引用标识要替换为secret及secretName之外,几乎完全类似于ConfigMap存储卷,包括支持使用挂载整个存储卷、只挂载存储卷中的指定键值以及独立挂载存储卷中的键等使用方式。

apiVersion: v1
kind: Pod
metadata:
name: vol-sct-pod
namespace: testing
spec:
containers:
- name: nginx
image: nginx:1.12-alpine
volumeMounts:
- name: ngx-crt
mountPath: /etc/nginx/ssl
readOnly: true
volumes:
- name: ngx-crt
secret:
secretName: nginx-ssl
/etc/nginx/ssl # ls -l
total
lrwxrwxrwx root root Aug : tls.crt -> ..data/tls.crt
lrwxrwxrwx root root Aug : tls.key -> ..data/tls.key
/etc/nginx/ssl # pwd
/etc/nginx/ssl

四、imagePullSecret资源对象

imagePullSecret资源可用于辅助kubelet从需要认证的私有镜像仓库获取镜像,它通过将secret提供的密码传递给kubelet从而在拉取镜像前完成必要的认证过程。使用imagePullSecret的方式有两种:一是创建docker-registry类型的secret对象,并在定义pod资源时明确通过imagePullSecret字段给出;另一个是创建docker-registry类型的secret对象,将其添加到某特定的serviceaccount对象中,那些使用该serviceaccount资源创建的pod对象,以及默认使用该serviceaccount的pod对象都将会直接使用imagePullSecret中的认证信息。

kubectl -n testing create secret  docker-registry test-reg --docker-username=cabel --docker-password= --docker-email=zhangcaibao@.com
apiVersion: v1
kind: Pod
metadata:
name: sct-image
namespace: testing
spec:
imagePullSecrets:
- name: test-reg
containers:
- name: vpn
image: cabel/openvpn:v2.

k8sSecret资源的更多相关文章

  1. Fis3的前端工程化之路[三大特性篇之资源定位]

    Fis3版本:v3.4.22 Fis3的三大特性 资源定位:获取任何开发中所使用资源的线上路径 内容嵌入:把一个文件的内容(文本)或者base64编码(图片)嵌入到另一个文件中 依赖声明:在一个文本文 ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  3. ABP文档 - 嵌入的资源文件

    文档目录 本节内容: 简介 创建嵌入的文件 暴露嵌入的文件 使用嵌入的文件 简介 一个web应用里,客户端包含javascript,css,xml等文件,这此文件被添加到一个web项目后,发布成独立的 ...

  4. 【资源】.Net 入门@提高 - 逆天的高薪之路!

     入门看视频,提高看书籍,飘升做项目.老练研开源,高手读外文,大牛讲低调~    官方学习计划 http://www.cnblogs.com/dunitian/p/5667901.html ----- ...

  5. 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?

    0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...

  6. Xamarin+Prism开发详解二:Xaml文件如何简单绑定Resources资源文件内容

    我们知道在UWP里面有Resources文件xxx.resx,在Android里面有String.Xml文件等.那跨平台如何统一这些类别不一的资源文件以及Xaml设计文件如何绑定这些资源?应用支持多国 ...

  7. 一个表缺失索引发的CPU资源瓶颈案例

    背景 近几日,公司的应用团队反应业务系统突然变慢了,之前是一直比较正常.后与业务部门沟通了解详情,得知最近生意比较好,同时也在做大的促销活动,使得业务数据处理的量出现较大的增长,最终系统在处理时出现瓶 ...

  8. 【NLP】Python NLTK获取文本语料和词汇资源

    Python NLTK 获取文本语料和词汇资源 作者:白宁超 2016年11月7日13:15:24 摘要:NLTK是由宾夕法尼亚大学计算机和信息科学使用python语言实现的一种自然语言工具包,其收集 ...

  9. Python多线程爬虫爬取电影天堂资源

    最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...

随机推荐

  1. Stream系列(十四)parallet方法使用

    并发 视频讲解:https://www.bilibili.com/video/av78408286/ EmployeeTestCase.java package com.example.demo; i ...

  2. Appendix 2- Lebesgue integration and Reimann integration

    Lebesgue integration and Reimann integration: Reimann: Split up the axis into equal intervals, then ...

  3. hdoj5909 Tree Cutting(点分治+树上dp转序列dp)

    题目链接:https://vjudge.net/problem/HDU-5909 题意:给一颗树,结点带权值v[i]<m.求异或和为k的子树个数(0<=k<m). 思路: 首先点分治 ...

  4. [bzoj1892][bzoj2384][bzoj1461][Ceoi2011]Match/字符串的匹配_KMP_树状数组

    2384: [Ceoi2011]Match 1892: Match 1461: 字符串的匹配 题目大意: 数据范围: 题解: 很巧妙的一道题呀. 需要对$KMP$算法有很深的理解才行. 首先我们需要发 ...

  5. 第十三章 字符串 (四)之Scanner类

    一.Scanner简述 Scanner扫描器类本质上是由正则表达式实现的,可以接受任何能产生数据的数据源对象,默认以空白符进行分词(包括\n等),使用各种next方法进行扫描匹配,获取匹配的数据. 二 ...

  6. vue中关于checkbox数据绑定v-model指令说明

    vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: <div id='myApp'> <input type="c ...

  7. 一键部署etcd集群

    这里使用三个节点,系统版本为CentOS7 # vim deploy-etcd.sh #!/bin/bash set -x set -e #更改这里的IP, 只支持部署3个节点etcd集群 decla ...

  8. Sharepoint 开启App 配置App

    如果没有Enable app,打开app store的时候出出现错误: Sorry, apps are turned off. If you know who runs the server, tel ...

  9. 高德地图API-设置考勤范围

    <template> <div class="page-setting-setgps"> <!--head--> <div class=& ...

  10. vue-cli实现原理

    分析:https://kuangpf.com/vue-cli-analysis/create/basic-verification.html vue-cli-service :https://blog ...