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

資訊專欄INFORMATION COLUMN

docker 網(wǎng)絡(luò)工具 pipework 分析

Betta / 1126人閱讀

摘要:地址給一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)下,比如,我要為我創(chuàng)建的使用一個(gè)我指定的分析下,第一行,創(chuàng)建容器,注意其中的標(biāo)示,不用自帶的分配模式。第二行,我為這個(gè)容器分配,掩碼位,對(duì)應(yīng)的為,并將這個(gè)添加到上。待加入到容器中。

pipework介紹

docker 使用中,網(wǎng)絡(luò)部分是其中最重要的一環(huán),對(duì)docker容器進(jìn)行網(wǎng)絡(luò)設(shè)置,官方提供了 fannel ,同時(shí)也可以借助高大上的ovs來(lái)搞,但是這里也有一個(gè)小巧的工具 pipework,可以針對(duì)單個(gè)docker容器實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)絡(luò)設(shè)置,雖然不比上述兩者全面,但是小、簡(jiǎn)是pipework的優(yōu)勢(shì),個(gè)人非常喜歡這個(gè)工具。

pipework 地址:https://github.com/jpetazzo/pipework
給一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)下,比如,我要為我創(chuàng)建的docker使用一個(gè)我指定的ip:

$did=$(docker run -it -d --net=none baseimage:v1)
pipework br0 $did 172.30.36.100/16@172.30.0.254

分析下,第一行,創(chuàng)建docker容器,注意其中的 --net=none 標(biāo)示,不用自帶的net分配模式。
第二行,我為這個(gè)容器分配ip:172.30.36.100,掩碼16位,對(duì)應(yīng)的gateway為:172.30.0.254,并將這個(gè)ip添加到bridge br0上。
在容器中查看:

~# docker exec $did ifconfig 
~# eth1      Link encap:Ethernet  HWaddr CA:81:40:85:5E:EA  
          inet addr:172.30.36.100  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::c881:40ff:fe85:5eea/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:118503937 errors:0 dropped:1545004 overruns:0 frame:0
          TX packets:389952 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:9431032966 (8.7 GiB)  TX bytes:70378592 (67.1 MiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:345910 errors:0 dropped:0 overruns:0 frame:0
          TX packets:345910 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:42510919 (40.5 MiB)  TX bytes:42510919 (40.5 MiB)
~# docker exec $did route -n
~# Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.30.0.254    0.0.0.0         UG    0      0        0 eth1
172.30.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth1

ok,下面我們來(lái)看下,它這條命令究竟干了什么。

pipework流程代碼解析

首先我先創(chuàng)建一個(gè) net=none的容器:

docker run -it -d --net=none baseimage:v1

得到containerid : cdb492d88f1e

接下來(lái)進(jìn)行操作

pipework br0 cdb492d88f1e 172.30.36.200/16@172.30.0.254

第一步,必然是先獲取對(duì)應(yīng)的變量值,在這里:
IFNAME=br0
GUESTNAME=cdb492d88f1e
IPADDR=172.30.36.100/16@172.30.0.254

之后判斷br0的類型:

if [ -d "/sys/class/net/$IFNAME" ]
  then
    if [ -d "/sys/class/net/$IFNAME/bridge" ]; then
      IFTYPE=bridge
      BRTYPE=linux
    fi
fi

這時(shí),IFTYPE=bridge,BRTYPE=linux

第二步,找到這個(gè)guest,目前只支持LXC container, 先找到cgroup地址:

while read _ mnt fstype options _; do
  [ "$fstype" != "cgroup" ] && continue
  echo "$options" | grep -qw devices || continue
  CGROUPMNT=$mnt
done < /proc/mounts

此時(shí), CGROUPMNT=/sys/fs/cgroup/devices (筆者使用的是centos7 x86_64,可能因人而異)
之后,從docker中獲取對(duì)應(yīng)的pid:

DOCKERPID=$(docker inspect --format="{{ .State.Pid }}" "$GUESTNAME")

此時(shí), DOCKERPID=21927(因人而異),即 所對(duì)應(yīng)docker容器中的init進(jìn)程在宿主機(jī)上對(duì)應(yīng)的pid;

分解 gateway:

GATEWAY="${IPADDR#*@}"
GATEWAY="${GATEWAY%%@*}"
IPADDR="${IPADDR%%@*}"

此時(shí),GATEWAY=172.30.0.254, IPADDR=172.30.36.100/16

第三步,預(yù)操作結(jié)束,開始實(shí)際操作。

首先,添加net namespace,可參考文章 "linux network namespace 學(xué)習(xí) "
因?yàn)閕p netns list直接讀取/var/run/netns中的內(nèi)容,于是

rm -f "/var/run/netns/$DOCKERPID"
ln -s "/proc/$DOCKERPID/ns/net" "/var/run/netns/$DOCKERPID"  
#將網(wǎng)絡(luò)命名空間文件軟鏈接到/var/run/netns,以便ip netns能夠讀取

之后創(chuàng)建一個(gè)veth pair

[ "$IFTYPE" = bridge ] && {
  LOCAL_IFNAME="v${CONTAINER_IFNAME}pl${NSPID}"
  GUEST_IFNAME="v${CONTAINER_IFNAME}pg${NSPID}"
  # Does the link already exist?
  if ip link show "$LOCAL_IFNAME" >/dev/null 2>&1; then
    # link exists, is it in use?
    if ip link show "$LOCAL_IFNAME" up | grep -q "UP"; then
      echo "Link $LOCAL_IFNAME exists and is up"
      exit 1
    fi
    # delete the link so we can re-add it afterwards
    ip link del "$LOCAL_IFNAME"
  fi
  ip link add name "$LOCAL_IFNAME" mtu "$MTU" type veth peer name "$GUEST_IFNAME" mtu "$MTU"
  (ip link set "$LOCAL_IFNAME" master "$IFNAME" > /dev/null 2>&1) || (brctl addif "$IFNAME" "$LOCAL_IFNAME")
  ip link set "$LOCAL_IFNAME" up
}

在這里,創(chuàng)建了一對(duì)veth pair ,LOCAL_IFNAME=veth1pl24305, GUEST_IFNAME=veth1pg24305
LOCAL_IFNAME 已和本地br0相綁定。
GUEST_IFNAME 待加入到容器中。

然后,將GUEST_IFNAME添加入docker 容器中:

ip link set "$GUEST_IFNAME" netns "$DOCKERPID"
ip netns exec "$DOCKERPID" ip link set "$GUEST_IFNAME" name "$CONTAINER_IFNAME"

這樣,容器內(nèi)就添加了一個(gè)veth網(wǎng)卡和宿主機(jī)做了關(guān)聯(lián),但是現(xiàn)在在容器內(nèi)部還看不見(jiàn)他,最后執(zhí)行:

ip netns exec "$DOCKERPID" ip addr add "$IPADDR" dev "$CONTAINER_IFNAME"
[ "$GATEWAY" ] && {
      ip netns exec "$DOCKERPID" ip route delete default >/dev/null 2>&1 && true
}
ip netns exec "$DOCKERPID" ip link set "$CONTAINER_IFNAME" up
[ "$GATEWAY" ] && {
    ip netns exec "$DOCKERPID" ip route get "$GATEWAY" >/dev/null 2>&1 || 
    ip netns exec "$DOCKERPID" ip route add "$GATEWAY/32" dev "$CONTAINER_IFNAME"
    ip netns exec "$DOCKERPID" ip route replace default via "$GATEWAY"
}

OK,讓我來(lái)查看下:

~# docker exec 17e5e58553ae ifconfig
~# eth1 Link encap:Ethernet  HWaddr 2A:E8:48:5C:77:9F  
          inet addr:172.30.36.200  Bcast:0.0.0.0  Mask:255.255.255.255
          inet6 addr: fe80::28e8:48ff:fe5c:779f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:960 (960.0 b)  TX bytes:960 (960.0 b)

搞定! 最后來(lái)個(gè)清理:

rm -f "/var/run/netns/$DOCKERPID"

Done

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/26499.html

相關(guān)文章

  • 使用ovs構(gòu)建docker網(wǎng)絡(luò),實(shí)現(xiàn)跨主機(jī)通信與網(wǎng)絡(luò)隔離

    摘要:干的具體的事是容器的虛擬網(wǎng)卡設(shè)備劃分處理的原理也非常簡(jiǎn)單,包進(jìn)入到時(shí)打上,發(fā)出去時(shí)去掉,發(fā)出去的端口與包的不匹配時(shí)不處理,這便實(shí)現(xiàn)了二層隔離。 初始化環(huán)境 升級(jí)內(nèi)核: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-r...

    Lorry_Lu 評(píng)論0 收藏0
  • Docker 高級(jí)網(wǎng)絡(luò)配置

    摘要:默認(rèn)指定了接口的地址和子網(wǎng)掩碼,讓主機(jī)和容器之間可以通過(guò)網(wǎng)橋相互通信。解決方法是創(chuàng)建一對(duì)接口,分別放到兩個(gè)容器中,配置成點(diǎn)對(duì)點(diǎn)鏈路。點(diǎn)到點(diǎn)鏈路不需要子網(wǎng)和子網(wǎng)掩碼。 容器訪問(wèn)控制 檢查本地系統(tǒng)的轉(zhuǎn)發(fā)支持 sysctl net.ipv4.ip_forward sysctl -w net.ipv4.ip_forward=1 # 手動(dòng)打開 如果在啟動(dòng)Docker服務(wù)的時(shí)候設(shè)定--ip-fo...

    jhhfft 評(píng)論0 收藏0
  • 實(shí)錄分享|kubernetes 在騰訊游戲的應(yīng)用實(shí)踐

    摘要:大家好今天我分享的主題與游戲行業(yè)相關(guān),為大家介紹的是在騰訊游戲中的應(yīng)用實(shí)踐。隨著技術(shù)的興起,我們開始調(diào)研在游戲容器化方面的應(yīng)用。也就是說(shuō),將不同游戲業(yè)務(wù)部署到同一臺(tái)母機(jī),采用綁定核的方式。在母機(jī)上架部署時(shí),創(chuàng)建設(shè)備和設(shè)備并將它們進(jìn)行關(guān)聯(lián)。 今天小數(shù)的推送內(nèi)容來(lái)自騰訊互娛高級(jí)工程師黃惠波,讓我們一起來(lái)看看吧~~~ 黃惠波,騰訊互娛高級(jí)工程師目前主要負(fù)責(zé)游戲計(jì)算資源容器化平臺(tái)的研發(fā)工作,包...

    DangoSky 評(píng)論0 收藏0
  • 虛擬化實(shí)踐

    摘要:本文并非虛擬化的科普文章,主要將我們?cè)谒接性茖?shí)踐過(guò)程中的一些思想和遇到的問(wèn)題拿出來(lái)跟大家討論分享。我們虛擬化實(shí)踐包含了傳統(tǒng)的基于協(xié)議的以及目前流行的。 引言 這里的虛擬化等于私有云。本文并非虛擬化的科普文章,主要將我們?cè)谒接性茖?shí)踐過(guò)程中的一些思想和遇到的問(wèn)題拿出來(lái)跟大家討論分享。我們虛擬化實(shí)踐包含了傳統(tǒng)的基于libvirt協(xié)議的KVM以及目前流行的docker。 為什么要虛擬化 虛擬化...

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

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

0條評(píng)論

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