如何通過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的方法!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章