Egress
1 创建 egress 规则
(1)向management发出api命令:
createEgressFirewallRulecmd
的create()方法
最终在cloud数据库firewall_rules表中插一条state:Add,purpose: Firewall,traffic_type: Egress的记录。
execute()方法
management --> agent
SetFirewallRulesCommand
agent-->LibvirtComputingResource-->VirtualRoutingResource
firewall_egress.sh
DEFAULT_EXECUTEINVR_TIMEOUT = 120;//VR执行脚本超时时间120秒
2种操作类型:ScriptConfigItem,FileConfigItem
设置firewall_egress属于 ScriptConfigItem。
scripts/network/domr/router_proxy.sh
(2) 在agent上启动unix进程执行router_proxy.sh firewall_egress.sh routeIp ruleargs
router_proxy.sh检测 routeIp的VR是否ping通,并使用ssh登录到 routeIp去执行
/opt/cloud/bin/firewall_egress.sh ruleargs
图1、guestnetwork add egress firewall rule in mgt
2 删除egress规则
api命令:DeleteEgressFirewallRuleCmd
DeleteEgressFirewallRuleCmd extends BaseAsyncCmd
因此,在management中通过api调度模块执行DeleteEgressFirewallRuleCmd的execute()方法。
由management发往agent端的command与添加egress规则一样SetFirewallRulesCommand,只是VR上执行的 ScriptConfigItem的ruleargs变动了。
图3、guestnetwork del egress firewall rule in mgt
Ingress
3 创建Ingress firewall规则
(1) 发往management的api命令为CreateFirewallRuleCmd
CreateFirewallRuleCmd extends BaseAsyncCreateCmd
因此,在management中通过api调度模块执行CreateFirewallRuleCmd的create()和execute()方法。
(2) 在create方法执行中向cloud数据库fire_wall表插入一条traffic_type为Ingress,purpose为Firewall的防火墙规则。
(3)在execute方法执行过程中,生成SetFirewallRulesCommand发送到VR所在的hostId(与Egress firewall rule一样)。
(4)在agent上启动unix进程执行router_proxy.sh firewall_egress.sh routeIp ruleargs。
4 删除Ingress firewall规则
(1) 发往management的api命令为DeleteFirewallRuleCmd
DeleteFirewallRuleCmd extends BaseAsyncCmd
因此,在management中通过api调度模块执行DeleteFirewallRuleCmd的execute()方法。
(2) 在execute方法执行过程中,生成SetFirewallRulesCommand发送到VR所在的hostId(与Egress firewall rule一样)。
(3) 在agent上启动unix进程执行router_proxy.sh firewall_egress.sh routeIp ruleargs。
5 添加VM的LoadBalancerRule
(1) 发往management的api命令为AssignToLoadBalancerRuleCmd
AssignToLoadBalancerRuleCmd extends BaseAsyncCmd
因此,在management中通过api调度模块执行AssignToLoadBalancerRuleCmd的execute()方法。
(2) 在execute方法执行过程中,生成LoadBalancerConfigCommand发送到VR所在的hostId。
(3) agent端处理该command通过修改VR上的haproxy的配置文件/etc/haproxy/haproxy.cfg来实现的。
图4、Ingress add loadbalancer
6 删除VM的LoadBalancerRule
(1) 发往management的api命令为RemoveFromLoadBalancerRuleCmd
RemoveFromLoadBalancerRuleCmd extends BaseAsyncCmd
因此,在management中通过api调度模块执行RemoveFromLoadBalancerRuleCmd的execute()方法。
(2) 在execute方法执行过程中,生成LoadBalancerConfigCommand发送到VR所在的hostId。
(3) agent端处理该command通过修改VR上的haproxy的配置文件/etc/haproxy/haproxy.cfg来实现的。
图5、ingress del loadbalancer
7 更新VM的loadBalancerRule
(1) 发往management的api命令为UpdateLoadBalancerRuleCmd
UpdateLoadBalancerRuleCmd extends BaseAsyncCustomIdCmd
因此,在management中通过api调度模块执行UpdateLoadBalancerRuleCmd的execute()方法。
(2) 在execute方法执行过程中,如果涉及到algorithm的修改,则会生成LoadBalancerConfigCommand发送到VR所在的hostId,name的修改只会更新数据库。
(3) agent端处理该command通过修改VR上的haproxy的配置文件/etc/haproxy/haproxy.cfg来实现的。
8 创建VM的PortForward规则
(1) 发往management的api命令为CreatePortForwardingRuleCmd
CreatePortForwardingRuleCmd extends BaseAsyncCreateCmd
因此,在management中通过api调度模块执行CreatePortForwardingRuleCmd的create()和execute()方法。
(2) 在create方法执行中向cloud数据库port_forwarding_rules表插入一条记录。
(3)在execute方法执行过程中,生成SetPortForwardingRulesCommand发送到VR所在的hostId(与Egress firewall rule,Igress firewall 走同样的执行路径)。
(4)在agent上启动unix进程执行router_proxy.sh firewall_nat.sh routeIp ruleargs。
9 删除VM的PortForward规则
(1) 发往management的api命令为DeletePortForwardingRuleCmd
DeletePortForwardingRuleCmd extends BaseAsyncCmd
因此,在management中通过api调度模块执行DeletePortForwardingRuleCmd的execute()方法。
(2) 在execute方法执行过程中,生成SetPortForwardingRulesCommand发送到VR所在的hostId。
(3) 在agent上启动unix进程执行router_proxy.sh firewall_nat.sh routeIp ruleargs。