国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Rancher網絡全解讀

hss01248 / 1543人閱讀

摘要:在每臺主機上我們執行列出主機和網絡接口。其它的應用服務容器每個容器有兩個地址,一個屬于子網,另一個屬于的子網。雖然這會帶來一些性能上的影響,但是可以確保的網絡默認是安全的。

本文中,我們首先將Rancher部署到EC2實例上,并且添加新的主機,之后用Rancher的Catalog啟動了RocketChat應用,緊接著對運行中的容器的網絡接口和其他屬性的進行了分析。

同時,我們簡要介紹了Rancher的Overlay網絡和運行在Network Agent中的輔助服務進程,并通過上面實踐中收集的信息構建了Rancher集群中網絡通信的概覽圖。

與此同時,還特別介紹了使用IPSec實現主機間的安全通信。

Rancher 是一個容器管理的完整解決方案,并且即將成為一個完整的容器管理平臺。我們對在自己平臺上如何處理容器間的網絡進行了審慎的思考,并打算用一個簡單的例子和大家分享一下Rancher中的網絡。Rancher既可以被部署在單機,也能被擴展到數千個節點,在這篇文章中我們只用少量的主機和容器進行討論。

配置并啟動一個容器化的應用

首先我們要配置我們的基礎設施,本文使用的是AWS。我們先在EC2上用下面的命令安裝Docker并且啟動Rancher部署Master節點:

curl -sSL https://get.docker.com | sh - && sudo docker run -d --restart=always -p 8080:8080 rancher/server

Rancher的server在52.40.47.157:8080上被創建好了(需要注意的是:文中涉及的IP地址指向的AWS實例已經在發文的時候被銷毀了,文中所列IP僅作示例使用)。通過EC2的console,我們再新增兩個主機——H1和H2,用來跑我們的應用程序容器。下圖展示了我們主機的邏輯拓撲關系:一個節點用來跑Rancher的Server,另外兩個跑Rancher agent:

為了方便描述容器間的網絡,我們需要先啟動一個容器化的應用服務。用Rancher的Catalog創建應用非常方便,這里我們選擇Rocket Chat。Rocket Chat的應用模板有三個容器鏡像組成,分別是:mongo、rocketchat和hubot。啟動之后Rocket Chat被分配到:52.11.188.233:3000(關于更詳細的關于Rancher Catalog的攻略可以閱讀這里:http://docs.rancher.com/ranch...)。

探索基礎設施

Rocket Chat跑起來后,我們用Rancher UI來對H1和H2的情況一探究竟。點擊Infrastructure標簽頁看看有哪些容器跑在宿主機上:

圖中可以看出,rocketchat容器被調度到H1上了,剩下的兩個容器:mongo和hubot被調度到H2上。截圖中我們還能看到每個節點都運行著一個network agent(注意:只有當有容器被調度到當前宿主機后,network agent才會被創建)。各個容器的IP地址如截圖中所示——這些IP對于我們后面討論很重要。

我們可以下載machine config文件以獲得主機更詳細的信息:

解壓下載下來的machine configs之后,我們可以找到主機的私鑰和公鑰以及一些其他相關的配置文件。用私鑰我們ssh到主機。在每臺主機上我們執行ifconfig列出主機IP和網絡接口。下面是在H1上的結果(精簡后的),可以看到docker0網橋的IP(172.17.0.1)和eth0接口地址(172.31.38.255):

`ubuntu@leo-alpha-h1:~$ ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:64:4e:c0:c6
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:64ff:fe4e:c0c6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1114933 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1437072 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:198587596 (198.5 MB)  TX bytes:1813282482 (1.8 GB)
eth0      Link encap:Ethernet  HWaddr 02:b8:4d:31:40:f3
          inet addr:172.31.39.255  Bcast:172.31.47.255  Mask:255.255.240.0
          inet6 addr: fe80::b8:4dff:fe31:40f3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:9001  Metric:1
          RX packets:2187296 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1382626 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
         RX bytes:2627031496 (2.6 GB)  TX bytes:277190533 (277.1 MB)`

在H2上重復上面的過程,獲得相似的結果:docker0的IP是172.17.0.1,物理網卡eth0的地址是172.31.38.133。

接下來,我們深挖每臺主機上運行的容器的狀態并查看每個網絡接口上的IP地址。在H1上我們用sudo docker ps 和 sudo docker exec:

ubuntu@leo-alpha-h1:~$ sudo docker ps | awk "{print $1"	"$2}"
CONTAINER    ID
b6a27f5fd2fe rocketchat/rocket.chat:latest
f0cd5839d719 rancher/agent-instance:v0.8.1
132d6ad0c6b9 rancher/agent:v1.0.1

ubuntu@leo-alpha-h1:~$ sudo docker exec -it b6a27f5fd2fe /bin/bash
rocketchat@b6a27f5fd2fe:/app/bundle$ ip addr
17: eth0:  mtu 1500 qdisc noqueue state UP group default
    link/ether 02:14:82:66:7d:fd brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.42.64.98/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::14:82ff:fe66:7dfd/64 scope link
       valid_lft forever preferred_lft forever
ubuntu@leo-alpha-h1:~$ sudo docker exec -it f0cd5839d719 /bin/bash
root@f0cd5839d719:/# ip addr
11: eth0:  mtu 1500 qdisc noqueue state UP group default
    link/ether 02:14:82:82:b0:68 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.42.162.246/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet 169.254.169.250/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::14:82ff:fe82:b068/64 scope link
       valid_lft forever preferred_lft forever

在H2上重復上述過程,我們得到了在H1和H2上運行著的容器的信息:

HOST Container Name MAC Address IP addresses
H1 rocket.chat 02:14:82:66:7d:fd 172.17.0.5/16
10.42.64.98/16
H1 agent-instance 02:14:82:82:b0:68 172.17.0.2/16
10.42.162.246/16
169.254.169.250/32
H2 hubot 02:14:82:36:a4:6c 172.17.0.5/16
10.42.42.48/16
H2 mongo 02:14:82:2d:a0:55 172.17.0.4/16
10.42.148.239/16
H2 agent-instance 02:14:82:ab:9d:5d 172.17.0.2/16
10.42.69.59/16
169.254.169.250/32

從上表中我們發現每個容器都有一個網絡接口eth0。除此之外,Rancher的network agent容器(上表中的agent-instance)用三個IP地址:一個屬于Docker的子網(172.17.X.X),一個屬于Rancher的子網(10.42.X.X),以及第三個屬于鏈路本地地址子網(169.254.X.X)。其它的應用服務容器(hubot、mongo、rocketchat)每個容器有兩個IP地址,一個屬于Docker子網,另一個屬于Rancher的子網。

Hops and Traceroutes

讓我們繼續了解下Rancher中容器間的數據通信。從mongo 容器 ping hubot 容器(這倆是在同一臺宿主機上):

root@ad4e749d2658:/# ping -c4 hubot
PING hubot.rocket-chat.rancher.internal (10.42.42.48): 48 data bytes
56 bytes from 10.42.42.48: icmp_seq=0 ttl=64 time=0.041 ms
56 bytes from 10.42.42.48: icmp_seq=1 ttl=64 time=0.046 ms
56 bytes from 10.42.42.48: icmp_seq=2 ttl=64 time=0.075 ms
56 bytes from 10.42.42.48: icmp_seq=3 ttl=64 time=0.060 ms
--- hubot.rocket-chat.rancher.internal ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.041/0.055/0.075/0.000 ms
root@ad4e749d2658:/#

網絡從mongo容器可達hubot容器,從traceroute的結果也可以確認兩者直接只有一跳:

root@ad4e749d2658:/# traceroute hubot
traceroute to hubot (10.42.42.48), 30 hops max, 60 byte packets
 1  ip-10-42-42-48.us-west-2.compute.internal (10.42.42.48)  0.029 ms  0.012 ms  0.015 ms
root@ad4e749d2658:/#

我們再看下從mongo容器到rocketchat容器的traceroute結果(兩者在不同的主機上):

root@ad4e749d2658:/# traceroute rocketchat
traceroute to rocketchat (10.42.64.98), 30 hops max, 60 byte packets
 1  * * *
 2  ip-10-42-162-246.us-west-2.compute.internal (10.42.162.246)  1.391 ms  1.229 ms  1.168 ms
 3  ip-10-42-64-98.us-west-2.compute.internal (10.42.64.98)  1.137 ms  1.108 ms  1.086 ms
root@ad4e749d2658:/#

上面的結果中可以看出從mongo到rocketchat容器有三跳,并且中間經過了IP地址為10.42.162.246的網絡,這個正是在H1上運行著的network agent的地址。

Mongo容器中的ARP Table和IPSec

我們從mongo容器中看下此時的ARP table:

root@ad4e749d2658:/# cat /proc/net/arp
IP address HW type Flags HW address Mask Device
169.254.169.250 0x1 0x2 02:14:82:ab:9d:5d * eth0
10.42.64.98 0x1 0x2 02:14:82:ab:9d:5d * eth0
10.42.69.59 0x1 0x2 02:14:82:ab:9d:5d * eth0
10.42.42.48 0x1 0x2 02:14:82:36:a4:6c * eth0
172.17.0.1 0x1 0x2 02:42:6c:a6:5e:b8 * eth0
root@ad4e749d2658:/#

在ARP table中rocketchar容器的IP地址10.42.64.98的MAC地址是02:14:82:ab:9d:5d,這和在H2上運行著的network agent eth0的MAC地址是一樣的。

讓我們看下IPSec的信息:

root@9cdde771152c:/# swanctl --list-conns
conn-52.11.188.233:
  local:  %any
  remote: 52.11.188.233
  local pre-shared key authentication:
  remote pre-shared key authentication:
  child-52.11.188.233: TUNNEL
    local:  0.0.0.0/0
    remote: 0.0.0.0/0
root@9cdde771152c:/#

從結果中我們可以看出H2和H1之間有一條加密的通信通道52.11.188.233。上述結果的邏輯關系可由下圖所示:

Rancher中的Overlay網絡

我們通過查看H1和H2上容器的IP地址可以看出,Docker分配的IP地址在不同的主機上并不是唯一的。例如,相同的IP地址172.17.0.5在H1上分配給了rocketchat容器,而在H2上則被分配給了hubot容器,所以多帶帶使用Docker分配的IP不能獲得唯一的地址。為了解決這個問題,Rancher給集群中運行著的每一容器分配了一個唯一的IP地址,本文例子中的地址是從從ranher的默認子網10.42.0.0/16分配而來。

IPSec

在Rancher看來,安全性是頭等重要的事情!根據Rancher的設計,Rancher的集群的環境既可以公有云也可以是私有云,所以就不能對主機間的通訊信道做任何假設。我們希望從主機流出的數據是安全的,因此我們選擇用IPSec去構建主機間的完整網絡拓撲。雖然這會帶來一些性能上的影響,但是可以確保Rancher的網絡默認是安全的。未來的版本里我們可能會提供選項關閉IPsec。

Rancher用strongSwan來配置IPSec。其中strongSwan的組件Charon daemon用來實現IKEv2協議。如果想要看完整的拓撲細節,我們可以用命令swanctl:

root@f0cd5839d719:/# swanctl --list-sas
conn-52.11.198.155: #71, ESTABLISHED, IKEv2, 2146471635b90a25:1dc18102c0c48357
  local  "172.17.0.2" @ 172.17.0.2
  remote "172.17.0.2" @ 52.11.198.155
  AES_CBC-128/AES_XCBC_96/PRF_AES128_XCBC/MODP_2048
  established 524s ago, rekeying in 12694s
  child-52.11.198.155: #1, reqid 1234, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
    installed 459878s ago
    in  cb2952a7,      0 bytes,     0 packets
    out c0992075,      0 bytes,     0 packets
    local  0.0.0.0/0
    remote 0.0.0.0/0
conn-52.11.198.155: #70, ESTABLISHED, IKEv2, ff2a5d9495f14efe:dda2d2a6df6a1cf3
  local  "172.17.0.2" @ 172.17.0.2
  remote "172.17.0.2" @ 52.11.198.155
  AES_CBC-128/AES_XCBC_96/PRF_AES128_XCBC/MODP_2048
  established 8076s ago, rekeying in 5913s
  child-52.11.198.155: #2, reqid 1234, INSTALLED, TUNNEL-in-UDP, ESP:AES_CBC-128/HMAC_SHA1_96
    installed 459859s ago
    in  cf604805, 13790077094 bytes, 11532487 packets
    out cb46151e, 776570467 bytes, 9019180 packets
    local  0.0.0.0/0
    remote 0.0.0.0/0
Network Agent 服務

如果在Network Agent容器中列舉所有在跑的進程,我們可以看到幾個關鍵的服務在運行:rancher-dns,rancher=net等。rancher-net進程是Rancher網絡服務的核心,它的作用是用strongSwan 和 charon創建IPSec網絡。rancher-net的源代碼可以在https://github.com/rancher/ra...查看。類似的,rancher-dns服務的職責是解析容器的名字和IP地址,其代碼可以在https://github.com/rancher/ra...查看。

通過應用容器內的/etc/resolv.conf文件我們可以看到容器的nameserver指向NetworkAgent的地址169.254.169.250。

rocketchat@b6a27f5fd2fe:/app/bundle$ cat /etc/resolv.conf
search us-west-2.compute.internal rocket-chat.rancher.internal rocketchat.rocket-chat.rancher.internal rancher.internal
nameserver 169.254.169.250
總結

本文中,我們首先將Rancher部署到EC2實例上,并且添加新的主機,之后用Rancher的Catalog啟動了RocketChat應用,緊接著對運行中的容器的網絡接口和其他屬性的進行了分析。

同時,我們簡要介紹了Rancher的Overlay網絡和運行在Network Agent中的輔助服務進程,我們通過上面實踐中收集的信息構建了Rancher集群中網絡通信的概覽圖。

與此同時,還特別介紹了使用IPSec實現主機間的安全通信。

接下來......

Rancher中即將到來的幾點對于網絡的改進:

采用CNI/libnetwork 接口

目前網路中由于給每個容器引入了第二個IP地址,對于一些只能使用網卡第一個IP地址的應用帶來了一些問題。我們打算改用CNI/libnetwork的方案,這樣可以保證容器只有的默認網絡接口只有一個IP地址。于此同時,用戶也可以方便的使用社區中很多其他的網絡技術。

VXLAN支持

對于Rancher原生網絡,我們打算除了IPSec外添加對VXLAN的支持。

多網絡

在接下來的發行版中,我們打算為每一個Rancher支持的環境提供多個相互之間隔離的網絡。

期待您的反饋!

希望這篇文章可以對您深入了解Rancher的網絡提供有價值的信息。一如既往,您的任何問題和困惑都可以通過論壇 https://forums.rancher.com 或者微信公眾號(@RancherLabs )聯系我們,我們的社區有里一群優秀和充滿激情的小伙伴期待與您的溝通!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26770.html

相關文章

  • Rancher v1.2:網絡架構解讀

    摘要:在之前的版本上,用戶時常抱怨的網絡只有,沒有其他選擇。而容器社區的發展是十分迅猛的,各種容器網絡插件風起云涌,欲在江湖中一爭高下。同樣是基于,使用提供的,網絡配置信息以方式注入。 在之前的Rancher版本上,用戶時常抱怨Rancher的網絡只有IPsec,沒有其他選擇。而容器社區的發展是十分迅猛的,各種容器網絡插件風起云涌,欲在江湖中一爭高下。Rancher v1.2版本中與時俱進,...

    0x584a 評論0 收藏0
  • Rancher v1.2:網絡架構解讀

    摘要:在之前的版本上,用戶時常抱怨的網絡只有,沒有其他選擇。而容器社區的發展是十分迅猛的,各種容器網絡插件風起云涌,欲在江湖中一爭高下。同樣是基于,使用提供的,網絡配置信息以方式注入。 在之前的Rancher版本上,用戶時常抱怨Rancher的網絡只有IPsec,沒有其他選擇。而容器社區的發展是十分迅猛的,各種容器網絡插件風起云涌,欲在江湖中一爭高下。Rancher v1.2版本中與時俱進,...

    tinysun1234 評論0 收藏0
  • Rancher 1.5解讀:企業級使用,ready!

    摘要:元數據性能增強通過緩存元數據信息,我們大大增強了的元數據服務。這減少了數據庫抖動,也減少了傳遞到每個元數據服務的元數據需要占用的空間。由于許多服務都依賴于元數據,當然這也取決于用戶具體的實現方式您應該可以明顯感受得到性能的整體提升。 Rancher容器管理平臺1.5版已正式與大家見面了。此版本中的各項增強功能,均旨在讓Rancher能夠更好地支持企業級生產環境中的使用。 在新版本中,額...

    cartoon 評論0 收藏0
  • 如何利用Docker構建基于DevOps的自動CI

    摘要:三私有代碼庫阿里云使用引言使用肯定離不開和代碼的集成。本著代碼可靠性,服務器穩定性,功能擴展性綜合對比,我們選擇使用阿里云的庫。 來自用戶的DevOps實踐分享,分享從開發代碼到生產環境部署的一條龍操作的實踐及經驗, 包含工具技術的選型及考量、私有代碼庫與私有鏡像庫的應用等。 (一)容器服務的Rancher選型 1、為什么說是下一代核心技術 從互聯網的多次變革說起,早期的C/S架構,到...

    stormzhang 評論0 收藏0
  • Kubernetes儀表盤和外部IP代理漏洞及應對之策

    摘要:近期,儀表盤和外部代理接連被發現存在安全問題。本文將更深入解讀這兩個安全漏洞的原理會對您的部署造成的影響以及相應的應對之策。在中,儀表盤作為每個集群環境的一部分包含在內但是,部署不受影響,因為充當了儀表盤的身份驗證授權和代理。 近期,Kubernetes儀表盤和外部IP代理接連被發現存在安全問題。針對這兩個漏洞,Kubernetes發布了相應的補丁版本供會受漏洞影響的用戶解決問題。本文...

    everfly 評論0 收藏0

發表評論

0條評論

hss01248

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<