共計 1099 個字符,預(yù)計需要花費(fèi) 3 分鐘才能閱讀完成。
這期內(nèi)容當(dāng)中丸趣 TV 小編將會給大家?guī)碛嘘P(guān)如何訪問 Service,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
前面我們已經(jīng)學(xué)習(xí)了如何部署 service,也驗證了 swarm 的 failover 特性。不過截止到現(xiàn)在,有一個重要問題還沒有涉及:如何訪問 service?
為了便于分析,我們重新部署 web_server。
① docker service rm 刪除 web_server,service 的所有副本(容器)都會被刪除。
② 重新創(chuàng)建 service,這次直接用 –replicas=2 創(chuàng)建兩個副本。
③ 每個 worker node 上運(yùn)行了一個副本。
好了,現(xiàn)在 service 已經(jīng)在那里了,我們?nèi)绾卧L問呢?
要訪問 http 服務(wù),最起碼網(wǎng)絡(luò)得通吧,服務(wù)的 IP 我們得知道吧,但這些信息目前我們都不清楚。不過至少我們知道每個副本都是一個運(yùn)行的容器,要不先看看容器的網(wǎng)絡(luò)配置吧。
在 swarm-worker1 上運(yùn)行了一個容器,是 web_server 的一個副本,容器監(jiān)聽了 80 端口,但并沒有映射到 Docker Host,所以只能通過容器的 IP 訪問。查看一下容器的 IP。
容器 IP 為 172.17.0.2,實際上連接的是 Docker 默認(rèn) bridge 網(wǎng)絡(luò)。
我們可以直接在 swarm-worker1 上訪問容器的 http 服務(wù)。
但這樣的訪問也僅僅是容器層面的訪問,服務(wù)并沒有暴露給外部網(wǎng)絡(luò),只能在 Docker 主機(jī)上訪問。換句話說,當(dāng)前配置下,我們無法訪問 service web_server。
從外部訪問 service
要將 service 暴露到外部,方法其實很簡單,執(zhí)行下面的命令:
docker service update --publish-add 8080:80 web_server
如果是新建 service,可以直接用使用 –publish 參數(shù),比如:
docker service create --name web_server --publish 8080:80 --replicas=2 httpd
容器在 80 端口上監(jiān)聽 http 請求,–publish-add 8080:80 將容器的 80 映射到主機(jī)的 8080 端口,這樣外部網(wǎng)絡(luò)就能訪問到 service 了。
大家可能會奇怪,為什么 curl 集群中任何一個節(jié)點(diǎn)的 8080 端口,都能夠訪問到 web_server?
這實際上就是使用 swarm 的好處了,這個功能叫做 routing mesh。
上述就是丸趣 TV 小編為大家分享的如何訪問 Service 了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。