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