Skip to content

Commit 3ab77a7

Browse files
ivanmatmatioktalz
authored andcommitted
BUG/MINOR: fix config snippet management with default local backend
1 parent 8962088 commit 3ab77a7

File tree

6 files changed

+67
-91
lines changed

6 files changed

+67
-91
lines changed

pkg/annotations/cfgSnippet.go

-3
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,6 @@ func UpdateBackendCfgSnippet(k store.K8s, api api.HAProxyClient, backend string)
140140
}
141141

142142
defer func() {
143-
if backend == store.DefaultLocalBackend {
144-
return
145-
}
146143
data.value = nil
147144
data.backendValue = nil
148145
}()

pkg/controller/global.go

+63-26
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package controller
1616

1717
import (
18+
"fmt"
19+
1820
"github.com/go-test/deep"
1921

2022
"github.com/haproxytech/client-native/v3/models"
@@ -24,6 +26,7 @@ import (
2426
"github.com/haproxytech/kubernetes-ingress/pkg/haproxy/certs"
2527
"github.com/haproxytech/kubernetes-ingress/pkg/haproxy/env"
2628
"github.com/haproxytech/kubernetes-ingress/pkg/ingress"
29+
"github.com/haproxytech/kubernetes-ingress/pkg/k8s"
2730
"github.com/haproxytech/kubernetes-ingress/pkg/service"
2831
"github.com/haproxytech/kubernetes-ingress/pkg/store"
2932
)
@@ -32,7 +35,11 @@ func (c *HAProxyController) handleGlobalConfig() (reload, restart bool) {
3235
reload, restart = c.globalCfg()
3336
reload = c.defaultsCfg() || reload
3437
c.handleDefaultCert()
35-
reload = c.handleDefaultService() || reload
38+
if c.osArgs.DefaultBackendService.String() == "" {
39+
reload = c.handleDefaultLocalService() || reload
40+
} else {
41+
reload = c.handleDefaultService() || reload
42+
}
3643
ingress.HandleCfgMapAnnotations(c.store, c.haproxy, c.annotations)
3744
return reload, restart
3845
}
@@ -154,7 +161,7 @@ func (c *HAProxyController) handleDefaultService() (reload bool) {
154161
logger.Errorf("default service: %s", err)
155162
}
156163
if name == "" {
157-
return c.handleDefaultServicePort()
164+
return
158165
}
159166
ingressPath := &store.IngressPath{
160167
SvcNamespace: namespace,
@@ -170,43 +177,73 @@ func (c *HAProxyController) handleDefaultService() (reload bool) {
170177
return reload
171178
}
172179

173-
// handleDefaultServicePort configures local HAProy default backend provided via cli param "default-backend-port"
174-
func (c *HAProxyController) handleDefaultServicePort() (reload bool) {
175-
var svc *service.Service
176-
_, portStr, err := common.GetK8sPath("default-backend-port", c.store.ConfigMaps.Main.Annotations)
177-
if err != nil {
178-
logger.Errorf("default backend port: %s", err)
180+
func populateDefaultLocalBackendResources(k8sStore store.K8s, eventChan chan k8s.SyncDataEvent, podNs string, defaultBackendPort int) error {
181+
controllerNs, ok := k8sStore.Namespaces[podNs]
182+
if !ok {
183+
return fmt.Errorf("controller namespace '%s' not found", podNs)
184+
}
185+
186+
defaultLocalService := controllerNs.Services[store.DefaultLocalBackend]
187+
if defaultLocalService == nil {
188+
item := &store.Service{
189+
Namespace: podNs,
190+
Name: store.DefaultLocalBackend,
191+
Status: store.ADDED,
192+
Annotations: k8sStore.ConfigMaps.Main.Annotations,
193+
Ports: []store.ServicePort{
194+
{
195+
Name: "http",
196+
Protocol: "http",
197+
Port: 8765,
198+
Status: store.ADDED,
199+
},
200+
},
201+
}
202+
eventChan <- k8s.SyncDataEvent{SyncType: k8s.SERVICE, Namespace: item.Namespace, Data: item}
203+
204+
endpoints := &store.Endpoints{
205+
Namespace: podNs,
206+
Service: store.DefaultLocalBackend,
207+
SliceName: store.DefaultLocalBackend,
208+
Status: store.ADDED,
209+
Ports: map[string]*store.PortEndpoints{
210+
"http": {
211+
Port: int64(defaultBackendPort),
212+
Addresses: map[string]struct{}{"127.0.0.1": {}},
213+
},
214+
},
215+
}
216+
eventChan <- k8s.SyncDataEvent{SyncType: k8s.ENDPOINTS, Namespace: endpoints.Namespace, Data: endpoints}
217+
} else {
218+
defaultLocalService.Annotations = k8sStore.ConfigMaps.Main.Annotations
179219
}
180-
if portStr == "" {
220+
return nil
221+
}
222+
223+
func (c *HAProxyController) handleDefaultLocalService() (reload bool) {
224+
var (
225+
err error
226+
svc *service.Service
227+
)
228+
err = populateDefaultLocalBackendResources(c.store, c.eventChan, c.podNamespace, c.osArgs.DefaultBackendPort)
229+
if err != nil {
230+
logger.Error(err)
181231
return
182232
}
183233

184234
ingressPath := &store.IngressPath{
185-
SvcNamespace: "",
235+
SvcNamespace: c.podNamespace,
186236
SvcName: store.DefaultLocalBackend,
187-
SvcPortString: portStr,
188237
IsDefaultBackend: true,
189238
}
190239

191-
backend, _ := c.haproxy.BackendGet(store.DefaultLocalBackend)
192-
if backend != nil {
193-
return
194-
}
195-
err = c.haproxy.BackendCreate(models.Backend{
196-
Name: store.DefaultLocalBackend,
197-
})
198-
if err != nil {
199-
logger.Errorf("default backend port: %s", err)
200-
}
201-
backend, _ = c.haproxy.BackendGet(store.DefaultLocalBackend)
202-
203-
if svc, err = service.NewLocal(c.store, ingressPath, backend, c.store.ConfigMaps.Main.Annotations); err == nil {
240+
if svc, err = service.New(c.store, ingressPath, nil, false); err == nil {
204241
reload, err = svc.SetDefaultBackend(c.store, c.haproxy, []string{c.haproxy.FrontHTTP, c.haproxy.FrontHTTPS}, c.annotations)
205242
}
206243
if err != nil {
207-
logger.Errorf("default service port: %s", err)
244+
logger.Errorf("default service: %s", err)
208245
}
209-
return reload
246+
return
210247
}
211248

212249
// handleDefaultCert configures default/fallback HAProxy certificate to use for client HTTPS requests.

pkg/controller/handler.go

-6
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,6 @@ func (c *HAProxyController) initHandlers() {
5555
if c.osArgs.PprofEnabled {
5656
c.updateHandlers = append(c.updateHandlers, handler.Pprof{})
5757
}
58-
if c.osArgs.DefaultBackendService.String() == "" {
59-
c.updateHandlers = append(c.updateHandlers, handler.DefaultLocalService{
60-
Name: "default_local_backend",
61-
Port: c.osArgs.DefaultBackendPort,
62-
})
63-
}
6458
c.updateHandlers = append(c.updateHandlers, handler.Refresh{})
6559
}
6660

pkg/handler/default-local-service.go

-52
This file was deleted.

pkg/service/endpoints.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ import (
2626
)
2727

2828
// HandleHAProxySrvs handles the haproxy backend servers of the corresponding IngressPath (service + port)
29-
func (s *Service) HandleHAProxySrvs(store store.K8s, client api.HAProxyClient) (reload bool) {
29+
func (s *Service) HandleHAProxySrvs(k8s store.K8s, client api.HAProxyClient) (reload bool) {
3030
var srvsScaled bool
31-
backend, err := s.getRuntimeBackend(store)
31+
backend, err := s.getRuntimeBackend(k8s)
3232
if err != nil {
33-
if s.backend != nil && s.backend.Name == "default_local_backend" {
33+
if s.backend != nil && s.backend.Name == store.DefaultLocalBackend {
3434
return
3535
}
3636
logger.Warningf("Ingress '%s/%s': %s", s.resource.Namespace, s.resource.Name, err)

pkg/store/store.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"github.com/haproxytech/kubernetes-ingress/pkg/utils"
2222
)
2323

24-
const DefaultLocalBackend = "default_local_backend"
24+
const DefaultLocalBackend = "default-local-service"
2525

2626
type K8s struct {
2727
NbrHAProxyInst int64

0 commit comments

Comments
 (0)