15
15
package controller
16
16
17
17
import (
18
+ "fmt"
19
+
18
20
"github.com/go-test/deep"
19
21
20
22
"github.com/haproxytech/client-native/v3/models"
@@ -24,6 +26,7 @@ import (
24
26
"github.com/haproxytech/kubernetes-ingress/pkg/haproxy/certs"
25
27
"github.com/haproxytech/kubernetes-ingress/pkg/haproxy/env"
26
28
"github.com/haproxytech/kubernetes-ingress/pkg/ingress"
29
+ "github.com/haproxytech/kubernetes-ingress/pkg/k8s"
27
30
"github.com/haproxytech/kubernetes-ingress/pkg/service"
28
31
"github.com/haproxytech/kubernetes-ingress/pkg/store"
29
32
)
@@ -32,7 +35,11 @@ func (c *HAProxyController) handleGlobalConfig() (reload, restart bool) {
32
35
reload , restart = c .globalCfg ()
33
36
reload = c .defaultsCfg () || reload
34
37
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
+ }
36
43
ingress .HandleCfgMapAnnotations (c .store , c .haproxy , c .annotations )
37
44
return reload , restart
38
45
}
@@ -154,7 +161,7 @@ func (c *HAProxyController) handleDefaultService() (reload bool) {
154
161
logger .Errorf ("default service: %s" , err )
155
162
}
156
163
if name == "" {
157
- return c . handleDefaultServicePort ()
164
+ return
158
165
}
159
166
ingressPath := & store.IngressPath {
160
167
SvcNamespace : namespace ,
@@ -170,43 +177,73 @@ func (c *HAProxyController) handleDefaultService() (reload bool) {
170
177
return reload
171
178
}
172
179
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
179
219
}
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 )
181
231
return
182
232
}
183
233
184
234
ingressPath := & store.IngressPath {
185
- SvcNamespace : "" ,
235
+ SvcNamespace : c . podNamespace ,
186
236
SvcName : store .DefaultLocalBackend ,
187
- SvcPortString : portStr ,
188
237
IsDefaultBackend : true ,
189
238
}
190
239
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 {
204
241
reload , err = svc .SetDefaultBackend (c .store , c .haproxy , []string {c .haproxy .FrontHTTP , c .haproxy .FrontHTTPS }, c .annotations )
205
242
}
206
243
if err != nil {
207
- logger .Errorf ("default service port : %s" , err )
244
+ logger .Errorf ("default service: %s" , err )
208
245
}
209
- return reload
246
+ return
210
247
}
211
248
212
249
// handleDefaultCert configures default/fallback HAProxy certificate to use for client HTTPS requests.
0 commit comments