摘要:但是我要介紹一下我的經驗,我安裝的方式和官網的也不同,和別人講的也不同在這里我們沒有暴露端口,而是使用了一個特殊的設置,就是這一點點小小的不同,會對你后面的操作影響巨大。
Docker
Docker是什么?如果說你的服務器是一條船,你只是一個小船主,你的船上散裝著各種貨物(也就是服務,比如http服務,數據庫服務,緩存服務,消息服務等等),那么Docker就相當于把你的服務器改裝成了一條集裝箱貨船,把你原先凌亂堆放的貨物放置在一個一個容器里,互相隔離,有序堆放。我們來看看Docker的商標,是不是很形象呢?
但是你的業務越做越大,很明顯一條船是裝不下了,你需要一支船隊:
這時候,如何管理船隊就變成了一個難題,沒有工具的幫忙,你甚至都不知道你有幾條船,每條船上裝的都是些什么貨物,這些貨物現在的狀態如何。
PortainerPortainer這個工具就是管理你船隊的一個好幫手。并且它本身也是安裝在一條船上,這條船就是你的指揮艇吧(說實話這個圖標有點丑,一點都沒有船隊老大的氣質)。
怎么安裝Portainer呢?這個別人早都已經介紹過了,包括官網上也有說明。但是我要介紹一下我的經驗,我安裝Portainer的方式和官網的也不同,和別人講的也不同:
docker run -d --network=host --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
在這里我們沒有暴露9000端口,而是使用了一個特殊的設置:--network=host,就是這一點點小小的不同,會對你后面的操作影響巨大。
Docker API光裝上Portainer是沒有用的,它充其量也只能管理它所在的這條船。
它怎么管理整個船隊呢?首先你得建立Portainer和船隊里其它船只之間的聯系。這個聯系就是讓被管理的船只暴露出Docker API接口來。但是如果你查看Docker官方的說明文檔,把整個過程弄得極其復雜無比,又要建立什么安全證書中心,又要頒發證書,沒有初中以上文化是搞不定的。
Docker本來是有一套簡便的暴露端口的方法的,為什么官網要搞這么復雜呢?因為原先的方法比較簡單,會直接把整個管理界面全部暴露給公網,有極大的安全風險,所以Docker官網搞了一套復雜的認證流程。
我們的解決思路比較簡單:你不要把端口暴露給公網不就行了嗎?加一個防火墻,只讓我們允許的地址來訪問就可以了,何必搞什么CA認證!
回到我們的被管理的船上,把API端口先暴露出來:
# systemctl edit docker [Service] ExecStart= ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
好吧,這只是CentOS 7下的一種作法,還有一種作法是修改/etc/sysconfig/docker文件:
OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375"
具體應該用哪種作法,要取決于你的docker服務是怎么設置的:
systemctl show docker | grep EnvironmentFile
你如果有EnvironmentFile設定,那么你就需要用上面第二種辦法,如果沒有,就用第一種辦法。
iptables好了,現在端口是暴露出來了,但是全公網任何人都能訪問,安全性怎么辦?這時候我們發現一個嚴重的問題:Docker在亂搞我們的iptables表!
iptables是很重要的防火墻的設置,docker為了暴露它的服務,它會忽視你設置在iptables表里的一切規則,強行讓它的規則生效。這還了得?我們必須禁止Docker這么胡搞,在上面的options里再加上一個選項--iptables=false:
OPTIONS="--selinux-enabled --log-driver=journald --signature-verification=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375" --iptables=false
重啟Docker服務后,它終于不再亂動我們的iptables表了。實際上為了安全起見,我們應該在所有docker服務器上都加上--iptables=false的選項。但是這樣又產生了另外一個問題:外部訪問固然是阻止了,但我們的Docker容器想訪問外部也訪問不了了,比如我們一開始安裝的Portainer也是運行在容器里的,不能訪問互聯網,它就沒有辦法管理其它Docker服務器了。為了解決這個問題,需要我們在建立Docker容器的時候指定--network=host,這也就是本文一開始安裝Portainer時候那樣設置的原因。
好,現在各個被管理端的2375端口是開開了,但是除了localhost誰也訪問不了它,怎么辦?我們可以在iptables里增加一條規則:
-A INPUT -s ###.###.###.### -m state --state NEW -m tcp -p tcp --dport 2375 -j ACCEPT
上面那個###.###.###.###就是你的Portainer指揮艇服務器的IP地址。這樣一來,除了這臺指揮艇服務器可以訪問被管理船只的Docker API接口以外,別的任何人都不能訪問。這樣就既達到了我們管理的目的,又保證了安全,同時還免出去了設置證書的繁瑣。
啟航吧,船隊!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27464.html
摘要:這里我想從我在谷歌內部使用容器,并基于容器研發大規模生產平臺的經驗中談談現有和谷歌容器環境的差別,并通過的實際案例落地經驗總結下自身所帶來的一些謊言和誤區。 我與容器的緣分起源于我在 Google 內部研發容器集群管理系: Cluster Management。谷歌內部一切皆容器,搜索、視頻、大數據、內部工具等核心業務都以容器的方式運行在容器編排系統 Borg 上。2014年,隨著公司...
摘要:分別進行配置和測試。也就是說對于開發和部署來說,使用可以更快速的交付和部署應用環境。更便捷的應用更新管理。使用鏡像創建并啟動一個容器。執行用戶指定的應用程序。執行完畢后,容器被終止。 Docker是為應用的開發和部署提供的一站式容器解決方案,它能幫助開發者高效快速的構建應用,實現Build,Ship and Run Any App, Anywhere,從而達到一次構建,到處運行的目的。...
摘要:作為一款優秀的平臺系統,其云代碼的功能如何,是如何實現的,又有哪些加分項,接下來將為大家一一揭曉。當然為了開發者更快的開始,同時提供了和項目來讓開發者更快接觸云代碼。 云代碼的由來 隨著MBaaS的發展,取代移動企業應用程序平臺的趨勢也越來越明顯。MBaaS系統為了讓企業能方便快捷的開發自己移動應用程序,提供了諸多移動客戶端支持,有最通用的REST API,也有方便移動開發者的軟件開發...
摘要:問能否談一下迅雷云使用的過程其實最初的時候,迅雷團隊對是懷有謹慎的態度的。三調度算法是迅雷云定制優化的。迅雷在使用這方面一直沒有把數據層面交給迅雷云之外的系統。 非商業轉載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/201256 曾金龍就職于迅雷網絡,是國內覆蓋面最廣的迅雷P2P引擎核心研發成員。他畢業于中山大...
摘要:年底首次開啟阿里云容器服務公測年月正式商業化年月成為國內唯一合作伙伴并推出專有云企業版,月實現產品國際化。阿里云容器服務為增加了阿里云云盤和等分布式存儲服務支持。阿里云容器服務為此進一步提升了易用性,降低了部署管理和應用開發門檻。 摘要: 作為容器編排系統的兩大流派, Kubernetes和Swarm的重要性不言而喻。融合了兩大高性能集成的阿里云容器服務,不僅可以降低50%的基礎架構成...
閱讀 2329·2021-09-29 09:42
閱讀 564·2021-09-06 15:02
閱讀 2616·2021-09-02 15:40
閱讀 2121·2019-08-30 14:23
閱讀 1865·2019-08-30 13:48
閱讀 1296·2019-08-26 12:01
閱讀 966·2019-08-26 11:53
閱讀 2153·2019-08-23 18:31