OpenStackの中性子学習

中性子ものOpenStackの最近の研究では、と、自分の理解のいくつかを記録します。

ネットワークの基礎

スイッチおよびVLANの
動作スイッチは、相互運用性を実現するために、デバイスに接続されています。ネットワークホストは、ホストBのデータ伝送フレームに初めてホストA用のスイッチアップを介して接続されている間、第一放送、およびホストBマッチデータのMACアドレスが受信され、通信を完了するために、Aに戻りました。この場合、スイッチは、自己学習MACアドレスとポートとの対応関係を、次のフレームデータは、対応するMACアドレスをポートに直接送信することができるであろう。

そのスイッチはVLAN方法を分割することによって単離される、OpenStackのネットワークテナントは、このようにして単離することもあります。ネットワークは共有しない場合segmentation_idネットワーク属性は、それが唯一のテナント缶のアクセスで、VLAN_IDです。

スイッチは、VLAN10上を占めているようなポートスイッチAとして、占有後VLANポートである場合、Bの必要性は、第二のスイッチを使用するだけでなく、分割VLAN10のBに、次いで、A及びBは、接続ポートに接続されます設定したトランクポートは、データのうちトランクからこのポートは、同じVLANタグを受信するために、VLANタグ記号を追加します。

IP
レイヤ2ネットワークは、レイヤ3のIPアドレス指定、MACで対処しました。
IPは二つの部分、ネットワーク番号とホストidertifierで構成されています。ネットワークの2つのIP同じ場合はVLANのために、それは彼らが同じサブネットサブネット内にあることを意味し、彼らが直接通信することができます。
:ネットワーク番号の最初の24ビット、IPが192.168.1.2であると仮定し、ネットマスクは、として表すことができる
。1)255.255.255.0
2)192.168.1.2/24
とCIDRとして表さサブネット:192.168.1.0/24

異なるネットワークの通信、またはゲートウェイを介してルーティングニーズ。ホストは、ホストAは、そのルーティングテーブルを確認し、ホストBにパケットを送信すると仮定され、パケットは、(ルータである)適切なゲートウェイに送信し、ルータは、自身のルーティングテーブルを照会し、対応するデータがホストに送信されますBは行きます。

DHCPは
次のように動的に中性子DHCPエージェントのIPを通して分配OpenStackのDNSMASQのツールを使用して、DHCPプロトコルIPネットワークから取得し、処理を分配/var/log/daemon.logログから求めることができることにより、ホストです。

(「:00:27:B9:88:74、私はIPアドレスを必要とする私はMACアドレス08でクライアントだ」)1.クライアントが発見送信
2.サーバーを提示申し出を送信する(「OK午前8時: 27:B9:88:74、私は)IPアドレス10.10.0.112”を提供しています
サーバー10.10.0.131 3.クライアントが要求を(送信『I)は、』 IP 10.10.0.112を持ちたい
4。サーバーが送信します確認応答(「OK 08:00:27:B9:88:74、IP 10.10.0.112はあなたのものです」)

ARPは、
IPアドレスとMACアドレス変換プロトコルです。仮定ホストAがホストBにパケットを送信しますが、MACアドレスBを知らない、そしてAは、ネットワーク内のARP要求をブロードキャストし、次のように、プロセスは次のとおりです。

ホストAへ:皆(FF:FF:FF:FF:FF:FF)。私は、IPアドレス192.168.1.7を持つコンピュータを探しています。署名付き:MACアドレスFC:99:47:49:D4:A0。

ホストBへ:FC:99:47:49:D4:A0。私は、IPアドレス192.168.1.7を持っています。署名付き:MACアドレス54:78:1A:86:00:A5。

Aは、IP及びMAC-Bとの間のマッピングを記録しながら、AおよびBは、その後、床に通信することができます。
これは、ARP -nで表示することができます。


OpenStackの知識ネットワーク

技術トンネル
OpenStackのネットワーク実装はフラット、VLAN、GRE、VXLAN有する
フラットすなわち同じスイッチに接続されているすべてのデバイスが、互いに通信することができます:。
VLAN:フラット容易ブロードキャストストーム、導入VLANので、層分離されたネットワークを分割するVLAN。
VXLAN&GRE:のみ4094 VLANの数が限られ、のためには、パブリック・クラウドでは十分ではありません。GREの導入、VXLANので。
GREとVXLANは、三トンネル技術です。3層に再カプセル化されたパケットによって、UDPを介して送信するためのノードとの間にトンネルを作成します。

vSwitchのオープン
オープン仮想スイッチは、オープンソースの仮想スイッチの実装です。
OVS-vsctlショービュー橋

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#OVS-vsctl ショー
3916 f0fb-cc92- 428 F -bde4- 5 f83cc13205e
ブリッジBR-EX
ポート"BR-EX - BR-eth1の"
トランク:[ 0 ] インタフェース"BR-EX - BR-eth1の" タイプパッチ オプション:{ピア= "BR-eth1の- BR-EX" } ポートBR-EX インターフェース BR-EX タイプ:内部 ブリッジBR- INT fail_mode:セキュア ポートBR- INT インタフェース BR- INT タイプ:内部











ポートパッチ -tun インタフェースパッチ -tunのタイプパッチ オプション:{ピア= パッチ - INT }



図上記ブリッジは、BR-EXは、ネットワークと外部の物理的に接続され、BR-INTはブリッジにおけるポートBR-INTに接続されている等、DHCP、ルーティング統合ブリッジ、ビューのマクロポイント、仮想マシンです。

ネームスペースネットワーク
、ネットワーク名前空間は、Linuxカーネル、ネットワークの分離メカニズムによってサポートされている、ネットワークの唯一の同じ名前空間には、お互いを見ることができます。
これは、中性子実装メカニズムOpenStackの重要な方法です。

  1. このようlbaasなど、DHCP、ルータなどのネットワークリソースを、さまざまなを作成し、実際に自分の名前空間を作成しています。そして、それぞれの名前空間は、独自のネットワークインタフェースを持っています。
  2. その後、ブリッジを作成したオープンな仮想スイッチは、名前空間のブリッジでのネットワーク・インターフェース・リソースは、通信のために、接続されています。

一例として、ルーター、従来の外部ネットワークのサブネットA:172.16.0.0/24、ネットワークサブネットB:192.168.111.0/24、次の2つの通信ネットワークをしたい場合、ルータは、2つのネットワークを接続するために作成する必要があります。
次のように今、ネットワークトポロジは次のとおりです。
ネットワークトポロジ

ネットワークが作成されると、既存の名前空間を表示します。

1 
2
#ip netns list
qrouter-f4b08cfc-52fd-4515-bc75-73ae5bb5b440

创建router实际上是创建了qrouter+networkId的一个namespace,然后再看这个namespace的网络接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ip netns exec qrouter-f4b08cfc-52fd-4515-bc75-73ae5bb5b440 ip a
16: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
17: qg-f16db07c-77: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether fa:16:3e:26:3f:c4 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.130/24 brd 172.16.0.255 scope global qg-f16db07c-77
inet6 fe80::f816:3eff:fe26:3fc4/64 scope link
valid_lft forever preferred_lft forever
18: qr-675b6149-87: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
link/ether fa:16:3e:b2:89:91 brd ff:ff:ff:ff:ff:ff
inet 192.168.111.1/24 brd 192.168.111.255 scope global qr-675b6149-87
inet6 fe80::f816:3eff:feb2:8991/64 scope link
valid_lft forever preferred_lft forever

这个router的namespace中有qg-f16db07c-77和qr-675b6149-87两个接口。然后再看下ovs网桥的信息。

大专栏   Openstack neutron学习ss="highlight sql">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ovs-vsctl show
3916f0fb-cc92-428f-bde4-5f83cc13205e
Bridge br-ex
Port "qg-f16db07c-77"
Interface "qg-f16db07c-77"
type: internal
Port "br-ex--br-eth1"
trunks: [0]
Interface "br-ex--br-eth1"
type: patch
options: {peer="br-eth1--br-ex"}
Port br-ex
Interface br-ex
type: internal
Bridge br-int
fail_mode: secure
Port "qr-675b6149-87"
tag: 1
Interface "qr-675b6149-87"
type: internal
Port "tap10a26320-68"
tag: 1
Interface "tap10a26320-68"
type: internal
Port br-int
Interface br-int
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}

可以看到,qg-f16db07c-77接口接在br-ex网桥上,qr-675b6149-87接口接在br-int网桥上,所以通过这个router,把集成网桥和外网网桥连了起来。那么这个subnet就可以和外网通信了,和拓扑图的效果一样。

其中,这个subnet和外网通信的话,还涉及到NAT,查看这个router的iptables,其中有一条SNAT。

1
2
#ip netns exec qrouter-f4b08cfc-52fd-4515-bc75-73ae5bb5b440 iptables -t nat -S
-A neutron-l3-agent-snat -s 192.168.111.0/24 -j SNAT --to-source 172.16.0.130

所以通过这个router,source是192.168.111.0/24这个subnet的话,会改成router的gateway的ip。并且router会记录修改的信息,这样从外网回来的数据包就能正确找到地址,先到router,再由router到source。


openstack neutron框架

下图是compute节点的网络框架图,网络类型是vlan类型。
コンピューティングネットワーク

我们换成下面这个简单点,容易理解的图来思考下过程。
コンピューティングネットワーク2

1、 首先我们在openstack中创建个虚机,然后找到虚拟机的定义文件,查看bridge部分。

1
2
3
4
5
6
7
8
#cat /var/lib/nova/instances/71ee2b62-8585-4a22-943d-55497bf37df9/libvirt.xml
< type="bridge">
<mac address="fa:16:3e:04:37:b0"/>
<model type="virtio"/>
<driver name="qemu"/>
<source bridge="qbre90692e9-74"/>
<target dev="tape90692e9-74"/>
</>

可以看到虚拟通过 ‘tape90692e9-74’ 接口连接到了 ‘qbre90692e9-74’ 这个网桥上。
对应上图,qbre90692e9-74这个网桥对应图中的Linux Bridge,而Port tap也和虚机的网卡连接起来。这样就走通了instance和linux bridge的这条路。

2、 然后在compute节点上查看linux bridge。

1
2
3
4
#brctl show
bridge name bridge id STP enabled interfaces
qbre90692e9-74 8000.8a78413589c7 no qvbe90692e9-74
tape90692e9-74

发现之前的这个网桥有2个接口,除了和虚机相连的tap接口外,还有个qvb接口。

3、 然后在compute节点上查看open vswitch网桥。

1
2
3
4
5
6
7
8
9
10
11
12
13
#ovs-vsctl show
Bridge br-int
fail_mode: secure
Port "qvoe90692e9-74"
tag: 7
Interface "qvoe90692e9-74"
Port br-int
Interface br-int
type: internal
Port patch-tun
Interface patch-tun
type: patch
options: {peer=patch-int}

br-int网桥中有个qvo接口,可以看到这个qvo和linux bridge中的qvb接口的后缀是一样的,因为它们是一对veth,它们是连通的。这样的话,linux bridge和br-int也相连了。
所以上图中的Port qvb和Port qvo这条路也走通了。

図4は、ネットワークは、次に、VLAN単語である場合、OVSブリッジはBR-INT上図のBR-EXを参照し、物理スイッチに接続された再次いでブリッジVETH、BR-EXとのペアによって接続されます。
私のテストネットワークはGREですので、私のブリッジBR-INTとBR-TUNが接続され、マップはありません。

LinuxのブリッジOVSブリッジVMのBR-INTとスペーサーの前に、仮想マシンが直接接続BR-INTをしない、、、これは必要が機能をiptablesのためです。オープン仮想スイッチタップデバイスとが直接仮想マシンによって接続された場合、その後、デバイスは、タップにはiptablesを行うことができません。Linuxはそれを埋めるiptablesのLinuxのブリッジによって達成され、中央にレイヤーを追加する必要があります。

中性子は本当に非常にいくつかのことを理解することは困難、複雑な感じ。私は唯一の中性子が下に少し毛皮を学ぶ記録することができます。


リファレンスアドレス

OpenStackの文档
openstack_understand_neutron

おすすめ

転載: www.cnblogs.com/lijianming180/p/12326831.html