91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

openstack-理解neutron服務的命名空間和安全組

發布時間:2020-06-09 19:20:39 來源:網絡 閱讀:1745 作者:羊草 欄目:云計算


Neutron 的設計目標是實現“網絡即服務”,為了達到這一目標,在設計上遵循了基于“軟件定義網絡”實現網絡虛擬化的原則,在實現上充分利用了 Linux 系統上的各種網絡相關的技術

涉及的linux網絡技術如下:

bridge:網橋,Linux中用于表示一個能連接不同網絡設備的虛擬設備,linux中傳統實現的網橋類似一個hub設備,而ovs管理的網橋一般類似交換機。

br-int:bridge-integration,綜合網橋,常用于表示實現主要內部網絡功能的網橋。

br-ex:bridge-external,外部網橋,通常表示負責跟外部網絡通信的網橋。

GRE:General Routing Encapsulation,一種通過封裝來實現隧道的方式。在openstack中一般是基于L3的gre,即original pkt/GRE/IP/Ethernet

VETH:虛擬ethernet接口,通常以pair的方式出現,一端發出的網包,會被另一端接收,可以形成兩個網橋之間的通道。

qvb:neutron veth, Linux Bridge-side

qvo:neutron veth, OVS-side

TAP設備:模擬一個二層的網絡設備,可以接受和發送二層網包。

TUN設備:模擬一個三層的網絡設備,可以接受和發送三層網包。

iptables:Linux 上常見的實現安全策略的防火墻軟件。

Vlan:虛擬 Lan,同一個物理 Lan 下用標簽實現隔離,可用標號為1-4094。

VXLAN:一套利用 UDP 協議作為底層傳輸協議的 Overlay 實現。一般認為作為 VLan 技術的延伸或替代者。

namespace:用來實現隔離的一套機制,不同 namespace 中的資源之間彼此不可


以neutron的gre模式為例,簡化示意如下

openstack-理解neutron服務的命名空間和安全組

一、命名空間


在 Linux 中,命名空間(namespace)可以被認為是隔離的擁有單獨網絡棧(網卡、路由轉發表、iptables)的環境。網絡名字空間經常用來隔離網絡設備和服務,只有擁有同樣網絡名字空間的設備,才能看到彼此。

可以用ip netns list命令來查看已經存在的名字空間。

ip net list

openstack-理解neutron服務的命名空間和安全組


qdhcp開頭的名字空間是dhcp服務器使用的,qrouter開頭的則是router服務使用的。 可以通過 ip netns exec namespaceid command 來在指定的網絡名字空

間中執行網絡命令,例如

ip netns exec qdhcp-3bb9ca55-d2e5-45eb-b782-e4de1f60014a ip addr

openstack-理解neutron服務的命名空間和安全組

可以看到,dhcp服務的網絡命名空間只有有一個網絡接口"aa08fc00-39",它通過"tapa08fc00-39"連接到br-int上。


1.1DHCP服務

    

dhcp服務是通過dnsmasq進程(輕量級服務器,可以提供dns、dhcp、tftp等服務)來實現的,該進程綁定到dhcp名字空間中的br-int的接口上。可以查看相關的進程

例如查詢”qdhcp-3bb9ca55-d2e5-45eb-b782-e4de1f60014a“的服務進程

ps -ef |grep 3bb9ca55-d2e5-45eb-b782-e4de1f60014a

openstack-理解neutron服務的命名空間和安全組

此dhcp服務,主要是給租戶私有網絡提供dhcp服務,在openstack的dashboard顯示如下:

openstack-理解neutron服務的命名空間和安全組



2.1 路由服務

router是提供跨 subnet 的互聯功能的。比如用戶的內部網絡中主機想要訪問外部互聯網的地址,就需要router來轉發(因此,所有跟外部網絡的流量都必須經過router)。目前router的實現是通過iptables進行的。

同樣的,router服務也運行在自己的名字空間中,可以通過如下命令查看:

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  ip addr

openstack-理解neutron服務的命名空間和安全組

可以看出,該名字空間中包括兩個網絡接口。

第一個接口 qr-d1a40252-8b(192.168.1.1/24)跟 br-int 上的接口相連。即任何從 br-int 來的找 192.168.1.0/24 (租戶的私有網段)的網包都會到達這個接口。

第一個接口 qg-2fe564e2-cd 連接到 br-ex 上的接口,即任何從外部來的網包,詢問 172.31.208.102(默認的靜態 NAT 外部地址)或 172.31.208.110(租戶申請的

floating IP 地址),都會到達這個接口。

在dashboard上也可以看到

openstack-理解neutron服務的命名空間和安全組

查看該名字空間中的路由表

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  ip route

openstack-理解neutron服務的命名空間和安全組

默認情況,以及訪問外部網絡的時候,休會從 qg-xxx 接口發出,經過 br-ex 發布到

外網。訪問租戶內網的時候,會從 qr-xxx 接口發出,發給 br-int


查看路由的snat和dnat規則

ip netns exec qrouter-014e0e10-47fc-469f-9883-3a5130fc79e6  iptables -t nat -S

openstack-理解neutron服務的命名空間和安全組


其中SNAT和DNAT規則完成外部 floating ip (172.31.208.110)到內部ip(192.168.1.17) 的映射


另外有一條SNAT規則把所有其他的內部IP出來的流量都映射到外部IP172.31.208.102。這樣即使在內部虛擬機沒有外部浮動IP的情況下,也可以發起對外網的訪

openstack-理解neutron服務的命名空間和安全組





二、安全組

 Security group通過Linux IPtables來實現,為此,在控制節點上引入了qbr*這樣的Linux傳統bridge(iptables規則目前無法加載到直接掛在到ovs的tap設備上)。 首先在控制節點上用neutron port-list命令列出虛擬機的端口id

neutron port-list

openstack-理解neutron服務的命名空間和安全組


其中id的前10位數字被用作虛機對外連接的qbr(同時也是tap口)的id。i或o加上前9位數字被用作安全組chain的id。

所有的規則默認都在Compute節點上的filter表(默認表)中實現,分別來查看filter表的INPUT、OUTPUT、FORWARD三條鏈上的規則。

在Compute節點上,可以用 iptables --line-numbers -vnL [CHAIN] 來獲得filter表(可以指定某個鏈上的)規則。


2.1INPUT

iptables --line-numbers -vnL INPUT

openstack-理解neutron服務的命名空間和安全組

可以看到,跟安全組相關的規則被重定向到neutron-openvswi-INPUT。 查看其規則,只有一條

iptables --line-numbers -vnL neutron-openvswi-INPUT

openstack-理解neutron服務的命名空間和安全組

重定向到neutron-openvswi-ocleef425-c

iptables --line-numbers -vnL neutron-openvswi-oc1eef425-c

openstack-理解neutron服務的命名空間和安全組

如果是vm發出的dhcp請求,直接通過,否則轉到neutron-openvswi-ocleef424-c



2.2 OUTPUT

iptables --line-numbers -vnL OUTPUT

openstack-理解neutron服務的命名空間和安全組


分別跳轉到neutron-filter-top和neutron-openvswi-OUTPUT。

iptables --line-numbers -vnL neutron-filter-top

openstack-理解neutron服務的命名空間和安全組

neutron-filter-top鏈是跳轉到neutron-openvswi-local。


查看neutron-openvswi-OUTPUT

iptables --line-numbers -vnL neutron-openvswi-OUTPUT

openstack-理解neutron服務的命名空間和安全組

可以看到 output 鏈無規則


同時查看neutron-openvswi-local鏈規則

iptables --line-numbers -vnL neutron-openvswi-local

openstack-理解neutron服務的命名空間和安全組

可以看到neutron-oenvswi-local鏈也是無規則




2.3 FORWARD

FORWARD chain上主要實現安全組的功能。用戶在配置缺省安全規則時候(例如允許ssh到vm,允許ping到vm),影響該chain

iptables --line-numbers -vnL FORWARD

openstack-理解neutron服務的命名空間和安全組

同樣跳轉到neutron-filter-top,無規則。跳轉到neutron-openvswi-FORWARD。

iptables --line-numbers -vnL neutron-openvswi-FORWARD

openstack-理解neutron服務的命名空間和安全組

neutron-openvswi-FORWARD將匹配所有進出tapcleef425端口的流量。

iptables --line-numbers -vnL neutron-openvswi-sg-chain

openstack-理解neutron服務的命名空間和安全組

如果是網橋從tap-cleef425端口發出到VM的流量,則跳轉到neutron-openvswi-icleef425-c;如果是從tap-cleef425端口進入到網橋的(即vm發出來的)流量,則跳轉到neutron-openvswi-ocleef425。

iptables --line-numbers -vnL neutron-openvswi-ic1eef425-c

openstack-理解neutron服務的命名空間和安全組

neutron-openvswi-icleef425-c允許安全組中配置的策略(允許ssh、ping等)和dhcp reply通過。默認的neutron-openvswi-sg-fallback將drop所有流量。

可以看到,還有一個編號為4的規則,是允許tcp協議的目的端口22,這個就是我們開放的端口組進行ssh協議使用22端口進行登陸

openstack-理解neutron服務的命名空間和安全組

iptables --line-numbers -vnL neutron-openvswi-oc1eef425-c

openstack-理解neutron服務的命名空間和安全組

neutron-openvswi-ocleef425-c將跳轉到neutron-openvswi-scleef425-c,允許DHCP Request和匹配VM的源IP和源MAC的流量通過。



2.4整體邏輯

整體邏輯如下所示:

openstack-理解neutron服務的命名空間和安全組



2.5 快速查找安全組規則

從前面分析可以看出,某個vm的安全組相關規則的chain的名字,跟vm的id的前9個字符有關。因此,要快速查找qbr-XXX上相關的iptables規則,可以用iptables -S列出(默認是

filter表)所有鏈上的規則,其中含有id的鏈即為虛擬機相關的安全組規則。其中--physdev-in表示即將進入某個網橋的端口,--physdev-out表示即將從某個網橋端口發出

iptables -S |grep tapc1eef425-c0

openstack-理解neutron服務的命名空間和安全組

可以看出,進出tap-cleef425-c0 口的FORWARD鏈上的流量都被扔到了neutron-openvswi-sg-chain這個鏈,neutron-openvswi-sg-chain上是security group具體的實現(兩條

規則,訪問虛擬機的流量扔給neutron-openvswi-icleef425-c;從虛擬機出來的扔給neutron-openvswi-ocleef4250-c。




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昆明市| 涪陵区| 关岭| 东莞市| 阿克陶县| 开封市| 天柱县| 托克逊县| 关岭| 潼关县| 岑巩县| 黄龙县| 永川市| 古浪县| 汝州市| 丰台区| 木兰县| 大同县| 新龙县| 布拖县| 阿克苏市| 攀枝花市| 伊金霍洛旗| 阳山县| 容城县| 万山特区| 新干县| 阿拉善左旗| 峨眉山市| 香港| 三江| 恩施市| 伊吾县| 肥乡县| 淮南市| 马尔康县| 崇文区| 中西区| 屯留县| 克东县| 台中县|