• k8s入门之Secret(十)


    Secret与ConfigMap都是用来存储配置信息的,不同之处在于ConfigMap是明文存储的,而Secret用来保存敏感信息,如:密码、OAuth令牌,ssh key等等。Secret常用有三种类型:

    • Opaque:使用base64编码格式存储密码等信息,加密性很弱。

    • kubernetes.io/dockerconfigjson:用来存储私有docker registry的认证信息(仓库地址、登录用户名密码)。

    • kubernetes.io/service-account-token:用来创建服务账号(Service Account),是一种自动被启用的用户认证机制,用来验证请求的合法性。

    一、创建Opaque类型的Secret对象

    1.使用命令创建Opaque类型的Secret对象

    kubectl create secret generic mysecret1 --from-literal=username=root --from-literal=password=123456
    

    (1)参数说明:

    • generic 子命令表示创建的是Opaque类型的Secret

    • --from-literal:表示从对字面量值进行编码,后面跟kv键值对,对v进行编码;

    你也可以使用--from-file参数指定对文件内容进行编码,此处读者可以自行练习。

    (2)查看创建结果:

    kubectl get secret
    

    图片

    (3)使用describe命令查看详情

     kubectl describe secret mysecret1
    

    图片

    可以看到被编码的数据没有显示出来,只能看到数据大小,可以使用以下方法查看被编码数据的明文

    (4)输出yaml文件格式查看详情

    kubectl get secret mysecret1 -o yaml
    

    图片

    然后使用linux命令查看被编码数据的明文

    echo -n "MTIzNDU2" | base64 -d
    

    图片

    注意截图中被解码后的明文是不含换行符的

    2.使用yaml文件创建Opaque类型的Secret对象

    (1)获取要保存数据的编码

    假如要保存username=admin,password=654321的数据,先用linux命令获取对应的base64编码数据。

    echo -n "admin" | base64
    echo -n "654321" | base64
    

    图片

    (2)新建yaml文件

    vi secret-my2.yaml
    

    (3)编写yaml文件内容

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret2
    type: Opaque
    data:
      username: YWRtaW4=
      password: NjU0MzIx
    

    (4)执行创建命令

    kubectl create -f secret-my2.yaml
    

    (5)查看创建结果

    可以使用上面的方法查看,这里不再赘述

    图片

    二、使用Opaque类型的secret对象

    1.通过环境变量的方式

    liunx自带的命令env,可以用来查看当前系统的环境变量,我们可以把secret对象设置到环境变量上来进行测试

    图片

    (1)新建yaml文件

    vi mysecret1-env.yaml
    

    (2)编写使用secret对象的pod的yaml文件内容

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-test-mysecret1
    spec:
      containers:
      - name: pod-test-mysecret1-bb
        image: busybox
        command: ["/bin/sh", "-c", "env"]
        # 从secret对象中获取对应key的值赋值给环境变量
        env:
        - name: USERNAME
          valueFrom:
            secretKeyRef:
              name: mysecret1
              key: username
        - name: PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysecret1
              key: password
    

    (3)执行yaml文件创建pod

    kubectl create -f mysecret1-env.yaml
    

    (4)查看pod,在默认名称空间下

    图片

    通过查看此pod的日志,可以看到输出的环境变量信息是mysecret1对象的信息

    图片

    2.通过vloume挂载方式

    (1)新建yaml文件

    vi mysecret2-volume.yaml
    

    (2)编写使用secret对象的pod的yaml文件内容

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-test-mysecret2
    spec:
      containers:
      - name: pod-test-mysecret2-bb
        image: busybox
        command: ["/bin/sh", "-c", "cat /etc/secrets/my-username;cat /etc/secrets/my-password;"]
        volumeMounts:
        - name: secrets
          mountPath: /etc/secrets
      volumes:
      - name: secrets
        secret:
         secretName: mysecret2
         items:
         # 把secret对象挂载到文件名
         - key: username
           path: my-username
         - key: password
           path: my-password
    

    (3)执行yaml文件创建pod

    kubectl create -f mysecret2-volume.yaml
    

    (4)查看pod,在默认名称空间下

    图片

    通过查看此pod的日志,可以看到输出的信息是mysecret2对象中的数据

    图片

    三、创建kubernetes.io/dockerconfigjson类型的Secret对象

    1. 通过命令创建
    kubectl create secret docker-registry aliyun --docker-server=https://registry.aliyun.com --docker-username=root --docker-password=123456 --docker-email=test@qq.com
    

    2.查看创建结果

    图片

    3.查看详细信息

    图片

    4.解码密文信息

    图片

    5.使用此类型的secret对象

    指定 imagePullSecrets 属性的name字段值为你创建的secret对象

    apiVersion: v1
    kind: Pod
    metadata:
      name: myapp
    spec:
      containers:
      - name: myapp
        image: xxx-api:v1.0
      imagePullSecrets:
      - name: aliyun
    
  • 相关阅读:
    systemVerilog的变量类型转换
    element ui框架(嵌套路由)
    java设计模式---建造者模式
    并查集路径压缩算法
    手把手教你写一个图片预览组件
    如何使用nuScenes数据集格式的单帧数据推理(以DETR3D为例)
    强化学习------Sarsa算法
    Centos7安装wps无法打开及字体缺失的问题解决
    无监督学习——k均值
    app小程序手机端Python爬虫实战06UiSelector文本、className定位方式
  • 原文地址:https://www.cnblogs.com/chuandao/p/16246367.html