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