Northbound DB主要是CMS(我们这里是指Openstack Neutron)配置的,然后由ovn-northd进行翻译。
拓扑
拓扑图
以下的叙述都是以下图的拓扑为准:
OVN配置命令
Host1作为控制节点配置如下:
//创建逻辑路由
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
可以查看几项信息
//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信息展示
ovn-nbctl acl-list ls1
to-lport 998 (outport == "ls1-vm1" && ip) drop
DHCP信息展示
ovn-nbctl dhcp-options-list
a5612476-bc78-4c7e-811e-9d5bc0a74aff
0e783184-a29d-40f0-833b-2e02666f1fb5
9c7362ed-57cc-4304-af30-a5f4b88ec364
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信息展示后期再看