Skip to content

Commit

Permalink
update eip qos procees, replace qosLabelEIP with natLabelEip (#2736)
Browse files Browse the repository at this point in the history
  • Loading branch information
hongzhen-ma committed May 4, 2023
1 parent d1711ac commit bdd201b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 63 deletions.
99 changes: 42 additions & 57 deletions pkg/controller/vpc_nat_gw_eip.go
Expand Up @@ -263,16 +263,10 @@ func (c *Controller) handleAddIptablesEip(key string) error {
return nil
}

func (c *Controller) handleResetIptablesEip(key string) error {
eip, err := c.iptablesEipsLister.Get(key)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
}
return err
}
klog.V(3).Infof("handle reset eip %s", key)
func (c *Controller) checkEipBindNat(key string, eip *kubeovnv1.IptablesEIP) (bool, string, error) {
var notUse bool
var natName string

switch eip.Status.Nat {
case util.FipUsingEip:
notUse = true
Expand All @@ -283,12 +277,13 @@ func (c *Controller) handleResetIptablesEip(key string) error {
})
if err != nil {
klog.Errorf("failed to get dnats, %v", err)
return err
return notUse, natName, err
}
notUse = true
for _, item := range dnats.Items {
if item.Annotations[util.VpcEipAnnotation] == key {
notUse = false
natName = item.Name
break
}
}
Expand All @@ -299,21 +294,40 @@ func (c *Controller) handleResetIptablesEip(key string) error {
})
if err != nil {
klog.Errorf("failed to get snats, %v", err)
return err
return notUse, natName, err
}
notUse = true
for _, item := range snats.Items {
if item.Annotations[util.VpcEipAnnotation] == key {
notUse = false
natName = item.Name
break
}
}
default:
notUse = true
}
return notUse, natName, nil
}

func (c *Controller) handleResetIptablesEip(key string) error {
klog.V(3).Infof("handle reset eip %s", key)
eip, err := c.iptablesEipsLister.Get(key)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
}
return err
}

notUse, _, err := c.checkEipBindNat(key, eip)
if err != nil {
klog.Errorf("failed to check nats bound to eip, %v", err)
return err
}

if notUse {
if err := c.natLabelEip(key, ""); err != nil {
if err := c.natLabelEip(key, "", eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to clean label for eip %s, %v", key, err)
return err
}
Expand Down Expand Up @@ -391,7 +405,13 @@ func (c *Controller) handleUpdateIptablesEip(key string) error {
}
}

if err = c.qosLabelEIP(key, cachedEip.Spec.QoSPolicy); err != nil {
_, natName, err := c.checkEipBindNat(key, cachedEip)
if err != nil {
klog.Errorf("failed to check nats bound to eip, %v", err)
return err
}

if err = c.natLabelEip(key, natName, cachedEip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label qos in eip, %v", err)
return err
}
Expand Down Expand Up @@ -734,7 +754,7 @@ func (c *Controller) createOrUpdateCrdEip(key, v4ip, v6ip, mac, natGwDp, qos, ex
return err
}
}
var needUpdateLabel, needUpdateAnno bool
var needUpdateLabel bool
var op string
if len(eip.Labels) == 0 {
op = "add"
Expand All @@ -751,21 +771,14 @@ func (c *Controller) createOrUpdateCrdEip(key, v4ip, v6ip, mac, natGwDp, qos, ex
}
if eip.Spec.QoSPolicy != "" && eip.Labels[util.QoSLabel] != eip.Spec.QoSPolicy {
eip.Labels[util.QoSLabel] = eip.Spec.QoSPolicy
needUpdateLabel = true
}
if needUpdateLabel {
if err := c.updateIptableLabels(eip.Name, op, "eip", eip.Labels); err != nil {
return err
}
}
if needUpdateAnno {
if eip.Annotations == nil {
eip.Annotations = make(map[string]string)
}
eip.Annotations[util.VpcNatAnnotation] = ""
if err := c.updateIptableAnnotations(eip.Name, op, "eip", eip.Annotations); err != nil {
return err
}
}

if err = c.handleAddIptablesEipFinalizer(key); err != nil {
klog.Errorf("failed to handle add finalizer for eip, %v", err)
return err
Expand Down Expand Up @@ -974,15 +987,16 @@ func (c *Controller) patchResetEipStatusNat(key, nat string) error {
}
return nil
}
func (c *Controller) natLabelEip(eipName, natName string) error {
func (c *Controller) natLabelEip(eipName, natName, qosName string) error {
oriEip, err := c.iptablesEipsLister.Get(eipName)
externalNetwork := util.GetExternalNetwork(oriEip.Spec.ExternalSubnet)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
}
return err
}
externalNetwork := util.GetExternalNetwork(oriEip.Spec.ExternalSubnet)

eip := oriEip.DeepCopy()
var needUpdateLabel, needUpdateAnno bool
var op string
Expand All @@ -992,12 +1006,14 @@ func (c *Controller) natLabelEip(eipName, natName string) error {
eip.Labels = map[string]string{
util.SubnetNameLabel: externalNetwork,
util.VpcNatGatewayNameLabel: eip.Spec.NatGwDp,
util.QoSLabel: qosName,
}
} else if eip.Labels[util.VpcNatGatewayNameLabel] != eip.Spec.NatGwDp {
} else if eip.Labels[util.VpcNatGatewayNameLabel] != eip.Spec.NatGwDp || eip.Labels[util.QoSLabel] != qosName {
op = "replace"
needUpdateLabel = true
eip.Labels[util.SubnetNameLabel] = externalNetwork
eip.Labels[util.VpcNatGatewayNameLabel] = eip.Spec.NatGwDp
eip.Labels[util.QoSLabel] = qosName
}
if needUpdateLabel {
if err := c.updateIptableLabels(eip.Name, op, "eip", eip.Labels); err != nil {
Expand All @@ -1023,34 +1039,3 @@ func (c *Controller) natLabelEip(eipName, natName string) error {
}
return err
}

func (c *Controller) qosLabelEIP(eipName, qosName string) error {
oriEip, err := c.iptablesEipsLister.Get(eipName)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
}
return err
}
eip := oriEip.DeepCopy()
var needUpdateLabel bool
var op string
if len(eip.Labels) == 0 {
op = "add"
needUpdateLabel = true
eip.Labels = map[string]string{
util.QoSLabel: qosName,
}
} else if eip.Labels[util.QoSLabel] != qosName {
op = "replace"
needUpdateLabel = true
eip.Labels[util.QoSLabel] = qosName
}
if needUpdateLabel {
if err := c.updateIptableLabels(eip.Name, op, "eip", eip.Labels); err != nil {
return err
}
}

return err
}
12 changes: 6 additions & 6 deletions pkg/controller/vpc_nat_gw_nat.go
Expand Up @@ -548,7 +548,7 @@ func (c *Controller) handleAddIptablesFip(key string) error {
klog.Errorf("failed to update label for fip %s, %v", key, err)
return err
}
if err = c.natLabelEip(eipName, fip.Name); err != nil {
if err = c.natLabelEip(eipName, fip.Name, eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label fip '%s' in eip %s, %v", fip.Name, eipName, err)
return err
}
Expand Down Expand Up @@ -634,7 +634,7 @@ func (c *Controller) handleUpdateIptablesFip(key string) error {
klog.Errorf("failed to update label for fip %s, %v", key, err)
return err
}
if err = c.natLabelEip(eipName, cachedFip.Name); err != nil {
if err = c.natLabelEip(eipName, cachedFip.Name, eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label fip '%s' in eip %s, %v", cachedFip.Name, eipName, err)
return err
}
Expand Down Expand Up @@ -728,7 +728,7 @@ func (c *Controller) handleAddIptablesDnatRule(key string) error {
klog.Errorf("failed to patch label for dnat %s, %v", key, err)
return err
}
if err = c.natLabelEip(eipName, dnat.Name); err != nil {
if err = c.natLabelEip(eipName, dnat.Name, eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label dnat in eip, %v", err)
return err
}
Expand Down Expand Up @@ -817,7 +817,7 @@ func (c *Controller) handleUpdateIptablesDnatRule(key string) error {
klog.Errorf("failed to patch label for dnat %s, %v", key, err)
return err
}
if err = c.natLabelEip(eipName, cachedDnat.Name); err != nil {
if err = c.natLabelEip(eipName, cachedDnat.Name, eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label dnat '%s' in eip %s, %v", cachedDnat.Name, eipName, err)
return err
}
Expand Down Expand Up @@ -909,7 +909,7 @@ func (c *Controller) handleAddIptablesSnatRule(key string) error {
return err
}
// label too long cause error
if err = c.natLabelEip(eipName, snat.Name); err != nil {
if err = c.natLabelEip(eipName, snat.Name, eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label snat '%s' in eip %s, %v", snat.Name, eipName, err)
return err
}
Expand Down Expand Up @@ -998,7 +998,7 @@ func (c *Controller) handleUpdateIptablesSnatRule(key string) error {
return err
}
// label too long cause error
if err = c.natLabelEip(eipName, cachedSnat.Name); err != nil {
if err = c.natLabelEip(eipName, cachedSnat.Name, eip.Spec.QoSPolicy); err != nil {
klog.Errorf("failed to label snat in eip, %v", err)
return err
}
Expand Down

0 comments on commit bdd201b

Please sign in to comment.