Skip to content

Commit

Permalink
refactor: extract external routes from eip func, make it the same as … (
Browse files Browse the repository at this point in the history
#1671)

* refactor: extract external routes from eip func, make it the same as vpc subnet route

* remove not used const func Name
  • Loading branch information
bobz965 committed Jul 8, 2022
1 parent 62ddfda commit 86ecfd2
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 16 deletions.
39 changes: 37 additions & 2 deletions dist/images/vpcnatgateway/nat-gateway.sh
Expand Up @@ -70,6 +70,35 @@ function del_vpc_internal_route() {
done
}

function add_vpc_external_route() {
# make sure inited
iptables-save -t nat | grep SNAT_FILTER | grep SHARED_SNAT
for rule in $@
do
arr=(${rule//,/ })
cidr=${arr[0]}
nextHop=${arr[1]}

exec_cmd "ip route replace $cidr dev net1 table $ROUTE_TABLE"
sleep 1
exec_cmd "ip route replace default via $nextHop dev net1 table $ROUTE_TABLE"
done
}

function del_vpc_external_route() {
# make sure inited
iptables-save -t nat | grep SNAT_FILTER | grep SHARED_SNAT
for rule in $@
do
arr=(${rule//,/ })
cidr=${arr[0]}

exec_cmd "ip route del $cidr table $ROUTE_TABLE"
sleep 1
exec_cmd "ip route del default table $ROUTE_TABLE"
done
}

function add_eip() {
# make sure inited
iptables-save -t nat | grep SNAT_FILTER | grep SHARED_SNAT
Expand All @@ -83,8 +112,6 @@ function add_eip() {
gateway=${arr[1]}

exec_cmd "ip addr replace $eip dev net1"
exec_cmd "ip route replace $eip_network/$eip_prefix dev net1 table $ROUTE_TABLE"
exec_cmd "ip route replace default via $gateway dev net1 table $ROUTE_TABLE"
ip link set dev net1 arp on
exec_cmd "arping -c 3 -s $eip_without_prefix $gateway"
done
Expand Down Expand Up @@ -218,6 +245,14 @@ case $opt in
echo "subnet-route-del $rules"
del_vpc_internal_route $rules
;;
ext-subnet-route-add)
echo "ext-subnet-route-add $rules"
add_vpc_external_route $rules
;;
ext-subnet-route-del)
echo "ext-subnet-route-del $rules"
del_vpc_external_route $rules
;;
eip-add)
echo "eip-add $rules"
add_eip $rules
Expand Down
47 changes: 33 additions & 14 deletions pkg/controller/vpc_nat_gateway.go
Expand Up @@ -32,17 +32,18 @@ var (
)

const (
natGwInit = "init"
natGwEipAdd = "eip-add"
natGwEipDel = "eip-del"
natGwDnatAdd = "dnat-add"
natGwDnatDel = "dnat-del"
natGwSnatAdd = "snat-add"
natGwSnatDel = "snat-del"
natGwSubnetFipAdd = "floating-ip-add"
natGwSubnetFipDel = "floating-ip-del"
natGwSubnetRouteAdd = "subnet-route-add"
natGwSubnetRouteDel = "subnet-route-del"
natGwInit = "init"
natGwEipAdd = "eip-add"
natGwEipDel = "eip-del"
natGwDnatAdd = "dnat-add"
natGwDnatDel = "dnat-del"
natGwSnatAdd = "snat-add"
natGwSnatDel = "snat-del"
natGwSubnetFipAdd = "floating-ip-add"
natGwSubnetFipDel = "floating-ip-del"
natGwSubnetRouteAdd = "subnet-route-add"
natGwSubnetRouteDel = "subnet-route-del"
natGwExtSubnetRouteAdd = "ext-subnet-route-add"
)

func genNatGwStsName(name string) string {
Expand Down Expand Up @@ -532,6 +533,22 @@ func (c *Controller) handleUpdateNatGwSubnetRoute(natGwKey string) error {
return err
}
pod := oriPod.DeepCopy()
extSubnet, err := c.subnetsLister.Get(util.VpcExternalNet)
if err != nil {
klog.Errorf("failed to get ovn-vpc-external-network subnet, err: %v", err)
return err
}
var extRules []string
if extSubnet.Spec.CIDRBlock != "" && extSubnet.Spec.Gateway != "" {
extRules = append(extRules, fmt.Sprintf("%s,%s", extSubnet.Spec.CIDRBlock, extSubnet.Spec.Gateway))
if err = c.execNatGwRules(pod, natGwExtSubnetRouteAdd, extRules); err != nil {
klog.Errorf("failed to exec nat gateway rule, err: %v", err)
return err
}
} else {
err = fmt.Errorf("failed to get external subnet cidr and gw")
return err
}

gwSubnet, err := c.subnetsLister.Get(gw.Spec.Subnet)
if err != nil {
Expand Down Expand Up @@ -574,9 +591,11 @@ func (c *Controller) handleUpdateNatGwSubnetRoute(natGwKey string) error {
rules = append(rules, fmt.Sprintf("%s,%s", cidr, gwSubnet.Spec.Gateway))
}
}
if err = c.execNatGwRules(pod, natGwSubnetRouteAdd, rules); err != nil {
klog.Errorf("failed to exec nat gateway rule, err: %v", err)
return err
if len(rules) > 0 {
if err = c.execNatGwRules(pod, natGwSubnetRouteAdd, rules); err != nil {
klog.Errorf("failed to exec nat gateway rule, err: %v", err)
return err
}
}
}

Expand Down

0 comments on commit 86ecfd2

Please sign in to comment.