摘要:干的具體的事是容器的虛擬網卡設備劃分處理的原理也非常簡單,包進入到時打上,發出去時去掉,發出去的端口與包的不匹配時不處理,這便實現了二層隔離。
初始化環境
升級內核: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml awk -F" "$1=="menuentry " {print $2}" /etc/grub2.cfg grub2-set-default 0 reboot uname -a 安裝docker: yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum-config-manager --disable docker-ce-edge yum makecache fast yum install docker-ce service docker start 安裝open vswitch: yum -y install wget openssl-devel gcc make python-devel openssl-devel kernel-devel graphviz kernel-debug-devel autoconf automake rpm-build redhat-rpm-config libtool python-twisted-core python-zope-interface PyQt4 desktop-file-utils libcap-ng-devel groff checkpolicy selinux-policy-devel adduser ovs su - ovs yum localinstall /home/ovs/rpmbuild/RPMS/x86_64/openvswitch-2.5.0-1.el7.centos.x86_64.rpm -y systemctl start openvswitch.service systemctl is-active openvswitch ovs-vsctl -V systemctl enable openvswitch 安裝pipework: yum install git git clone https://github.com/jpetazzo/pipework cp pipework/pipework /bin
一些工具安裝:
yum install bridge-utils # 如果brctl不能用
yum install net-tools # 如果route命令不能用
單節點上使用ovs vlan劃分網絡啟動四個容器:
docker run -itd --name con1 ubuntu:14.04 /bin/bash docker run -itd --name con2 ubuntu:14.04 /bin/bash docker run -itd --name con3 ubuntu:14.04 /bin/bash docker run -itd --name con4 ubuntu:14.04 /bin/bash
創建ovs網橋并綁定端口
pipework ovs0 con1 192.168.0.1/24 @100 pipework ovs0 con2 192.168.0.2/24 @100 pipework ovs0 con3 192.168.0.3/24 @200 pipework ovs0 con4 192.168.0.4/24 @200
這樣con1 和 con2是通的,con3和con4是通的,這個比較簡單。pipework干的具體的事是:
ovs-vsctl add-port ovs0 [容器的虛擬網卡設備] tag=100
ovs劃分vlan處理的原理也非常簡單,包進入到switch時打上tag,發出去時去掉tag,發出去的端口與包的tag不匹配時不處理,這便實現了二層隔離。
access端口與trunk端口的區別是,trunk端口可接受多個tag。
跨主機vlan準備兩個主機,在host1上:
docker run -itd --name con1 ubuntu:14.04 /bin/bash docker run -itd --name con2 ubuntu:14.04 /bin/bash pipework ovs0 con1 192.168.0.1/24 @100 pipework ovs0 con2 192.168.0.2/24 @200
如果是單張網卡的話,把eth0橋接到switch上時會造成網絡中斷,所以以下幾步不要通過ssh操作:
如果非得ssh去操作的話把以下命令放在一條命令中執行(用&&連接各個命令)
ovs-vsctl add-port ovs0 eth0 ifconfig ovs0 10.1.86.201 netmask 255.255.255.0 # 這里地址和掩碼與eth0的配置一致 ifconfig ovs0 up ifconfig eth0 0.0.0.0 route add default gw 10.1.86.1 # 執行之前看看eth0的gw是什么,保持一致,這樣eth0就橋接到ovs0上去了。
查看switch端口:
[root@dev-86-204 ~]# ovs-vsctl show c5ddf9e8-daac-4ed2-80f5-16e6365425fa Bridge "ovs0" Port "veth1pl41885" tag: 100 Interface "veth1pl41885" Port "ovs0" Interface "ovs0" type: internal Port "eth0" Interface "eth0" Port "veth1pl41805" tag: 200 Interface "veth1pl41805" ovs_version: "2.5.1"
在host2上:
docker run -itd --name con3 ubuntu:14.04 /bin/bash docker run -itd --name con4 ubuntu:14.04 /bin/bash pipework ovs0 con3 192.168.0.3/24 @100 pipework ovs0 con4 192.168.0.4/24 @200
同樣要橋接eth0到ovs0上,同host1的操作,然后con1與con3可通,con2與con4可通.
GRE實現overlay網絡linux內核需要3.11以上,本尊在3.10內核上實踐失敗,在虛擬機中升級內核時虛擬機啟動不了,CPU飆到100%,以后再試。
發現把容器直接掛ovs網橋上是可以通的
gre與下面的vxlan非常類似,只需要在添加往外連的端口時改成下面命令即可:
ovs-vsctl add-port ovs0 gre0 -- set interface gre0 type=gre options:remote_ip=172.31.244.185Vxlan實現跨主機通信
host1:10.1.86.203 ovs0 | |-veth1 <-------> eth1 192.168.0.3 con3 | |-vxlan1-------------+ | | | host2:10.1.86.204 | ovs0 | | | |-vxlan1------------+ | |-veth1 <--------> eth1 192.168.0.4 con4 |
可以看到con3和con4在搭建vxlan之前是無法通信的。
在host1上:
[root@dev-86-203 ~]# docker run --name con3 -itd ubuntu:14.04 /bin/bash [root@dev-86-203 ~]# ovs-vsctl add-br ovs0 [root@dev-86-203 ~]# pipework ovs0 con3 192.168.0.3/24 # 給容器分配地址并掛到ovs0上 [root@dev-86-203 ~]# ovs-vsctl add-port ovs0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.86.204 options:key=flow # 創建vxlan [root@dev-86-203 ~]# ovs-vsctl show 5e371797-db70-451c-a0f2-d70c6d00cd05 Bridge "ovs0" Port "veth1pl3342" Interface "veth1pl3342" Port "ovs0" Interface "ovs0" type: internal Port "vxlan1" Interface "vxlan1" type: vxlan options: {key=flow, remote_ip="10.1.86.204"} ovs_version: "2.5.1"
host2上同理:
[root@dev-86-204 ~]# docker run --name con4 -itd ubuntu:14.04 /bin/bash [root@dev-86-204 ~]# ovs-vsctl add-br ovs0 [root@dev-86-204 ~]# pipework ovs0 con4 192.168.0.4/24 # 給容器分配地址并掛到ovs0上 [root@dev-86-204 ~]# ovs-vsctl add-port ovs0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=10.1.86.203 options:key=flow # 創建vxlan [root@dev-86-204 ~]# ovs-vsctl show c5ddf9e8-daac-4ed2-80f5-16e6365425fa Bridge "ovs0" Port "ovs0" Interface "ovs0" type: internal Port "veth1pl52846" Interface "veth1pl52846" Port "vxlan1" Interface "vxlan1" type: vxlan options: {key=flow, remote_ip="10.1.86.203"} ovs_version: "2.5.1"
驗證:
[root@dev-86-204 ~]# docker exec con4 ping 192.168.0.3 # con4容器中ping con3的地址,可通 PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data. 64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.251 ms 64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.170 ms
更多問題歡迎聯系我: https://github.com/fanux
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27038.html
摘要:部署環境及架構操作系統版本版本版本服務器信息在詳細介紹部署集群前,先給大家展示下集群的邏輯架構。其他操作更新刪除查看刪除除此之外,你可以刪除,如刪除上的格式為服務名字,不必關心從哪個上刪除了。 本文通過實際操作來演示Kubernetes的使用,因為環境有限,集群部署在本地3個ubuntu上,主要包括如下內容: 部署環境介紹,以及Kubernetes集群邏輯架構 安裝部署Open v...
摘要:部署環境及架構操作系統版本版本版本服務器信息在詳細介紹部署集群前,先給大家展示下集群的邏輯架構。其他操作更新刪除查看刪除除此之外,你可以刪除,如刪除上的格式為服務名字,不必關心從哪個上刪除了。 本文通過實際操作來演示Kubernetes的使用,因為環境有限,集群部署在本地3個ubuntu上,主要包括如下內容: 部署環境介紹,以及Kubernetes集群邏輯架構 安裝部署Open v...
摘要:今天小數給大家帶來一篇技術正能量滿滿的分享來自社區線上群分享的實錄,分享嘉賓是數人云肖德時。第二級調度由被稱作的組件組成。它們是最小的部署單元,由統一創建調度管理。 今天小數給大家帶來一篇技術正能量滿滿的分享——來自KVM社區線上群分享的實錄,分享嘉賓是數人云CTO肖德時。 嘉賓介紹: 肖德時,數人云CTO 十五年計算機行業從業經驗,曾為紅帽 Engineering Service ...
閱讀 3881·2021-11-24 11:14
閱讀 3321·2021-11-22 13:53
閱讀 3883·2021-11-11 16:54
閱讀 1546·2021-10-13 09:49
閱讀 1211·2021-10-08 10:05
閱讀 3392·2021-09-22 15:57
閱讀 1754·2021-08-16 11:01
閱讀 965·2019-08-30 15:55