成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

詳解云計(jì)算網(wǎng)絡(luò)底層技術(shù)——Linux network namespace 原理與實(shí)踐

binta / 3849人閱讀

摘要:和相關(guān)的操作的子命令是。之間的通信新創(chuàng)建的默認(rèn)不能和主機(jī)網(wǎng)絡(luò),以及其他通信。下面顯示兩個(gè)之間通信的網(wǎng)絡(luò)拓?fù)鋭?chuàng)建使用命令指定的名字。

本文首發(fā)于我的公眾號(hào) CloudDeveloper(ID: cloud_dev),專注于干貨分享,號(hào)內(nèi)有大量書籍和視頻資源,后臺(tái)回復(fù)「1024」即可領(lǐng)取,歡迎大家關(guān)注,二維碼文末可以掃。

本文通過(guò) IP 命令操作來(lái)簡(jiǎn)單介紹 network namespace 的基本概念和用法。深入了解可以看看我之前寫的兩篇文章 Docker 基礎(chǔ)技術(shù)之 Linux namespace 詳解 和 Docker 基礎(chǔ)技術(shù)之 Linux namespace 源碼分析。

和 network namespace 相關(guān)的操作的子命令是 ip netns 。

1. ip netns add xx 創(chuàng)建一個(gè) namespace
# ip netns add net1
# ip netns ls
net1
2. ip netns exec xx yy 在新 namespace xx 中執(zhí)行 yy 命令
# ip netns exec net1 ip addr 
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# ip netns exec net1 bash // 在 net1 中打開一個(gè)shell終端
# ip addr // 在net1中的shell終端
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
# exit // 退出net1

上面 bash 不好區(qū)分是當(dāng)前是在哪個(gè) shell,可以采用下面的方法解決:

# ip netns exec net1 /bin/bash --rcfile <(echo "PS1="namespace net1> "")
namespace net1> ping www.baidu.com

每個(gè) namespace 在創(chuàng)建的時(shí)候會(huì)自動(dòng)創(chuàng)建一個(gè)回環(huán)接口 lo ,默認(rèn)不啟用,可以通過(guò) ip link set lo up 啟用。

3. network namespace 之間的通信

新創(chuàng)建的 namespace 默認(rèn)不能和主機(jī)網(wǎng)絡(luò),以及其他 namespace 通信。

可以使用 Linux 提供的 veth pair 來(lái)完成通信。下面顯示兩個(gè) namespace 之間通信的網(wǎng)絡(luò)拓?fù)洌?/p>

3.1 ip link add type veth 創(chuàng)建 veth pair
# ip link add type veth
# ip link
3: veth0@veth1:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 1a:53:39:5a:26:12 brd ff:ff:ff:ff:ff:ff
4: veth1@veth0:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 46:df:46:1f:bf:d6 brd ff:ff:ff:ff:ff:ff

使用命令 ip link add xxx type veth peer name yyy 指定 veth pair 的名字。

3.2 ip link set xx netns yy 將 veth xx 加入到 namespace yy 中
# ip link set veth0 netns net0
# ip link set veth1 netns net1
#
# ip netns exec net0 ip addr
1: lo:  mtu 65536 qdisc noop state DOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
10: veth0@if11:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 1a:53:39:5a:26:12 brd ff:ff:ff:ff:ff:ff link-netnsid 1
3.3 給 veth pair 配上 ip 地址
# ip netns exec net0 ip link set veth0 up
# ip netns exec net0 ip addr
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
10: veth0@if11:  mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    link/ether 1a:53:39:5a:26:12 brd ff:ff:ff:ff:ff:ff link-netnsid 1
# ip netns exec net0 ip addr add 10.1.1.1/24 dev veth0
# ip netns exec net0 ip route
10.1.1.0/24 dev veth0  proto kernel  scope link  src 10.1.1.1 linkdown
#
# ip netns exec net1 ip link set veth1 up
# ip netns exec net1 ip addr add 10.1.1.2/24 dev veth1

可以看到,在配完 ip 之后,還自動(dòng)生成了對(duì)應(yīng)的路由表信息。

3.4. ping 測(cè)試兩個(gè) namespace 的連通性
# ip netns exec net0 ping 10.1.1.2
PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=0.069 ms
64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=0.054 ms
64 bytes from 10.1.1.2: icmp_seq=3 ttl=64 time=0.053 ms
64 bytes from 10.1.1.2: icmp_seq=4 ttl=64 time=0.053 ms

Done!

4. 多個(gè)不同 namespace 之間的通信

2 個(gè) namespace 之間通信可以借助 veth pair ,多個(gè) namespace 之間的通信則可以使用 bridge 來(lái)轉(zhuǎn)接,不然每?jī)蓚€(gè) namespace 都去配 veth pair 將會(huì)是一件麻煩的事。下面就看看如何使用 bridge 來(lái)轉(zhuǎn)接。

拓?fù)鋱D如下:

4.1 使用 ip link 和 brctl 創(chuàng)建 bridge

通常 Linux 中和 bridge 有關(guān)的操作是使用命令 brctl (yum install -y bridge-utils ) 。但為了前后照應(yīng),這里都用 ip 相關(guān)的命令來(lái)操作。

// 建立一個(gè) bridge
# ip link add br0 type bridge
# ip link set dev br0 up
9: br0:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 42:55:ed:eb:a0:07 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::4055:edff:feeb:a007/64 scope link
       valid_lft forever preferred_lft forever
4.2 創(chuàng)建 veth pair
//(1)創(chuàng)建 3 個(gè) veth pair
# ip link add type veth
# ip link add type veth
# ip link add type veth
4.3 將 veth pair 的一頭掛到 namespace 中,一頭掛到 bridge 上,并設(shè) IP 地址
// (1)配置第 1 個(gè) net0
# ip link set dev veth1 netns net0
# ip netns exec net0 ip link set dev veth1 name eth0
# ip netns exec net0 ip addr add 10.0.1.1/24 dev eth0
# ip netns exec net0 ip link set dev eth0 up
#
# ip link set dev veth0 master br0
# ip link set dev veth0 up

// (2)配置第 2 個(gè) net1
# ip link set dev veth3 netns net1
# ip netns exec net1 ip link set dev veth3 name eth0
# ip netns exec net1 ip addr add 10.0.1.2/24 dev eth0
# ip netns exec net1 ip link set dev eth0 up
#
# ip link set dev veth2 master br0
# ip link set dev veth2 up

// (3)配置第 3 個(gè) net2
# ip link set dev veth5 netns net2
# ip netns exec net2 ip link set dev veth5 name eth0
# ip netns exec net2 ip addr add 10.0.1.3/24 dev eth0
# ip netns exec net2 ip link set dev eth0 up
# 
# ip link set dev veth4 master br0
# ip link set dev veth4 up

這樣之后,竟然通不了,經(jīng)查閱 參見 ,是因?yàn)?/p>

原因是因?yàn)橄到y(tǒng)為bridge開啟了iptables功能,導(dǎo)致所有經(jīng)過(guò)br0的數(shù)據(jù)包都要受iptables里面規(guī)則的限制,而docker為了安全性(我的系統(tǒng)安裝了 docker),將iptables里面filter表的FORWARD鏈的默認(rèn)策略設(shè)置成了drop,于是所有不符合docker規(guī)則的數(shù)據(jù)包都不會(huì)被forward,導(dǎo)致你這種情況ping不通。

解決辦法有兩個(gè),二選一:

關(guān)閉系統(tǒng)bridge的iptables功能,這樣數(shù)據(jù)包轉(zhuǎn)發(fā)就不受iptables影響了:echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables

為br0添加一條iptables規(guī)則,讓經(jīng)過(guò)br0的包能被forward:iptables -A FORWARD -i br0 -j ACCEPT

第一種方法不確定會(huì)不會(huì)影響docker,建議用第二種方法。

我采用以下方法解決:

iptables -A FORWARD -i br0 -j ACCEPT

結(jié)果:

# ip netns exec net0 ping -c 2 10.0.1.2
PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
64 bytes from 10.0.1.2: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 10.0.1.2: icmp_seq=2 ttl=64 time=0.072 ms

--- 10.0.1.2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.071/0.071/0.072/0.008 ms

# ip netns exec net0 ping -c 2 10.0.1.3
PING 10.0.1.3 (10.0.1.3) 56(84) bytes of data.
64 bytes from 10.0.1.3: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 10.0.1.3: icmp_seq=2 ttl=64 time=0.087 ms

--- 10.0.1.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.071/0.079/0.087/0.008 ms

Done!


我的公眾號(hào) CloudDeveloper(ID: cloud_dev),號(hào)內(nèi)有大量書籍和視頻資源,后臺(tái)回復(fù)「1024」即可領(lǐng)取,分享的內(nèi)容包括但不限于云計(jì)算虛擬化、容器、OpenStack、K8S、霧計(jì)算、網(wǎng)絡(luò)、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術(shù)等內(nèi)容,歡迎大家關(guān)注。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25472.html

相關(guān)文章

  • 全棧是概念,興趣亦為追求(全棧開發(fā)者)

    摘要:耐得住寂寞,才能等得到花開慢慢積累自己的知識(shí),不斷疊加,全面優(yōu)化,無(wú)論在哪個(gè)領(lǐng)域都可以有你的一席之地,即為有志者事竟成,破釜沉舟,百二秦關(guān)終屬楚也祝我們能向未來(lái)發(fā)展的開發(fā)者們苦心人天不負(fù),臥薪嘗膽,三千越甲可吞吳。 我們今天來(lái)了聊一聊一個(gè)話題——全棧開發(fā) 作為一個(gè)程序員,不管是Java還是C...

    lbool 評(píng)論0 收藏0
  • hadoop-yarn、內(nèi)核資源隔離、虛擬化

    本篇本意是介紹hadoop的部署資源隔離和調(diào)度方案yarn。順便介紹了容器和容器集群管理。說(shuō)回yarn隔離分為cpu和內(nèi)存,cpu基于cgroups,內(nèi)存自行實(shí)現(xiàn)計(jì)算ru_maxrss。還對(duì)比了k8n的隔離,它內(nèi)存和cpu都基于cgroups。在調(diào)度方面介紹了yarn的兩種調(diào)度機(jī)制Capacity Scheduler和Fair Scheduler。整體:https://segmentfault.c...

    fsmStudy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<