亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker跨服務(wù)器通信Overlay解決方案(上)之 Consul單實(shí)例

 更新時間:2021年12月01日 10:52:39   作者:東北小狐貍  
這篇文章主要介紹了Docker跨服務(wù)器通信Overlay解決方案(上)之 Consul單實(shí)例,本文通過場景分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

場景

公司微服務(wù)快上線了,微服務(wù)都是用Docker容器進(jìn)行部署的,在同一臺主機(jī)下,把服務(wù)都部署上,注冊到Nacos的IP與PORT都是內(nèi)網(wǎng)的IP與Dockerfile中定義的端口號,看起來好像也沒什么問題,通過網(wǎng)關(guān)去調(diào)用也是可以調(diào)通的,請注意這有一個大前提:

必須把所有服務(wù)容器部署在同一臺主機(jī)上時才可以!

當(dāng)服務(wù)實(shí)例沒有部署在同一主機(jī)上,比如網(wǎng)關(guān)服務(wù)在A服務(wù)器,服務(wù)a在B服務(wù)器上,同樣注冊到Nacos (或其它注冊中心) ,此時上報上來的都是內(nèi)網(wǎng)的IP,那么當(dāng)外部有請求進(jìn)來的時候,網(wǎng)關(guān)通過Nacos的服務(wù)列表,找到了對應(yīng)的服務(wù)a的內(nèi)網(wǎng)IP,一調(diào)用發(fā)現(xiàn)調(diào)用不通

ps:內(nèi)網(wǎng)怎么會通……

任務(wù)

微服務(wù)容器可以不在同一臺服務(wù)器上,互相調(diào)用

想法

  • 既然上報的是內(nèi)網(wǎng)的IP,我直接讓他上報宿主機(jī)的IP和端口唄
  • 使用Docker的host網(wǎng)絡(luò)模式
  • 修改部署腳本,通過shell部署容器時,獲取宿主機(jī)IP與設(shè)置的映射端口號
  • 讓Docker的網(wǎng)絡(luò)互通

分析

以下分別按上邊的“想法”部分來進(jìn)行說明下問題

1.翻遍官方文檔與Github,得出的方案又有兩個:

  • 固定IP端口,把宿主機(jī)IP與端口寫死在配置文件中:看起來是解決了,但是問題是無法水平擴(kuò)展了 ——勉強(qiáng)能用
  • 固定網(wǎng)卡,防止因多網(wǎng)卡環(huán)境上報錯誤IP端口:沒有用的,進(jìn)入容器中ifconfig發(fā)現(xiàn)內(nèi)部網(wǎng)卡只有兩個,分別是eth0lo,對應(yīng)網(wǎng)卡的IP就是內(nèi)網(wǎng)IP ——還是沒用

2.使用Docker的Host網(wǎng)絡(luò)模式,你會發(fā)現(xiàn)IP這回上報的的確是宿主機(jī)IP,但是端口號不對啊……如果自己去通過shell使用Java參數(shù)傳入待映射的端口號的話,這種情況理論上是可行的,唯一缺點(diǎn)是docker ps 再也直接看不到端口號了,需要額外去docker inspect ——可以用

3.映射端口號可以獲取,但是主機(jī)的網(wǎng)卡名稱不同,寫死后不靈活,如果有的是eth0,有的是ens33呢?還有更多不可測的情況! ——或許可用

4.通過一些成熟的Docker容器網(wǎng)絡(luò)共享,但是會有一定的性能損耗 ——完全可用

概念與選型

最穩(wěn)妥的辦法——使用Docker網(wǎng)絡(luò)共享,在搜索引擎的幫助下,我決定用Overlay的方式來實(shí)現(xiàn)效果

以下簡單說下Overlay:

容器在兩個跨主機(jī)進(jìn)行通信的時候,是使用overlay network這個網(wǎng)絡(luò)模式進(jìn)行通信;如果使用host也可以實(shí)現(xiàn)跨主機(jī)進(jìn)行通信,直接使用這個物理的ip地址就可以進(jìn)行通信。overlay它會虛擬出一個網(wǎng)絡(luò)比如10.0.2.3這個ip地址。在這個overlay網(wǎng)絡(luò)模式里面,有一個類似于服務(wù)網(wǎng)關(guān)的地址,然后把這個包轉(zhuǎn)發(fā)到物理服務(wù)器這個地址,最終通過路由和交換,到達(dá)另一個服務(wù)器的ip地址。

想要實(shí)現(xiàn)Overlay網(wǎng)絡(luò),需要引入一個K-V數(shù)據(jù)庫,來保存網(wǎng)絡(luò)狀態(tài)信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的K-V數(shù)據(jù)庫

我們這里使用 Consul,相比其它K-V數(shù)據(jù)庫,Consul提供的界面化方便管理,所以這里使用Consul實(shí)現(xiàn)Overlay

通過讓每個服務(wù)器的Docker daemon將自己的IP注冊到Consul中,來共享Docker內(nèi)網(wǎng),這里共享的內(nèi)網(wǎng)是Overlay網(wǎng)絡(luò)模式的,也只有在注冊的Docker環(huán)境下使用同overlay網(wǎng)絡(luò)的容器,才能互相通訊

ps: 創(chuàng)建完成后,不使用overlay網(wǎng)絡(luò)的跨服務(wù)器容器,不能ping通

小試身手

單節(jié)點(diǎn)的Consul實(shí)現(xiàn)Overlay網(wǎng)絡(luò),使用Docker鏡像

環(huán)境說明

服務(wù)器OS 主機(jī)IP Docker版本 網(wǎng)卡名
Ubuntu Server 18.04 LTS 192.168.87.133 18.09.6 ens33
Ubuntu Server 18.04 LTS 192.168.87.139 18.09.7 ens33
待使用的Consul版本為1.5.2,看Docker Hub上提示漏洞目前最小的。

本測試環(huán)境適用于Systemd管理的Linux發(fā)行版

Consul沒有使用非官方的progrium/consul,主要是因?yàn)檫@個鏡像實(shí)在太老了,四年前的如果有漏洞也沒能及時修復(fù),所以自己去<hub.docker.com>去趟了遍官方的坑!??

注意事項(xiàng)

每臺運(yùn)行docker的主機(jī)都不能同hostname,可以使用

$ sudo hostnamectl set-hostname your-new-hostname

同hostname會導(dǎo)致同名的主機(jī)docker無法互相通信

動手做

準(zhǔn)備Consul使用鏡像在133服務(wù)器上啟動,所以可以先配置下Docker daemon的啟動參數(shù)指向133服務(wù)器

分別修改133、139兩臺服務(wù)器的docker.service

$ ifconfig
#已經(jīng)去除干擾網(wǎng)卡,記錄網(wǎng)卡名為ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.87.133  netmask 255.255.255.0  broadcast 192.168.87.255
        inet6 fe80::20c:29ff:fe02:e00a  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:02:e0:0a  txqueuelen 1000  (Ethernet)
        RX packets 156739  bytes 233182466 (233.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 45173  bytes 2809606 (2.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ vim /etc/docker/daemon.json

保存退出.

  • cluster-store:配置的Consul的leader地址,單體直接寫,其它軟件注意協(xié)議
  • cluster-advertise: 指定監(jiān)聽的網(wǎng)卡和端口,也可以指定接收訂閱消息的IP:PORT

還有一種是直接修改docker.service的,參考如下:

$ cd /etc/systemd/system/multi-user.target.wants
$ sudo vim docker.service

找到ExecStart= 字眼,在此行末尾添加如下代碼

--cluster-store=consul://192.168.87.133:8500 --cluster-advertise=ens33:2375

效果如下:

操作效果與以上方法保持一致

接著執(zhí)行命令,重啟docker服務(wù),另一臺服務(wù)器操作方式相同,注意網(wǎng)卡名稱

$ sudo systemctl daemon-reload && sudo systemctl restart docker

在133服務(wù)器啟動Consul服務(wù)

docker run -d --network host -h consul --name=consul --restart=always -e CONSUL_BIND_INTERFACE=ens33 consul:1.5.2

用主機(jī)模式的原因是防止有些端口沒有映射出來,還有就是想讓Consul識別外部網(wǎng)卡的方式只能host模式,下面給個非host的方式

$ docker run -di  -h consul -p 8500:8500 --name=consul consul:1.5.2

創(chuàng)建Docker overlay共享網(wǎng)絡(luò)

$ docker network create -d overlay my_overlay

這里與普通創(chuàng)建網(wǎng)絡(luò)不同在于指定了overlay模式的網(wǎng)絡(luò),-d也可以寫為--driver

訪問Consul的頁面,如我的是192.168.87.133:8500

我們的配置在Key/Value處,

點(diǎn)擊docker -> nodes

出現(xiàn)上邊的兩個節(jié)點(diǎn),分別是兩個docker daemon (守護(hù)進(jìn)程) 注冊的值

測試

新建兩個centos的容器分別在兩臺服務(wù)器上,使用overlay 我們剛才創(chuàng)建的網(wǎng)絡(luò)

133服務(wù)器

$ docker run -di --network my_overlay --name mycentos1 centos:7

139服務(wù)器

$ docker run -di --network my_overlay --name mycentos2 centos:7

--net全拼為--network,--開頭的可不加=

查看133服務(wù)器mycentos1容器的IP

$ docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" mycentos1
10.0.1.2

查看139服務(wù)器mycentos2容器的IP

$ docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" mycentos2
10.0.1.3

分別從133服務(wù)器ping 139服務(wù)器的mycentos2的內(nèi)網(wǎng)IP

反過來ping也是一樣的,但是并不是讓我們通過外部去訪問的,通過同一overlay網(wǎng)絡(luò)的容器就可以,不信我們作如下嘗試

133服務(wù)器

$ docker exec -it mycentos1 bash
# ping 10.0.1.3

訪問得通,沒有丟包,反過來也是一樣的,篇幅有限就不試驗(yàn)了

這起碼說明,現(xiàn)在的服務(wù)的確已經(jīng)網(wǎng)絡(luò)互通了,下篇文章我們來搞下生產(chǎn)用的集群方式

引文

技術(shù)漫談 | docker overlay網(wǎng)絡(luò)實(shí)現(xiàn)

Docker容器之overlay網(wǎng)絡(luò)

Docker跨主機(jī)網(wǎng)絡(luò)——overlay

Day22:介紹 Docker 的 Network (三)

Consul KV

Docker Hub Consul

Github docker-library/docs

Github docker-consul

本文系Hellxz學(xué)習(xí)與實(shí)踐文章,禁止布布扣、碼迷等第三方爬蟲網(wǎng)站爬取

到此這篇關(guān)于Docker跨服務(wù)器通信Overlay解決方案(上)之 Consul單實(shí)例的文章就介紹到這了,更多相關(guān)Docker Overlay網(wǎng)絡(luò)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Navicat 連接服務(wù)器端中的docker數(shù)據(jù)庫的方法

    Navicat 連接服務(wù)器端中的docker數(shù)據(jù)庫的方法

    這篇文章主要介紹了Navicat 連接服務(wù)器端中的docker數(shù)據(jù)庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 如何連接docker中的MySQL容器

    如何連接docker中的MySQL容器

    這篇文章主要介紹了如何連接docker中的MySQL容器問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Docker Secret的管理和使用詳解

    Docker Secret的管理和使用詳解

    這篇文章主要介紹了Docker Secret的管理和使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Docker上部署FastApi的示例代碼

    Docker上部署FastApi的示例代碼

    本文主要介紹了Docker上部署FastApi的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • docker部署Prometheus+Cadvisor+Grafana實(shí)現(xiàn)服務(wù)器監(jiān)控

    docker部署Prometheus+Cadvisor+Grafana實(shí)現(xiàn)服務(wù)器監(jiān)控

    這篇文章主要為大家介紹了docker部署Prometheus+Cadvisor+Grafana實(shí)現(xiàn)服務(wù)器監(jiān)控,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • prometheus監(jiān)控節(jié)點(diǎn)程序的安裝及卸載命令

    prometheus監(jiān)控節(jié)點(diǎn)程序的安裝及卸載命令

    這篇文章主要為大家介紹了prometheus監(jiān)控節(jié)點(diǎn)程序的安裝及卸載命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Docker-swarm快速搭建redis集群的方法步驟

    Docker-swarm快速搭建redis集群的方法步驟

    本文主要介紹了Docker-swarm快速搭建redis集群的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • docker安裝mysql、redis鏡像方式

    docker安裝mysql、redis鏡像方式

    這篇文章主要介紹了docker安裝mysql、redis鏡像方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • docker search命令的具體使用

    docker search命令的具體使用

    本文主要介紹了docker search命令的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 把數(shù)據(jù)庫部署在docker容器內(nèi)有哪些缺陷

    把數(shù)據(jù)庫部署在docker容器內(nèi)有哪些缺陷

    這篇文章主要介紹了把數(shù)據(jù)庫部署在docker容器內(nèi)有哪些缺陷,幫助大家更好的理解和學(xué)習(xí)docker容器和數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-08-08

最新評論