『中級篇』Docker-Secret管理和使用(51)
之前我們們寫的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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring之RestTemplate中級使用篇SpringREST
- 超級使用者和組管理
- 『中級篇』docker 使用bind Mounting實戰(36)Docker
- 『學了就忘』Linux使用者管理 — 51、使用者管理相關命令Linux
- Android 面試中級篇Android面試
- 如何在 Ubuntu 中管理和使用邏輯卷管理 LVMUbuntuLVM
- .NET Core CSharp 中級篇 2-2 List,ArrayList和DictionaryCSharp
- UITableView效能優化-中級篇UIView優化
- 『中級篇』容器的操作(20)
- POI操作Excel文件-中級篇Excel
- Ceph 管理和使用
- MySQL 當中的各種鎖(中級篇)MySql
- Android面試之Java中級篇Android面試Java
- 在Linux中,如何使用Docker和Kubernetes管理容器?LinuxDocker
- c51中bdata是什麼意思及使用方法
- 瞭解Vuex方法的使用初級篇Vue
- Java工程師學習指南 中級篇Java工程師
- 『中級篇』Docker-cloud介紹(54)DockerCloud
- Redis從入門到精通:中級篇Redis
- Java工程師學習指南(中級篇)Java工程師
- Android面試之Java中級Plus篇Android面試Java
- 【51nod】最大子段和
- Jenkins 使用指南 之 初級應用篇Jenkins
- Kotlin——中級篇(四):繼承類詳解Kotlin繼承
- python3 專案開發-中級篇Python
- 在Linux中,如何使用ELK進行日誌管理和分析?Linux
- 技術實踐丨GaussDB(DWS)運維管理功能“升級”的原理和使用運維
- 圖片管理ImageRanger入門級使用說明Ranger
- 使用 Docker 和 Traefik 搭建 GitLab(後篇)DockerGitlab
- 使用 Docker 和 Traefik 搭建 GitLab (前篇)DockerGitlab
- .NETCore CSharp 中級篇2-3 Linq簡介NetCoreCSharp
- TypeScript極速完全進階指南-2中級篇TypeScript
- 《明解C語言》中級篇 第8章C語言
- 跟我學C++中級篇——STL的學習C++
- .net持續整合sonarqube篇之專案管理與使用者管理專案管理
- 51
- 《MySQL 基礎篇》六:表和資料的管理MySql
- 使用json和jquery級聯選擇JSONjQuery