首页 > 其他分享 >如何通过secrets保存敏感的数据?并且在service中使用?

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

时间:2022-09-30 14:48:20浏览次数:54  
标签:service secrets server 敏感 nginx secret key -- root


什么是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的方法!

标签:service,secrets,server,敏感,nginx,secret,key,--,root
From: https://www.cnblogs.com/chuanzhang053/p/16744820.html

相关文章