• 如何通过secrets保存敏感的数据?并且在service中使用?



    什么是secrets?

     

    前面的部分,你已经看到了config的使用方式,config中,存放的是明文的内容,以文件的方式挂载到容器中,今天的说的secret存放的是敏感的数据,比如,证书,key等

     

    主要的目的,就是保护敏感数据的安全性。

     

    下面,通过一个示例来看下,如何创建、使用secret对象

     

    示例

     

    本次演示,将服务器的证书保存为secret的方法

     

    1、创建key和证书

    使用自签名的方式生成证书

    openssl req -x509 \
            -newkey \
            rsa:4096 \
            -nodes \
            -keyout server.key \
            -out server.crt \
            -sha256 \
            -days 3650 \
            -subj "/C=CN/ST=Beijing/L=Beijing/O=DC/OU=Ops/CN=www.nginx.local"

     

    命令执行后,生成对应的key和证书文件

    [root@nccztsjb-node-01 nginx]# openssl req -x509 \
    >         -newkey \
    >         rsa:4096 \
    >         -nodes \
    >         -keyout server.key \
    >         -out server.crt \
    >         -sha256 \
    >         -days 3650 \
    >         -subj "/C=CN/ST=Beijing/L=Beijing/O=DC/OU=Ops/CN=www.nginx.local"
    Generating a 4096 bit RSA private key
    ......++
    ............................................................................................................++
    writing new private key to 'server.key'
    -----
    [root@nccztsjb-node-01 nginx]# 
    
    
    
    [root@nccztsjb-node-01 nginx]# ls -ltr
    total 8
    -rw-r--r-- 1 root root 3268 Sep 30 13:53 server.key
    -rw-r--r-- 1 root root 2009 Sep 30 13:53 server.crt
    [root@nccztsjb-node-01 nginx]# 

     

     

    2、基于key和证书创建secret

     

    docker secret create server.key server.key
    
    docker secret create server.crt server.crt

     

    [root@nccztsjb-node-01 nginx]# docker secret ls
    ID                          NAME         DRIVER    CREATED          UPDATED
    24u7ecumb6l9r24uafdrx1bvz   server.crt             8 seconds ago    8 seconds ago
    gdz4m7ogit8fy0nc81o5ue7am   server.key             17 seconds ago   17 seconds ago
    [root@nccztsjb-node-01 nginx]# 

     

    3、创建nginx配置文件和config

     

    创建一个nginx配置文件,文件名字:site.conf

    server {
        listen                443 ssl;
        server_name           localhost;
        ssl_certificate       /run/secrets/server.crt;
        ssl_certificate_key   /run/secrets/server.key;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }

    其中

    ssl_certificate /run/secrets/server.crt;

    ssl_certificate_key /run/secrets/server.key;

    指定的是证书和key在容器中名字和位置

     

     

    创建config

     

    docker config create site.conf site.conf

     

    [root@nccztsjb-node-01 nginx]# docker config ls
    ID                          NAME        CREATED          UPDATED
    dktbpyig9t9bk8lala4jzqclu   homepage    2 days ago       2 days ago
    g5c1fvlz3apllis2xk7p473p7   site.conf   15 seconds ago   15 seconds ago
    [root@nccztsjb-node-01 nginx]# 

     

    4、创建nginx的service

     

    使用这个secre和config

    docker service create \
      --with-registry-auth \
      --name=nginx \
      --secret server.key \
      --secret server.crt \
      --replicas=4 \
      --config source=site.conf,target=/etc/nginx/conf.d/site.conf,mode=0440 \
      --publish published=3000,target=443 \
      172.20.58.152/middleware/nginx:1.21.4  
     
    • 使用config是为了挂配置文件
    • 配置文件中引用证书文件
    • secret是为了将证书文件挂载到容器中

     

    [root@nccztsjb-node-01 nginx]# docker service create \
    >   --with-registry-auth \
    >   --name=nginx \
    >   --secret server.key \
    >   --secret server.crt \
    >   --replicas=4 \
    >   --config source=site.conf,target=/etc/nginx/conf.d/site.conf,mode=0440 \
    >   --publish published=3000,target=443 \
    >   172.20.58.152/middleware/nginx:1.21.4  
    88sdl7zk79b2i50nkteui2fq4
    overall progress: 4 out of 4 tasks 
    1/4: running   [==================================================>] 
    2/4: running   [==================================================>] 
    3/4: running   [==================================================>] 
    4/4: running   [==================================================>] 
    verify: Service converged 
    [root@nccztsjb-node-01 nginx]# docker service ls
    ID             NAME      MODE         REPLICAS   IMAGE                                   PORTS
    88sdl7zk79b2   nginx     replicated   4/4        172.20.58.152/middleware/nginx:1.21.4   *:3000->443/tcp
    [root@nccztsjb-node-01 nginx]# netstat -ntlp | grep 3000
    tcp6       0      0 :::3000                 :::*                    LISTEN      16278/dockerd       
    [root@nccztsjb-node-01 nginx]# 

     

    5、浏览器中进行访问

     

    本地配置域名解析,访问域名

     

    注意:是https

    https://www.nginx.local:3000/

     

    因为是自签名证书,所以是没有经过验证,选择 “是”

     

     

    OK,访问是没有问题的。

     

    6、查看secret在容器中的挂载

     

    进入到容器中,看看secret是如何挂载到容器中的

     

    [root@nccztsjb-node-01 nginx]# docker exec -it 7b46aca74d61 bash
    root@7b46aca74d61:/# 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@7b46aca74d61:/# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    overlay          49G   20G   27G  43% /
    tmpfs            64M     0   64M   0% /dev
    tmpfs           7.6G     0  7.6G   0% /sys/fs/cgroup
    shm              64M     0   64M   0% /dev/shm
    /dev/vda2        49G   20G   27G  43% /etc/hosts
    tmpfs           7.6G   12K  7.6G   1% /run/secrets/server.key
    tmpfs           7.6G     0  7.6G   0% /proc/acpi
    tmpfs           7.6G     0  7.6G   0% /proc/scsi
    tmpfs           7.6G     0  7.6G   0% /sys/firmware
    root@7b46aca74d61:/# 
    root@7b46aca74d61:/# cd /run/secrets/
    root@7b46aca74d61:/run/secrets# ls
    server.crt  server.key
    root@7b46aca74d61:/run/secrets# ls -ltr
    total 8
    -r--r--r-- 1 root root 3268 Sep 30 06:18 server.key
    -r--r--r-- 1 root root 2009 Sep 30 06:18 server.crt

     

    可以到,secret在目录/run/secrets中

     

    文件的名字,就是secret的名字

     

    在创建service的时候,多个secret就使用多个--secret参数

     

      --secret server.key \
      --secret server.crt \

     

     

    以上,就是关于如何创建secret和secret的方法!

  • 相关阅读:
    网络协议
    面向对象三大特性之多态
    面向对象三大特性之封装
    面向对象三大特性之继承
    python面向对象编程
    常用模块之configpaser与shutil
    XML模块
    Python模块之OS,subprocess
    Python日志(logging)模块,shelve,sys模块
    Linux 配置 Nginx
  • 原文地址:https://www.cnblogs.com/chuanzhang053/p/16744820.html
Copyright © 2020-2023  润新知