zoukankan      html  css  js  c++  java
  • 配置管理系列(一) Secret

    一、简介

    Secret对象类型用来保存敏感信息,解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者Pod中。Secret 可以以两种方式来进行使用:

    • 数据卷(Volume)
    • 环境变量

    敏感信息以base64编码格式存储,之后Pod会自动读取明文。

    二、Secret的创建与使用

    (一)创建Secret加密数据

    一般数据加密使用base64编码,所以可以先使用base64编码对用户名和密码进行加密:

    # 对用户名root 密码123进行加密
    [root@k8smaster ~]# echo -n "root" | base64
    cm9vdA==
    [root@k8smaster ~]# echo -n "123" | base64
    MTIz

     secret.yaml文件创建:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: cm9vdA==
      password: MTIz

    执行:

    [root@k8smaster ~]# kubectl create -f secret.yaml

    查看:

    [root@k8smaster ~]# kubectl get Secret 
    NAME                  TYPE                                  DATA   AGE
    default-token-mtnzx   kubernetes.io/service-account-token   3      66d
    mysecret              Opaque                                2      8m35s

    (二)使用

    1、以环境变量的形式使用

    secret_var.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    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

    其中:

    • 声明了两个环境变量 SECRET_USERNAME、SECRET_PASSWORD
    • secretKeyRef 中的name是之前创建的Secret名称
    • key 是之前创建Secret中的username和password

    执行:

    [root@k8smaster ~]# kubectl create -f secret_var.yaml

    查看:

    [root@k8smaster ~]# kubectl get pods
    NAME    READY   STATUS    RESTARTS   AGE
    mypod   1/1     Running   0          4m4s

    此时可以进入Pod中使用环境变量:

    # 自动将base64密码进行反解
    [root@k8smaster ~]# kubectl exec -it mypod bash
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
    
    root@mypod:/# echo $SECRET_USERNAME
    root
    root@mypod:/# echo $SECRET_PASSWORD
    123

    2、以数据卷形式使用

    基于secret.yaml文件之上进行操作,创建secret_volume.yaml文件:

    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@k8smaster ~]# kubectl exec -it volpod bash
    ...
    root@volpod:/# ls /etc/foo
    password  username
    root@volpod:/# cat /etc/foo/username 
    root
    root@volpod:/# cat /etc/foo/password 
    123
    作者:iveBoy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    #Eclipse web工程 部署 三种方式 3
    Eclipse web工程 部署 三种方式 2
    浅谈Eclipse调用Tomcat服务的原理
    Eclipse web工程 部署 三种方式 1
    java区分绝对路径和相对路径
    设置checkbox不能选中,复选框不能选中
    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录
    NFS,两台linux设置网络共享文件系统
    dom4j 改变XML声明和编码格式
    笔记本自带wifi
  • 原文地址:https://www.cnblogs.com/shenjianping/p/14908620.html
Copyright © 2011-2022 走看看