赵占旭的博客

OVN Northbound DB

Northbound DB主要是CMS(我们这里是指Openstack Neutron)配置的,然后由ovn-northd进行翻译。

拓扑


拓扑图

以下的叙述都是以下图的拓扑为准:

avatar

OVN配置命令

Host1作为控制节点配置如下:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//创建逻辑路由
ovn-nbctl lr-add lr1
//给逻辑路由创建两个端口,分别连接两个逻辑交换,设置IP和MAC
ovn-nbctl lrp-add lr1 lr1-ls1 52:54:00:c1:68:50 192.168.1.1/24
ovn-nbctl lrp-add lr1 lr1-ls2 52:54:00:c1:68:60 192.168.2.1/24

//创建逻辑交换1
ovn-nbctl ls-add ls1

//给逻辑交换1创建连接路由的端口
ovn-nbctl lsp-add ls1 ls1-lr1
//设置端口类型
ovn-nbctl lsp-set-type ls1-lr1 router
//设置端口的MAC地址,需要和逻辑路由需要连接的MAC一致
ovn-nbctl lsp-set-addresses ls1-lr1 52:54:00:c1:68:50
//设置端口需要直连的对端端口
ovn-nbctl lsp-set-options ls1-lr1 router-port=lr1-ls1

//给逻辑交换1创建连接VM1的端口
ovn-nbctl lsp-add ls1 ls1-vm1
//配置MAC,需要和VM1的vhostuser端口的MAC一致
ovn-nbctl lsp-set-addresses ls1-vm1 52:54:00:c1:68:70
ovn-nbctl lsp-set-port-security ls1-vm1 52:54:00:c1:68:70

//同上
ovn-nbctl lsp-add ls1 ls1-vm2
ovn-nbctl lsp-set-addresses ls1-vm2 52:54:00:c1:68:72
ovn-nbctl lsp-set-port-security ls1-vm2 52:54:00:c1:68:72

//同上
ovn-nbctl ls-add ls2

ovn-nbctl lsp-add ls2 ls2-lr1
ovn-nbctl lsp-set-type ls2-lr1 router
ovn-nbctl lsp-set-addresses ls2-lr1 52:54:00:c1:68:60
ovn-nbctl lsp-set-options ls2-lr1 router-port=lr1-ls2

ovn-nbctl lsp-add ls2 ls2-vm3
ovn-nbctl lsp-set-addresses ls2-vm3 52:54:00:c1:68:71
ovn-nbctl lsp-set-port-security ls2-vm3 52:54:00:c1:68:71

ovn-nbctl lsp-add ls2 ls2-vm4
ovn-nbctl lsp-set-addresses ls2-vm4 52:54:00:c1:68:73
ovn-nbctl lsp-set-port-security ls2-vm4 52:54:00:c1:68:73

//添加ACL信息,出口到vm1的ip报文全部丢弃
ovn-nbctl acl-add ls1 to-lport 998 'outport == "ls1-vm1" && ip' drop

//ovs需要设置两个VM直连逻辑交换的端口,Host2也需要设置这个,下面不写了
ovs-vsctl set Interface vhostuser0 external_ids:iface-id=ls1-vm1
ovs-vsctl set Interface vhostuser1 external_ids:iface-id=ls2-vm3

Northbound DB


内容展示

Northbound DB存在与控制节点,主要存储我们上面看到的一些拓扑信息(可以查看文件ovn-nb.ovsschema,或者ovn-nb.5.txt里面包含了所有的信息),配合我们进行配置的命令基本就可以了解,现在会详细列举一下,并且对照上面命令进行一些说明:

  • NB_Global主要存储一些全局信息。
  • Logical Switch主要有两大类,一类是全虚拟化的overlay logical switch,一类是提供简单连接的物理网络,bridged logical switches。
    • switch name,这里面我们配置的名字不必唯一,但是UUID必须是唯一的,不过这个不需要我们配置。
    • ports是指连接Switch的端口
    • LB是指负载均衡虚拟的IP地址到一系列逻辑端口的IP地址
    • ACLS、QoS等信息
    • other_config配置子网IP、external_ids。
  • Logical Switch Port
    • name、type。type不写的话默认是VM interface,还支持router、localnet、l2gateway、vtep。
    • options支持一下几种类型:
      • router ports 连接到logical router
        • options: router-port 被Logical Switch Port连接的端口
        • options: nat-address没懂,后期再看
      • localnet ports 连接到ovn-controller实例的,用来模拟连接网络的模型
        • options: network_name指定连接到本地的哪个端口
      • l2gateway ports 连接到物理网络
        • options: network_name
        • options: l2gateway-chassis
      • vtep ports 通过vtep网关连接到logical switch
        • options: vtep-physical-switch
        • options: vtep-logical-switch
      • VMI options以下主要是配置ingress的QoS
        • options: qos_max_rate 最大的速率限制,bit/s
        • options: qos_burst 流量的burst size,bits
    • 容器
      • parent_name
      • tag_request,0-4095
      • tag,0-4095
    • 端口状态
      • Up,由ovn-northd操作,当一个logical port绑定到OVN sbdb的绑定表里,则设置为真,等待VM启动之后,CMS才将他设置为活跃的。
      • enable,默认enable,disable的时候所有的流量全丢
    • Addressing
      • adresses 设置mac和IP地址
        • unkown
        • dynamic 可以使ovn-northd生成一个全球唯一的MAC地址。并且在logical ports的子网中选择一个未使用的IP,所以需要通过other_config:subnet设置子网。
        • L2地址后跟dynamic关键字 和上面不同的是MAC不生成,IP地址生成。
        • router 表明该地址由连接到的Logical Router来分配。
      • dynamic_addresses ovn-northd生成的地址,没明白和上面有啥区别。
      • port_security 指定的MAC或者IP的报文可以通过,不写表示全部可以
    • Common
      • dhcpv4_options ovn-controller会回复DHCP的报文。
      • dhcpv6_options
      • external_ids
  • Address Set 设置地址集,可以用ACL之类的操作,ovn-nbctl create Address_Set name=set1 addresses='10.0.0.1 10.0.0.2 10.0.0.3'
    • name 表内唯一
    • addresses 地址,可以使用掩码
    • external_ids
  • Load Balancer
    • name
    • vips
    • protocol
    • external_ids
  • ACL和QoS前面差不多,除了action
    • priority 0-32767 数字越小,优先级越高
    • direction for-lport和to-lport
    • match 和sbdb的logical flow的match一致
    • action ACL是allow,allow-rated,drop,reject.QoS是设置dscp,0-63.
    • log
    • external_ids
  • Logical Router
    • name 这里面我们配置的名字不必唯一,但是UUID必须是唯一的,不过这个不需要我们配置。
    • ports Logical Router Port的设置
    • static_routers Logical Router Static Routes的设置
    • enable
    • nat 只是工作在Gateway routers
    • load_balancer
    • options
      • options: chassis: 这里几个意思???
      • options: dnat_force_snat_ip:
      • options: lb_force_snat_ip:
    • external_ids
  • Logical Router Port
    • name
    • networks 设置网关IP
    • mac 设置MAC地址
    • enabled
    • options: redirect-chassis
    • Attachment
    • external_ids
  • Logical Router Static Routes 记录静态路由,当多个路由匹配的时候,选择最长前缀匹配,dst-ip优先级高于src-ip
    • ip_prefix 192.168.10.0/24
    • policy src-ip或者dst-ip
    • nethop Nexthop IP
    • output_port 可选的,指定Logical Router Port
  • NAT
    • type
      • dnat是将目的IP匹配external_ip的报文DNAT为logical_ip
      • snat是将源IP为logical_ip的报文SNAT为external_ip
      • dnat_and_snat将目的IP为external_ip的报文DNAT为logical_ip,将源IP匹配logical_ip的报文SNAT为external_ip
    • external_ip
    • external_mac
    • logical_ip
    • logical_port
  • DHCP_Options
    • cidr
    • DHCPv4 options:
      • 强制选项,必须存在
        • server_id DHCP server使用的IP地址
        • server_mac DHCP server使用的MAC
        • router 客户端使用的网关地址
        • lease_time 租期,0-4294967295s
      • IPv4 DHCP 选项:(部分)
        • netmask 客户端的子网
        • dns_server 比如114.114.114.114
        • classless_static_route 该选项包含一个或者多个静态路由。{30.0.0.0/24, 10.0.0.0.10, 0.0.0.0/0, 10.0.0.1}
        • ms_classless_static_route 微软提供的clients,类似于上面
      • Boolean DHCP 选项:
        • ip_forward_enable
        • router_discovery
        • ethernet_encap
      • Integer DHCP选项:
        • default_ttl 0-255
        • tcp_ttl 0-255
        • mtu 68-65535
    • DHCPv6 options:
    • external_ids
  • Connection 配置数据库连接到ovsdb客户端
  • SSL

逻辑信息展示

ovn-nbctl show可以查看几项信息

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
32
//Logical Router lr1 and UUID
router 8c101825-3b94-4911-9c54-7e2f8630c92a (lr1)
//直连Logical Switch ls1的端口,MAC和网关IP
port lr1-ls1
mac: "52:54:00:c1:68:50"
networks: ["192.168.1.1/24"]
//直连Logical Switch ls2的端口,MAC和网关IP
port lr1-ls2
mac: "52:54:00:c1:68:60"
networks: ["192.168.2.1/24"]
//Logical Switch ls1 and UUID
switch 2940470a-4f7e-449c-bd55-4c38b69abcc9 (ls1)
//直连Logical Router lr1的端口,MAC地址必须一致
port ls1-lr1
addresses: ["52:54:00:c1:68:50"]
//直连vm1的端口,后面的IP表示DHCP的时候分配给他的IP
port ls1-vm1
addresses: ["52:54:00:c1:68:70 192.168.1.91"]
//直连vm2的端口,后面的IP表示DHCP的时候分配给他的IP
port ls1-vm2
addresses: ["52:54:00:c1:68:72 192.168.1.92"]
//Logical Switch ls2
switch 7ed7c403-3592-48fc-9533-e1674c29cf38 (ls2)
//直连Logical Router lr1的端口,MAC地址必须一致
port ls2-lr1
addresses: ["52:54:00:c1:68:60"]
//直连vm3的端口
port ls2-vm3
addresses: ["52:54:00:c1:68:71"]
//直连vm4的端口
port ls2-vm4
addresses: ["52:54:00:c1:68:73"]

ACL信息展示

1
2
3
ovn-nbctl acl-list ls1

to-lport 998 (outport == "ls1-vm1" && ip) drop

DHCP信息展示

1
2
3
4
5
ovn-nbctl dhcp-options-list

a5612476-bc78-4c7e-811e-9d5bc0a74aff
0e783184-a29d-40f0-833b-2e02666f1fb5
9c7362ed-57cc-4304-af30-a5f4b88ec364
1
2
3
4
5
6
ovn-nbctl dhcp-options-get-options a5612476-bc78-4c7e-811e-9d5bc0a74aff

server_mac=52:54:00:c1:68:50
router=192.168.1.1
server_id=192.168.1.1
lease_time=3600

其他

NAT和LB信息展示后期再看

注意:所有文章非特别说明皆为原创。为保证信息与源同步,转载时请务必注明文章出处!谢谢合作 :-)

原始链接:http://zhaozhanxu.com/2017/02/22/SDN/OVN/2017-02-22-ovn-nbdb/

许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。