Skip to content

Commit effc111

Browse files
authored
u2o support specify u2o ip on release-1.11 (#2937)
1 parent 9485980 commit effc111

File tree

6 files changed

+47
-6
lines changed

6 files changed

+47
-6
lines changed

dist/images/install.sh

+2
Original file line numberDiff line numberDiff line change
@@ -1495,6 +1495,8 @@ spec:
14951495
- reject
14961496
u2oInterconnection:
14971497
type: boolean
1498+
u2oInterconnectionIP:
1499+
type: string
14981500
scope: Cluster
14991501
names:
15001502
plural: subnets

kubeovn-helm/templates/kube-ovn-crd.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,8 @@ spec:
12661266
- reject
12671267
u2oInterconnection:
12681268
type: boolean
1269+
u2oInterconnectionIP:
1270+
type: string
12691271
scope: Cluster
12701272
names:
12711273
plural: subnets

pkg/apis/kubeovn/v1/types.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ type SubnetSpec struct {
138138

139139
Acls []Acl `json:"acls,omitempty"`
140140

141-
U2OInterconnection bool `json:"u2oInterconnection,omitempty"`
141+
U2OInterconnection bool `json:"u2oInterconnection,omitempty"`
142+
U2OInterconnectionIP string `json:"u2oInterconnectionIP,omitempty"`
142143
}
143144

144145
type Acl struct {

pkg/controller/subnet.go

+27-5
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@ func (c *Controller) enqueueUpdateSubnet(old, new interface{}) {
9494
oldSubnet.Spec.IPv6RAConfigs != newSubnet.Spec.IPv6RAConfigs ||
9595
oldSubnet.Spec.Protocol != newSubnet.Spec.Protocol ||
9696
!reflect.DeepEqual(oldSubnet.Spec.Acls, newSubnet.Spec.Acls) ||
97-
oldSubnet.Spec.U2OInterconnection != newSubnet.Spec.U2OInterconnection {
97+
oldSubnet.Spec.U2OInterconnection != newSubnet.Spec.U2OInterconnection ||
98+
(newSubnet.Spec.U2OInterconnection && newSubnet.Spec.U2OInterconnectionIP != "" &&
99+
oldSubnet.Spec.U2OInterconnectionIP != newSubnet.Spec.U2OInterconnectionIP) {
98100
klog.V(3).Infof("enqueue update subnet %s", key)
99101
c.addOrUpdateSubnetQueue.Add(key)
100102
}
@@ -312,6 +314,11 @@ func formatSubnet(subnet *kubeovnv1.Subnet, c *Controller) error {
312314
}
313315
}
314316
}
317+
if subnet.Spec.U2OInterconnectionIP != "" && !subnet.Spec.U2OInterconnection {
318+
subnet.Spec.U2OInterconnectionIP = ""
319+
changed = true
320+
}
321+
315322
klog.Infof("format subnet %v, changed %v", subnet.Name, changed)
316323
if changed {
317324
_, err = c.config.KubeOvnClient.KubeovnV1().Subnets().Update(context.Background(), subnet, metav1.UpdateOptions{})
@@ -1530,14 +1537,29 @@ func (c *Controller) reconcileU2OInterconnectionIP(subnet *kubeovnv1.Subnet) err
15301537
klog.Infof("reconcile underlay subnet %s to overlay interconnection with U2OInterconnection %v U2OInterconnectionIP %s ",
15311538
subnet.Name, subnet.Spec.U2OInterconnection, subnet.Status.U2OInterconnectionIP)
15321539
if subnet.Spec.U2OInterconnection {
1533-
if subnet.Status.U2OInterconnectionIP == "" {
1534-
u2oInterconnName := fmt.Sprintf(util.U2OInterconnName, subnet.Spec.Vpc, subnet.Name)
1535-
u2oInterconnLrpName := fmt.Sprintf("%s-%s", subnet.Spec.Vpc, subnet.Name)
1536-
v4ip, v6ip, _, err := c.acquireIpAddress(subnet.Name, u2oInterconnName, u2oInterconnLrpName)
1540+
u2oInterconnName := fmt.Sprintf(util.U2OInterconnName, subnet.Spec.Vpc, subnet.Name)
1541+
u2oInterconnLrpName := fmt.Sprintf("%s-%s", subnet.Spec.Vpc, subnet.Name)
1542+
var v4ip, v6ip string
1543+
var err error
1544+
if subnet.Spec.U2OInterconnectionIP == "" && subnet.Status.U2OInterconnectionIP == "" {
1545+
v4ip, v6ip, _, err = c.acquireIpAddress(subnet.Name, u2oInterconnName, u2oInterconnLrpName)
15371546
if err != nil {
15381547
klog.Errorf("failed to acquire underlay to overlay interconnection ip address for subnet %s, %v", subnet.Name, err)
15391548
return err
15401549
}
1550+
} else if subnet.Spec.U2OInterconnectionIP != "" && subnet.Status.U2OInterconnectionIP != subnet.Spec.U2OInterconnectionIP {
1551+
if subnet.Status.U2OInterconnectionIP != "" {
1552+
c.ipam.ReleaseAddressByPod(u2oInterconnName)
1553+
}
1554+
1555+
v4ip, v6ip, _, err = c.acquireStaticIpAddress(subnet.Name, u2oInterconnName, u2oInterconnLrpName, subnet.Spec.U2OInterconnectionIP)
1556+
if err != nil {
1557+
klog.Errorf("failed to acquire static underlay to overlay interconnection ip address for subnet %s, %v", subnet.Name, err)
1558+
return err
1559+
}
1560+
}
1561+
1562+
if v4ip != "" || v6ip != "" {
15411563
switch subnet.Spec.Protocol {
15421564
case kubeovnv1.ProtocolIPv4:
15431565
subnet.Status.U2OInterconnectionIP = v4ip

pkg/util/validator.go

+12
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ func ValidateSubnet(subnet kubeovnv1.Subnet) error {
105105
}
106106
}
107107
}
108+
109+
if subnet.Spec.LogicalGateway && subnet.Spec.U2OInterconnection {
110+
return fmt.Errorf("logicalGateway and u2oInterconnection can't be opened at the same time")
111+
}
112+
113+
if subnet.Spec.U2OInterconnectionIP != "" {
114+
if !CIDRContainIP(subnet.Spec.CIDRBlock, subnet.Spec.U2OInterconnectionIP) {
115+
return fmt.Errorf("u2oInterconnectionIP %s is not in subnet %s cidr %s",
116+
subnet.Spec.U2OInterconnectionIP,
117+
subnet.Name, subnet.Spec.CIDRBlock)
118+
}
119+
}
108120
return nil
109121
}
110122

yamls/crd.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,8 @@ spec:
12741274
- reject
12751275
u2oInterconnection:
12761276
type: boolean
1277+
u2oInterconnectionIP:
1278+
type: string
12771279
scope: Cluster
12781280
names:
12791281
plural: subnets

0 commit comments

Comments
 (0)