From b03049c0afef72ceded97f3f681edba8acf402ff Mon Sep 17 00:00:00 2001 From: TaoGe Date: Thu, 24 Jan 2019 22:03:33 +0800 Subject: [PATCH] > Don't reload nginx when L4 service pods changed Since we use lua upstream for L4 service balancer. We don't need reload nginx when L4 service pod changed. --- internal/ingress/controller/nginx.go | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/internal/ingress/controller/nginx.go b/internal/ingress/controller/nginx.go index 4d4c3328cf..16d896c9e3 100644 --- a/internal/ingress/controller/nginx.go +++ b/internal/ingress/controller/nginx.go @@ -751,6 +751,33 @@ func clearCertificates(config *ingress.Configuration) { config.Servers = clearedServers } +// Helper function to clear endpoints from the ingress configuration since they should be ignored when +// checking if the new configuration changes can be applied dynamically. +func clearL4serviceEndpoints(config *ingress.Configuration) { + var clearedTCPL4Services []ingress.L4Service + var clearedUDPL4Services []ingress.L4Service + for _, service := range config.TCPEndpoints { + copyofService := ingress.L4Service{ + Port: service.Port, + Backend: service.Backend, + Endpoints: []ingress.Endpoint{}, + Service: nil, + } + clearedTCPL4Services = append(clearedTCPL4Services, copyofService) + } + for _, service := range config.UDPEndpoints { + copyofService := ingress.L4Service{ + Port: service.Port, + Backend: service.Backend, + Endpoints: []ingress.Endpoint{}, + Service: nil, + } + clearedUDPL4Services = append(clearedUDPL4Services, copyofService) + } + config.TCPEndpoints = clearedTCPL4Services + config.UDPEndpoints = clearedUDPL4Services +} + // IsDynamicConfigurationEnough returns whether a Configuration can be // dynamically applied, without reloading the backend. func (n *NGINXController) IsDynamicConfigurationEnough(pcfg *ingress.Configuration) bool { @@ -759,6 +786,10 @@ func (n *NGINXController) IsDynamicConfigurationEnough(pcfg *ingress.Configurati copyOfRunningConfig.Backends = []*ingress.Backend{} copyOfPcfg.Backends = []*ingress.Backend{} + + clearL4serviceEndpoints(©OfRunningConfig) + clearL4serviceEndpoints(©OfPcfg) + copyOfRunningConfig.ControllerPodsCount = 0 copyOfPcfg.ControllerPodsCount = 0