Openstack私有云簡介之Neutron模塊

一、openstack網絡概述

  • openstack網絡服務提供一個API讓用戶在雲中建立和定義網絡連接。該網絡服務的項目名稱是neutron。
  • openstack所在的整個物理網絡都會由neutron“池化”爲網絡資源池,neutron對這些網絡資源進行處理,爲項目(租戶)提供獨立的虛擬化環境。neutron創建各種資源對象並進行連接和整合。從而形成項目(租戶)的私有網絡。

二、網絡基本概念

1、網絡

  • 類似於實際的物理環境中的網絡,OpenStack網絡用於連接雲主機或路由器。除此之外,還包含子網、網關以及DHCP服務等。OpenStack網絡分爲內部網絡和外部網絡,內部網絡一般用於連接虛擬機,而外部網絡一般用於連接宿主機外面的網絡。

2、子網

  • OpenStack中的子網是一個IP地址段,用於定義實際的IP地址範圍

3、端口

  • 端口類似於實際網絡中的網絡接口,用於連接終端設備或另外一個網絡。不同的是,OpenStack中端口連接的一般都是虛擬設備接口,如虛擬機的虛擬網卡或者路由器的虛擬接口等。端口還描述了相關的網絡配置,例如可以在端口上配置MAC地址和IP地址。

4、路由器

  • 路由器用於連接 OpenStack的內部網絡和外部網絡。類似實際路由器功能,支NAT功能,通過綁定浮動IP地址還可以實現地址映射
  • Neutron分別提供了二層(L2)交換和三層(L3)路由抽象的功能,對應於物理網絡環境中的交換機和路由器

三、網絡模型

Neutron兩種網絡類型:

1、租戶網絡,內部網絡,用於連接虛擬機

2、供應商網絡,內部網絡,用於連接虛擬機

Neutron 支持多種類型的 network,包括 local, flat, VLAN, VxLAN 和 GRE

local

  • 所有組件裝在一臺機器上,多用於測試環境

flat

  • 沒有路由,沒有隔離

vlan

  • 具有802.1q tagging的網絡,頭部12字節,有隔離,支持租戶數量4k

vxlan

  • 隧道技術,有隔離,vxlan 中數據包會通過 VNI 封裝成 UDP 包進行傳輸,租戶內部通信可以跨越任意網絡,頭部封裝24字節,可用租戶數量多

gre

  • gre 是與 vxlan 類似的一種 overlay 網絡。主要區別在於使用 IP 包而非 UDP 進行封裝

四、neutron基本架構

在這裏插入圖片描述
流程簡介:
1、neutron運行在控制節點上,對外提供api接口(core和Extension)
2、當收到請求後會通過消息隊列把請求交給插件neuron-plugin處理
3、插件會把請求的信息存儲在數據庫中,並通過消息隊列通知各個節點上的代理
4、代理根據需求開始工作

五、neutron主要組件

Neutron-Server

  • 對外提供 OpenStack 網絡 API,接收請求,並調用 Plugin 處理請求。

Plugin

  • 處理 Neutron Server 發來的請求,維護 OpenStack 邏輯網絡狀態, 並調用 Agent 處理請求。

Agent

  • 處理 Plugin 的請求,負責在 network provider 上真正實現各種網絡功能。

network-provider

  • 提供網絡服務的虛擬或物理網絡設備,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交換機。

Database

  • 存放 OpenStack 的網絡狀態信息,包括 Network, Subnet, Port, Router 等。

六、組件詳解

Neutron-server

neutron-server提供一組API來定義網絡連接和IP地址,供Nova等客戶端調用,它本身也是分層設計,其結構如下
在這裏插入圖片描述
Neutron-server包括4個層次,自上而下依次說明:

  1. ResetfulAPI:屬於最前端的API,包括CoreAPI和ExtensionAPI兩種類型
    (1)CoreAPI(核心api):提供網絡,子網,端口的API
    (2)ExetnsionAPI(擴展api):提供路由,負載均衡,fw,安全組的API

  2. Commnon Server:處理認證和校驗 API 請求。

  3. Neutron Core:Neutron server 的核心處理程序,通過調用相應的 Plugin 處理請求。

  4. Core Plugin API:定義了 Core Plgin 的抽象功能集合,Neutron Core 通過該 API 調用相應的Core Plgin;

  5. Extension Plugin API:定義了 Service Plgin 的抽象功能集合,Neutron Core 通過該 API調用相應的 Service Plugin;

Plugin

插件是neutron的一種api的後端實現,目的是增強擴展性。插件按照功能可分爲core plugin和service plugin兩種

(1)Core-plugin:Neutron中即爲ML2,負責管理L2的網絡連接,優點:在不同節點實現不同網絡機制,只需要開發機制驅動,實現了網絡子網和端口核心資源的同時,也實現了端口綁定,安全組等擴展資源

類型驅動:對應網絡類型,flat local vlan vxlan gre

機制驅動:獲取類型驅動維護網絡的狀態,確保在相應的網絡設備上實現這現狀態,目前基於代理的網絡機制有2種,Linux bridge和Opens vSwitch

(2)Service Plugin:包括l3 router、firewall、loadbalancer、VPN、實現L3-L7的網絡服務

Agent

Neuron-agent:處理plugin請求,負責在 network provider 上真正實現各種網絡功能。和 plugin 是一一對應的關係

基於ML2插件網絡機制的代理:

Linux bridge代理:二層網絡虛擬化技術,支持local、vlan、vxlan、flat不支持GRE,虛擬機之間沒有隔離。

如果選擇linux bridge代理,如圖所示:
在這裏插入圖片描述
計算節點上的數據需要到物理網卡需要經過:

  1. tap接口
  2. linux網橋:作爲二層交換機
  3. vlan接口:用於連接linux網橋
  4. vxlan接口
  5. 物理網絡接口:用於連接到物理網絡

Opens vSwitch代理:支持local、flat、vlan、vxlan、gre等所有網絡模型
如果選擇linux bridge代理,如圖所示:
在這裏插入圖片描述
如果選擇ovs代理,計算節點上的數據需要到物理網卡需要經過:

  1. tap接口
  2. linux網橋
  3. veth對:用來連接2個虛擬網橋
  4. ovs網橋:ovs的核心設備,包括一個ovs集成網橋和ovs物理連接網橋
  5. 集成網橋(int-br):所有計算節點上運行的虛擬機都鏈接到集成網橋,neutron通過配置集成網橋上的端口實現虛擬機網絡隔離。
  6. 物理網橋:鏈接物理網卡,在flat和vlan中使用provider
    bridge,命名爲br-ethx,在vxlan中使用ovs隧道網橋,命名爲br-tun

基於Service Plugin插件的代理:

dhcp代理:虛擬機需要獲取ip地址

主要組件:

1、DHCP代理(neutron-dhcp-agent),提供dhcp功能,提供元數據請求,提供2個接口,報告dhcp代理的網絡狀態,啓動dnsmasq進程,檢測DHCPdiscover請求

2、DHcp驅動:管理dhcp服務器,默認爲DNSmasq,提供dns和dhcp,一個dnsmasq進程,能爲同一網段中所有啓動dhcp的子網服務

3、dhcp調度器:負責dhcp代理和網絡(network)的調度

如圖所示:在這裏插入圖片描述
dhcp代理工作流程:

創建實例時,此實例的mac地址和ip會存在dnsmasq的hosts文件中

實例發出dhcpdiscover請求,dnsmasq檢測到後會檢查hosts文件,把對應項通過dhcpoffer消息將ip和網關給實例

實例發出dhcprequest

dnsmasq回覆dhcpack

L3代理

每個L3代理運行在一個網絡空間中,提供虛擬路由器,也支持物理路由通過iptables提供地址轉換(snat,dnat)、浮動路由(floating)安全組(securitygroup)使不同網絡的實例通信

dnat:目的地址轉換 外到內
snat :內到外

浮動ip :靜態映射,一對一,配在路由器提供網關的外網接口上。不再實例上。寫在名稱空間中的iptables中

neutron-l3-aget-float-snat比neutron-l3-agent-snat更早執行

網絡名稱空間

簡介:

內核級別隔離網絡的一種方法
Linux network namespace 可以將一個物理三層網絡分割成
幾個獨立的虛擬三層網絡,用能夠實現dhcp隔離:可以同一網段重複使用

命令:
ip netns add---------創建網絡名稱空間
ip netns list -------查看所有的網絡名稱空間
ip netns exec +名稱 ----進入指定的網絡名稱空間
ip netns exec netns0 ip address add 10.0.0.1/24 eth0—爲netns0空間的eth0網卡添加ip地址

不同網絡名稱空間之間通信:用VETH對
命令:
ip link add veth1 type veth peername veth2 --------創建VETH對
ip link set veth1 netns netns1 -------將veth1放到netns1中
ip link set veth2 netns netns2 --------將veth2放到netns2中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章