『中級篇』Docker-Secret管理和使用(51)

qianby發表於2021-09-09

之前我們們寫的docker-compose.yml裡面,裡面有mysql的時候有變數MYSQL_ROOT_PASSWORD: root,如果別人拿到了這個檔案直接root是不是就暴露了,很不安全,針對這個問題,docker-secret都替我們們解決了。原始碼:

什麼secret
  • 使用者名稱密碼
  • SSH Key
  • TLS認證
  • 任何不想讓別人看到的資料
Docker Swarm Mode Architecture

secret在docker中是如何管理的呢?重溫一下這個圖,docker swarm裡面有2個角色Manager 和 Worker,Worker這個節點有個內建的分散式儲存,它是基於raft協議,強一致性的,唯一性,可以讓manager下面的節點相互之前可以完成同步,manager這個在生產環境下強烈建議是2個manager,如果是一個是單點故障了,Internal分散式儲存的它是加密之後放入硬碟的,天然的加密環境,manager和worker節點是透過TLS進行加密的。他們的key都是存在內建節點的分散式資料庫節點上,透過加密以後儲存在硬碟上的,我想存一些secret可以直接存在manager內建的分散式節點上邊,比如一個資料庫需要一個密碼,我可以給它一個分散式資料庫讀取的許可權。能夠訪問到這個secret就可以了。
圖片描述

secret management
  • 存在swarm manager 節點raft database裡面
  • secret 可以assign給一個service,這個service就能看到這個secret
  • 在container內部secret看起來像檔案,但是實際是在記憶體中
secret 建立
cd labs/secret-example
pwd
#編輯password檔案,按照你自己的要求寫入密碼儲存
vi password

圖片描述

圖片描述

圖片描述

docker secret ls
#透過docker secret create 名稱 檔名
docker secret create my-pw password
docker secret ls
#管道的方式複製
echo 'adminadmin2' | docker secret create my-pw2 -
docker secret ls

圖片描述

圖片描述

docker secret ls
docker secret rm my-pw2
docker secret ls

圖片描述

service 使用secret

圖片描述

#指定secret的名稱
docker service create --name client --secret my-pw busybox sh -c "while true;do sleep 36000;done" 
docker service ls
docker service  ps client
docker container ls 
#進入這個container中
docker exec -it  92fe68ea886d
#進入run/secrets目錄
cd /run/secets/
cat my-pw

圖片描述

圖片描述

上邊的是傳入一個 如果需要傳入多個的話,就需要加入 --secret 名稱1 --secret 名稱2

看看官網的例項

圖片描述

透過官網建立mysql看效果
docker service create --name db --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql
docker service ls
#發現執行到work2 上邊了,我們們去work2看看
docker service ps db
#在work2上檢視容器資訊
docker ps

圖片描述

進入work2

docker ps
docker exec -it fceb5ba1cbac sh
cd /run/secrets/
cat my-pw
mysql -u root -p
#輸入上邊密碼adminadmin

圖片描述

stack中的應用
cd labs/secret-example
pwd
#截圖看到的,引用了secret的方式,前提是已經透過上邊說的docker secret create 建立了對應的密碼名稱
cat docker-compose.yml

圖片描述

在這個docker-compose最下面有個有三行註釋,如果放開的話這是引用了外部密碼檔案的形式建立docker secret,這種方式雖然省事了,但是有安全隱患,裡面多了個passwd檔案,最好的方式還是透過docker secret create的方式。
圖片描述

執行方式還是跟之前一樣的,只是修改了配置檔案。

docker stack deploy wordpress -c=docker-compose.yml

圖片描述

PS:網路現在很發達,密碼一定要好好的儲存,在公司內部開發安全也是首位,所以本節至關重要!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3549/viewspace-2813235/,如需轉載,請註明出處,否則將追究法律責任。

相關文章