Skip to content

Commit 631db98

Browse files
LBwacher changed generation logic (#40)
* fix: l4-watcher: change lb generation and ip assignment logic * fix: lb-watcher: stop using iprole annotation * fix: bgp: set status N/A when trasport type is vnet * Preparation for new release Co-authored-by: Artashes Balabekyan <[email protected]>
1 parent 49c0c66 commit 631db98

File tree

5 files changed

+38
-86
lines changed

5 files changed

+38
-86
lines changed

api/v1alpha1/l4lb_functions.go

-10
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,3 @@ func (l *L4LB) SetServiceIngressIPs(s string) {
6161
anns["serviceingressips"] = s
6262
l.SetAnnotations(anns)
6363
}
64-
65-
func (l *L4LB) IPRole() string {
66-
return l.GetAnnotations()["resource.k8s.netris.ai/iprole"]
67-
}
68-
69-
func (l *L4LB) SetIPRole(s string) {
70-
anns := l.GetAnnotations()
71-
anns["resource.k8s.netris.ai/iprole"] = s
72-
l.SetAnnotations(anns)
73-
}

controllers/bgpmeta_controller.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,11 @@ func (r *BGPMetaReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
104104
bgpCR.Status.BGPStatus = bgp.BgpState
105105
prefixCount, _ := strconv.Atoi(bgp.BgpPrefixes)
106106
bgpCR.Status.BGPPrefixes = prefixCount
107-
bgpCR.Status.PortState = bgp.PortStatus
107+
portStatus := bgp.PortStatus
108+
if bgpCR.Spec.Transport.Type == "vnet" {
109+
portStatus = "N/A"
110+
}
111+
bgpCR.Status.PortState = portStatus
108112
bgpCR.Status.TerminateOnSwitch = bgp.TermSwName
109113
if bgp.Vlan > 1 {
110114
bgpCR.Status.VLANID = strconv.Itoa(bgp.Vlan)
@@ -140,7 +144,11 @@ func (r *BGPMetaReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
140144
bgpCR.Status.BGPStatus = apiBGP.BgpState
141145
prefixCount, _ := strconv.Atoi(apiBGP.BgpPrefixes)
142146
bgpCR.Status.BGPPrefixes = prefixCount
143-
bgpCR.Status.PortState = apiBGP.PortStatus
147+
portStatus := apiBGP.PortStatus
148+
if bgpCR.Spec.Transport.Type == "vnet" {
149+
portStatus = "N/A"
150+
}
151+
bgpCR.Status.PortState = portStatus
144152
bgpCR.Status.TerminateOnSwitch = apiBGP.TermSwName
145153
if apiBGP.Vlan > 1 {
146154
bgpCR.Status.VLANID = strconv.Itoa(apiBGP.Vlan)

deploy/charts/netris-operator/Chart.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ type: application
1515
# This is the chart version. This version number should be incremented each time you make changes
1616
# to the chart and its templates, including the app version.
1717
# Versions are expected to follow Semantic Versioning (https://semver.org/)
18-
version: 0.3.8
18+
version: 0.3.9
1919

2020
# This is the version number of the application being deployed. This version number should be
2121
# incremented each time you make changes to the application. Versions are not expected to
2222
# follow Semantic Versioning. They should reflect the version the application is using.
23-
appVersion: v0.4.6
23+
appVersion: v0.4.7
2424
home: https://github.com/netrisai/netris-operator
2525
icon: https://www.netris.ai/wp-content/uploads/2020/05/logo-600.png # [todo] Change url to permalink
2626
keywords:

lbwatcher/lb_watcher.go

+25-71
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,6 @@ func (w *Watcher) loadBalancerProcess(clientset *kubernetes.Clientset, cl client
110110
debugLogger.Info("Generating load balancers from k8s...")
111111
var errors []error = nil
112112
lbTimeout := "2000"
113-
serviceLBs, err := w.generateLoadBalancers(clientset, lbTimeout)
114-
if err != nil {
115-
logger.Error(err, "")
116-
}
117113

118114
l4lbs, err := getL4LBs(cl)
119115
if err != nil {
@@ -129,11 +125,16 @@ func (w *Watcher) loadBalancerProcess(clientset *kubernetes.Clientset, cl client
129125

130126
ipAuto := make(map[string]string)
131127
for _, lb := range filteerdL4LBs {
132-
if uid := lb.GetServiceUID(); uid != "" && lb.IPRole() == "main" {
128+
if uid := lb.GetServiceUID(); uid != "" {
133129
ipAuto[uid] = lb.Spec.Frontend.IP
134130
}
135131
}
136132

133+
serviceLBs, err := w.generateLoadBalancers(clientset, ipAuto, lbTimeout)
134+
if err != nil {
135+
logger.Error(err, "")
136+
}
137+
137138
lbsToCreate, lbsToUpdate, lbsToDelete, ingressIPsMap := compareLoadBalancers(filteerdL4LBs, serviceLBs)
138139

139140
js, _ := json.Marshal(lbsToCreate)
@@ -207,30 +208,9 @@ func deleteL4LB(cl client.Client, lb k8sv1alpha1.L4LB) error {
207208
func updateL4LBs(cl client.Client, lbs []k8sv1alpha1.L4LB, ipAuto map[string]string) []error {
208209
var errors []error
209210
for _, lb := range lbs {
210-
if ip, ok := ipAuto[lb.GetServiceUID()]; ok && lb.Spec.Frontend.IP == "" {
211-
if ip == "" {
212-
break
213-
} else {
214-
lb.Spec.Frontend.IP = ip
215-
lb.SetIPRole("child")
216-
err := updateL4LB(cl, lb)
217-
if err != nil {
218-
errors = append(errors, fmt.Errorf("{updateL4LB} %s", err))
219-
}
220-
}
221-
} else {
222-
if lb.Spec.Frontend.IP == "" {
223-
lb.SetIPRole("main")
224-
} else {
225-
lb.SetIPRole("standard")
226-
}
227-
err := updateL4LB(cl, lb)
228-
if err != nil {
229-
errors = append(errors, fmt.Errorf("{updateL4LB} %s", err))
230-
}
231-
if lb.Spec.Frontend.IP == "" {
232-
break
233-
}
211+
err := updateL4LB(cl, lb)
212+
if err != nil {
213+
errors = append(errors, fmt.Errorf("{updateL4LB} %s", err))
234214
}
235215
}
236216
return errors
@@ -245,30 +225,9 @@ func createL4LB(cl client.Client, lb *k8sv1alpha1.L4LB) error {
245225
func createL4LBs(cl client.Client, lbs []*k8sv1alpha1.L4LB, ipAuto map[string]string) []error {
246226
var errors []error
247227
for _, lb := range lbs {
248-
if ip, ok := ipAuto[lb.GetServiceUID()]; ok && lb.Spec.Frontend.IP == "" {
249-
if ip == "" {
250-
break
251-
} else {
252-
lb.Spec.Frontend.IP = ip
253-
lb.SetIPRole("child")
254-
err := createL4LB(cl, lb)
255-
if err != nil {
256-
errors = append(errors, fmt.Errorf("{createL4LB} %s", err))
257-
}
258-
}
259-
} else {
260-
if lb.Spec.Frontend.IP == "" {
261-
lb.SetIPRole("main")
262-
} else {
263-
lb.SetIPRole("standard")
264-
}
265-
err := createL4LB(cl, lb)
266-
if err != nil {
267-
errors = append(errors, fmt.Errorf("{createL4LB} %s", err))
268-
}
269-
if lb.Spec.Frontend.IP == "" {
270-
break
271-
}
228+
err := createL4LB(cl, lb)
229+
if err != nil {
230+
errors = append(errors, fmt.Errorf("{createL4LB} %s", err))
272231
}
273232
}
274233
return errors
@@ -310,8 +269,6 @@ func compareLoadBalancers(LBs []k8sv1alpha1.L4LB, serviceLBs []*k8sv1alpha1.L4LB
310269
}
311270
}
312271

313-
autoIPs := make(map[string]string)
314-
315272
if len(serviceLBsMap) > 0 {
316273
for _, serviceLB := range serviceLBsMap {
317274
if lb, ok := LBsMap[serviceLB.Name]; ok {
@@ -326,19 +283,8 @@ func compareLoadBalancers(LBs []k8sv1alpha1.L4LB, serviceLBs []*k8sv1alpha1.L4LB
326283

327284
lbIngressMap[serviceLB.GetServiceUID()][lb.Spec.Frontend.IP] = 1
328285

329-
if serviceLB.Spec.Frontend.IP != "" || (lb.IPRole() != "child" && lb.IPRole() != "main") {
330-
if serviceLB.Spec.Frontend.IP != lb.Spec.Frontend.IP {
331-
lb.Spec.Frontend.IP = serviceLB.Spec.Frontend.IP
332-
update = true
333-
}
334-
}
335-
336-
if lb.IPRole() == "main" && lb.Spec.Frontend.IP != "" {
337-
autoIPs[lb.GetServiceUID()] = lb.Spec.Frontend.IP
338-
}
339-
340-
if ip, ok := autoIPs[lb.GetServiceUID()]; ok && lb.IPRole() == "child" && ip != lb.Spec.Frontend.IP && !update {
341-
lb.Spec.Frontend.IP = ip
286+
if serviceLB.Spec.Frontend.IP != lb.Spec.Frontend.IP {
287+
lb.Spec.Frontend.IP = serviceLB.Spec.Frontend.IP
342288
update = true
343289
}
344290

@@ -409,7 +355,7 @@ func getL4LBs(cl client.Client) (*k8sv1alpha1.L4LBList, error) {
409355
return l4lb, nil
410356
}
411357

412-
func (w *Watcher) generateLoadBalancers(clientset *kubernetes.Clientset, lbTimeout string) ([]*k8sv1alpha1.L4LB, error) {
358+
func (w *Watcher) generateLoadBalancers(clientset *kubernetes.Clientset, autoIPs map[string]string, lbTimeout string) ([]*k8sv1alpha1.L4LB, error) {
413359
lbList := []*k8sv1alpha1.L4LB{}
414360
serviceList, err := getServices(clientset, "")
415361
if err != nil {
@@ -476,7 +422,15 @@ func (w *Watcher) generateLoadBalancers(clientset *kubernetes.Clientset, lbTimeo
476422
}
477423

478424
if len(lbIPs) > 0 && len(hostIPS) > 0 {
479-
for _, lbIP := range lbIPs {
425+
for i, lbIP := range lbIPs {
426+
frontendIP := lbIP.IP
427+
if lbIP.IP == "" {
428+
if ip, ok := autoIPs[string(svc.GetUID())]; ok && ip != "" {
429+
frontendIP = ip
430+
} else if i > 0 {
431+
break
432+
}
433+
}
480434
backends := []k8sv1alpha1.L4LBBackend{}
481435
for _, hostIP := range hostIPS {
482436
backend := fmt.Sprintf("%s:%d", hostIP, lbIP.NodePort)
@@ -498,7 +452,7 @@ func (w *Watcher) generateLoadBalancers(clientset *kubernetes.Clientset, lbTimeo
498452
Protocol: strings.ToLower(lbIP.Protocol),
499453
Frontend: k8sv1alpha1.L4LBFrontend{
500454
Port: lbIP.Port,
501-
IP: lbIP.IP,
455+
IP: frontendIP,
502456
},
503457
State: "active",
504458
Check: k8sv1alpha1.L4LBCheck{

samples/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ Name | Default |Values | Des
171171

172172
# Calico Integration
173173

174-
Calico nodes exchange routing information over BGP to enable reachability for Calico networked workloads. Netris can also integrate with you Calico CNI. It will create BGP peers with your cluster's nodes, then will disable Calico Node to Node mesh. For more details, get familiar with [calico docs](https://docs.projectcalico.org/networking/bgp).
174+
Calico nodes exchange routing information over BGP to enable reachability for Calico networked workloads. Netris can also integrate with your Calico CNI. It will create BGP peers with your cluster's nodes, then will disable Calico Node to Node mesh. For more details, get familiar with [calico docs](https://docs.projectcalico.org/networking/bgp).
175175

176176
Add this annotation to enable Netris-Calico Integration.
177177
```

0 commit comments

Comments
 (0)