Make kube-proxy resync its rules on firewalld restart

This commit is contained in:
Dan Winship 2015-08-14 12:38:43 -04:00
parent 8bc9c40796
commit 30ea22f40e
4 changed files with 22 additions and 10 deletions

View File

@ -240,6 +240,8 @@ func (s *ProxyServer) Run(_ []string) error {
}, 5*time.Second, util.NeverStop) }, 5*time.Second, util.NeverStop)
} }
ipt.AddReloadFunc(proxier.Sync)
// Just loop forever for now... // Just loop forever for now...
proxier.SyncLoop() proxier.SyncLoop()
return nil return nil

View File

@ -248,6 +248,13 @@ func ipsEqual(lhs, rhs []string) bool {
return true return true
} }
// Sync is called to immediately synchronize the proxier state to iptables
func (proxier *Proxier) Sync() {
proxier.mu.Lock()
defer proxier.mu.Unlock()
proxier.syncProxyRules()
}
// SyncLoop runs periodic work. This is expected to run as a goroutine or as the main loop of the app. It does not return. // SyncLoop runs periodic work. This is expected to run as a goroutine or as the main loop of the app. It does not return.
func (proxier *Proxier) SyncLoop() { func (proxier *Proxier) SyncLoop() {
t := time.NewTicker(proxier.syncPeriod) t := time.NewTicker(proxier.syncPeriod)
@ -255,11 +262,7 @@ func (proxier *Proxier) SyncLoop() {
for { for {
<-t.C <-t.C
glog.V(6).Infof("Periodic sync") glog.V(6).Infof("Periodic sync")
func() { proxier.Sync()
proxier.mu.Lock()
defer proxier.mu.Unlock()
proxier.syncProxyRules()
}()
} }
} }

View File

@ -29,6 +29,8 @@ type ProxyProvider interface {
// Active service proxies are reinitialized if found in the update set or // Active service proxies are reinitialized if found in the update set or
// removed if missing from the update set. // removed if missing from the update set.
OnServiceUpdate(services []api.Service) OnServiceUpdate(services []api.Service)
// Sync immediately synchronizes the ProxyProvider's current state to iptables.
Sync()
// SyncLoop runs periodic work. // SyncLoop runs periodic work.
// This is expected to run as a goroutine or as the main loop of the app. // This is expected to run as a goroutine or as the main loop of the app.
// It does not return. // It does not return.

View File

@ -222,6 +222,15 @@ func CleanupLeftovers(ipt iptables.Interface) (encounteredError bool) {
return encounteredError return encounteredError
} }
// Sync is called to immediately synchronize the proxier state to iptables
func (proxier *Proxier) Sync() {
if err := iptablesInit(proxier.iptables); err != nil {
glog.Errorf("Failed to ensure iptables: %v", err)
}
proxier.ensurePortals()
proxier.cleanupStaleStickySessions()
}
// SyncLoop runs periodic work. This is expected to run as a goroutine or as the main loop of the app. It does not return. // SyncLoop runs periodic work. This is expected to run as a goroutine or as the main loop of the app. It does not return.
func (proxier *Proxier) SyncLoop() { func (proxier *Proxier) SyncLoop() {
t := time.NewTicker(proxier.syncPeriod) t := time.NewTicker(proxier.syncPeriod)
@ -229,11 +238,7 @@ func (proxier *Proxier) SyncLoop() {
for { for {
<-t.C <-t.C
glog.V(6).Infof("Periodic sync") glog.V(6).Infof("Periodic sync")
if err := iptablesInit(proxier.iptables); err != nil { proxier.Sync()
glog.Errorf("Failed to ensure iptables: %v", err)
}
proxier.ensurePortals()
proxier.cleanupStaleStickySessions()
} }
} }