zoukankan      html  css  js  c++  java
  • 配置文件之Secret

    一、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

  • 相关阅读:
    [贪心经典算法]Kruskal算法
    [经典贪心算法]Prim算法
    Java容器之List接口
    Java容器之Set接口
    JDK中的泛型
    Java中ArrayList与数组间相互转换
    Java中的增强for循环
    Java容器之Iterator接口
    Java之容器
    eg_4
  • 原文地址:https://www.cnblogs.com/you-xiaoqing/p/14387799.html
Copyright © 2011-2022 走看看