cloudstack GuestNetwork Ingress-Egress rule



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、guestnetwork add egress firewall rule in agent


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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值