Skip to content

Commit

Permalink
fix: non ovn subnet has no vpc, ip reserved
Browse files Browse the repository at this point in the history
Signed-off-by: bobz965 <zhangbingbing2_yewu@cmss.chinamobile.com>
  • Loading branch information
bobz965 committed Jan 31, 2024
1 parent 8504fca commit 2b19d8a
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 50 deletions.
43 changes: 23 additions & 20 deletions pkg/controller/ip.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,27 +240,29 @@ func (c *Controller) handleAddReservedIP(key string) error {
klog.Error(err)
return err
}
cachedIP, err := c.ipsLister.Get(key)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
if ip.Labels[util.IPReservedLabel] != "false" {
cachedIP, err := c.ipsLister.Get(key)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
}
return err
}
ip = cachedIP.DeepCopy()
ip.Labels[util.IPReservedLabel] = "true"
patchPayloadTemplate := `[{ "op": "%s", "path": "/metadata/labels", "value": %s }]`
raw, err := json.Marshal(ip.Labels)
if err != nil {
klog.Error(err)
return err
}
op := "replace"
patchPayload := fmt.Sprintf(patchPayloadTemplate, op, raw)
if _, err := c.config.KubeOvnClient.KubeovnV1().IPs().Patch(context.Background(), ip.Name,
types.JSONPatchType, []byte(patchPayload), metav1.PatchOptions{}); err != nil {
klog.Errorf("failed to patch label for ip %s, %v", ip.Name, err)
return err
}
return err
}
ip = cachedIP.DeepCopy()
ip.Labels[util.IPReservedLabel] = "true"
patchPayloadTemplate := `[{ "op": "%s", "path": "/metadata/labels", "value": %s }]`
raw, err := json.Marshal(ip.Labels)
if err != nil {
klog.Error(err)
return err
}
op := "replace"
patchPayload := fmt.Sprintf(patchPayloadTemplate, op, raw)
if _, err := c.config.KubeOvnClient.KubeovnV1().IPs().Patch(context.Background(), ip.Name,
types.JSONPatchType, []byte(patchPayload), metav1.PatchOptions{}); err != nil {
klog.Errorf("failed to patch label for ip %s, %v", ip.Name, err)
return err
}
return nil
}
Expand Down Expand Up @@ -471,6 +473,7 @@ func (c *Controller) createOrUpdateIPCR(ipCRName, podName, ip, mac, subnetName,
util.SubnetNameLabel: subnetName,
util.NodeNameLabel: nodeName,
subnetName: "",
util.IPReservedLabel: "false", // ip create with pod or node, ip not reserved
},
},
Spec: kubeovnv1.IPSpec{
Expand Down
23 changes: 11 additions & 12 deletions pkg/controller/pod.go
Original file line number Diff line number Diff line change
Expand Up @@ -1647,18 +1647,17 @@ func (c *Controller) acquireAddress(pod *v1.Pod, podNet *kubeovnNet) (string, st
return vip.Status.V4ip, vip.Status.V6ip, vip.Status.Mac, podNet.Subnet, nil
}

var macStr *string
var macPointer *string
if isOvnSubnet(podNet.Subnet) {
mac := pod.Annotations[fmt.Sprintf(util.MacAddressAnnotationTemplate, podNet.ProviderName)]
if mac != "" {
if _, err := net.ParseMAC(mac); err != nil {
annoMAC := pod.Annotations[fmt.Sprintf(util.MacAddressAnnotationTemplate, podNet.ProviderName)]
if annoMAC != "" {
if _, err := net.ParseMAC(annoMAC); err != nil {
return "", "", "", podNet.Subnet, err
}
macStr = &mac
macPointer = &annoMAC
}
} else {
macStr = new(string)
*macStr = ""
macPointer = nil
}

ippoolStr := pod.Annotations[fmt.Sprintf(util.IPPoolAnnotationTemplate, podNet.ProviderName)]
Expand All @@ -1680,7 +1679,7 @@ func (c *Controller) acquireAddress(pod *v1.Pod, podNet *kubeovnNet) (string, st
for {
portName := ovs.PodNameToPortName(podName, pod.Namespace, podNet.ProviderName)

ipv4, ipv6, mac, err := c.ipam.GetRandomAddress(key, portName, macStr, podNet.Subnet.Name, "", skippedAddrs, !podNet.AllowLiveMigration)
ipv4, ipv6, mac, err := c.ipam.GetRandomAddress(key, portName, macPointer, podNet.Subnet.Name, "", skippedAddrs, !podNet.AllowLiveMigration)
if err != nil {
klog.Error(err)
return "", "", "", podNet.Subnet, err
Expand Down Expand Up @@ -1715,7 +1714,7 @@ func (c *Controller) acquireAddress(pod *v1.Pod, podNet *kubeovnNet) (string, st
ipStr := pod.Annotations[fmt.Sprintf(util.IPAddressAnnotationTemplate, podNet.ProviderName)]

for _, net := range nsNets {
v4IP, v6IP, mac, err = c.acquireStaticAddress(key, portName, ipStr, macStr, net.Subnet.Name, net.AllowLiveMigration)
v4IP, v6IP, mac, err = c.acquireStaticAddress(key, portName, ipStr, macPointer, net.Subnet.Name, net.AllowLiveMigration)
if err == nil {
return v4IP, v6IP, mac, net.Subnet, nil
}
Expand All @@ -1742,7 +1741,7 @@ func (c *Controller) acquireAddress(pod *v1.Pod, podNet *kubeovnNet) (string, st
var skippedAddrs []string
for {
portName := ovs.PodNameToPortName(podName, pod.Namespace, podNet.ProviderName)
ipv4, ipv6, mac, err := c.ipam.GetRandomAddress(key, portName, macStr, podNet.Subnet.Name, ipPool[0], skippedAddrs, !podNet.AllowLiveMigration)
ipv4, ipv6, mac, err := c.ipam.GetRandomAddress(key, portName, macPointer, podNet.Subnet.Name, ipPool[0], skippedAddrs, !podNet.AllowLiveMigration)
if err != nil {
klog.Error(err)
return "", "", "", podNet.Subnet, err
Expand Down Expand Up @@ -1781,7 +1780,7 @@ func (c *Controller) acquireAddress(pod *v1.Pod, podNet *kubeovnNet) (string, st
continue
}

v4IP, v6IP, mac, err = c.acquireStaticAddress(key, portName, staticIP, macStr, net.Subnet.Name, net.AllowLiveMigration)
v4IP, v6IP, mac, err = c.acquireStaticAddress(key, portName, staticIP, macPointer, net.Subnet.Name, net.AllowLiveMigration)
if err == nil {
return v4IP, v6IP, mac, net.Subnet, nil
}
Expand All @@ -1795,7 +1794,7 @@ func (c *Controller) acquireAddress(pod *v1.Pod, podNet *kubeovnNet) (string, st

if index < len(ipPool) {
for _, net := range nsNets {
v4IP, v6IP, mac, err = c.acquireStaticAddress(key, portName, ipPool[index], macStr, net.Subnet.Name, net.AllowLiveMigration)
v4IP, v6IP, mac, err = c.acquireStaticAddress(key, portName, ipPool[index], macPointer, net.Subnet.Name, net.AllowLiveMigration)
if err == nil {
return v4IP, v6IP, mac, net.Subnet, nil
}
Expand Down
9 changes: 9 additions & 0 deletions pkg/controller/subnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -2758,6 +2758,10 @@ func (c *Controller) deletePolicyRouteForU2OInterconn(subnet *kubeovnv1.Subnet)
}

func (c *Controller) addStaticRouteForU2OInterconn(subnet *kubeovnv1.Subnet) error {
if subnet.Spec.Vpc == "" {
return nil
}

var v4Gw, v6Gw, v4Cidr, v6Cidr string
for _, gw := range strings.Split(subnet.Spec.Gateway, ",") {
switch util.CheckProtocol(gw) {
Expand Down Expand Up @@ -2807,6 +2811,10 @@ func (c *Controller) addStaticRouteForU2OInterconn(subnet *kubeovnv1.Subnet) err
}

func (c *Controller) deleteStaticRouteForU2OInterconn(subnet *kubeovnv1.Subnet) error {
if subnet.Spec.Vpc == "" {
return nil
}

var v4Gw, v6Gw, v4Cidr, v6Cidr string
for _, gw := range strings.Split(subnet.Spec.Gateway, ",") {
switch util.CheckProtocol(gw) {
Expand Down Expand Up @@ -2846,6 +2854,7 @@ func (c *Controller) deleteStaticRouteForU2OInterconn(subnet *kubeovnv1.Subnet)
v6Gw,
kubeovnv1.PolicySrc,
); err != nil {
klog.Errorf("failed to delete static route, %v", err)
return err
}
}
Expand Down
20 changes: 2 additions & 18 deletions pkg/controller/vpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -727,9 +727,8 @@ func (c *Controller) addStaticRouteToVpc(name string, route *kubeovnv1.StaticRou

func (c *Controller) deleteStaticRouteFromVpc(name, table, cidr, nextHop string, policy kubeovnv1.RoutePolicy) error {
var (
vpc, cachedVpc *kubeovnv1.Vpc
policyStr string
err error
policyStr string
err error
)

policyStr = convertPolicy(policy)
Expand All @@ -738,21 +737,6 @@ func (c *Controller) deleteStaticRouteFromVpc(name, table, cidr, nextHop string,
return err
}

cachedVpc, err = c.vpcsLister.Get(name)
if err != nil {
if k8serrors.IsNotFound(err) {
return nil
}
klog.Error(err)
return err
}
vpc = cachedVpc.DeepCopy()
// make sure custom policies not be deleted
_, err = c.config.KubeOvnClient.KubeovnV1().Vpcs().Update(context.Background(), vpc, metav1.UpdateOptions{})
if err != nil {
klog.Error(err)
return err
}
return nil
}

Expand Down

0 comments on commit 2b19d8a

Please sign in to comment.