码迷,mamicode.com
首页 > 其他好文 > 详细

配置文件之Secret

时间:2021-02-09 11:57:18      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:eating   value   home   map   media   ati   from   boa   foo   

一、Secret概述

Kubernetes Secret 对象可以用来储存敏感信息,例如:密码、OAuth token、ssh 密钥等。如果不使用 Secret,此类信息可能被放置在 Pod 定义中或者容器镜像中。将此类敏感信息存储到 Secret 中,可以更好地:

-控制其使用
-降低信息泄露的风险
-用户可以直接创建 Secret,Kubernetes 系统也会创建一些 Secret。

Secret有如下几种使用方式:

-作为 Pod 的环境变量
-作为 Pod 的数据卷挂载
-kubelet 在抓取容器镜像时,作为 docker 镜像仓库的用户名密码

二、Secret常见类型

Secret的类型
在创建 Secret 对象时,你可以使用 Secret 资源的 type 字段,或使用kubectl 命令行参数为其设置类型。
Secret 的类型用来帮助编写程序处理 Secret 数据,Kubernetes 提供若干种内置的类型,用于一些常见的使用场景。 针对这些类型,Kubernetes 所执行的合法性检查操作以及对其所实施的限制各不相同。

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

内置类型参考:
技术图片

三、创建Secret

1、Opaque类型的数据是一个map类型,要求value是base64编码格式:
[root@master-191 ~]# echo -n "admin" | base64
YWRtaW4=
[root@master-191 ~]# echo -n "xiaoqingabc321" | base64
eGlhb3FpbmdhYmMzMjE=
2、用刚才生成的值创建secret
[root@master-191 ~]# vim  secrets.yml
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: eGlhb3FpbmdhYmMzMjE=

[root@master-191 ~]# kubectl create -f secrets.yml 
secret "mysecret" created
[root@master-191 ~]# kubectl get pod
No resources found.
3、查看
[root@master-191 ~]# kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-qh5p5   kubernetes.io/service-account-token   3         25d
mysecret              Opaque                                2         9s

四、创建好secret之后,有两种方式来使用它:

1、以环境变量方式示例
[root@master-191 ~]# vim secret-var.yml
apiVersion: v1
kind: Pod
metadata:
  name: varpod
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
pod "varpod" created
[root@master-191 ~]# kubectl get pod 
NAME      READY     STATUS              RESTARTS   AGE
varpod    0/1       ContainerCreating   0          4s
[root@master-191 ~]# kubectl get pod 
NAME      READY     STATUS    RESTARTS   AGE
varpod    1/1       Running   0          7s
进入到容器中
[root@master-191 ~]# kubectl exec -it varpod bash
root@varpod:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
经测试,pod容器里能读取secret的变量
root@varpod:/# echo $SECRET_USERNAME
admin
root@varpod:/# echo $SECRET_PASSWORD
xiaoqingabc321

2、以Volume方式示例
[root@master-191 ~]# vim secret-vol.yml
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@master-191 ~]# kubectl create -f secret-vol.yml 
pod "volpod" created
[root@master-191 ~]# kubectl get pod
NAME      READY     STATUS    RESTARTS   AGE
varpod    1/1       Running   0          7m
volpod    1/1       Running   0          11s
进入到容器中
[root@master-191 ~]# kubectl exec -it  volpod bash
root@volpod:/# ls        
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@volpod:/# cd /etc/foo/
root@volpod:/etc/foo# ls
password  username
经测试,pod容器里能读取secret的变量
root@volpod:/etc/foo# cat username 
admin
root@volpod:/etc/foo# cat password 
xiaoqingabc321
root@volpod:/etc/foo# 

kubenetes官网:https://kubernetes.io/zh/docs
kubenetes社区:https://www.kubernetes.org.cn
kuboard.cn官网:https://kuboard.cn/learning

配置文件之Secret

标签:eating   value   home   map   media   ati   from   boa   foo   

原文地址:https://www.cnblogs.com/you-xiaoqing/p/14387799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!