Skip to content

Commit

Permalink
Fix reload when a configmap changes
Browse files Browse the repository at this point in the history
  • Loading branch information
aledbf committed Sep 24, 2019
1 parent 9b66f2a commit a40a4b0
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 28 deletions.
22 changes: 22 additions & 0 deletions internal/ingress/annotations/parser/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"strings"

networking "k8s.io/api/networking/v1beta1"
"k8s.io/apimachinery/pkg/util/sets"

"k8s.io/ingress-nginx/internal/ingress/errors"
)
Expand Down Expand Up @@ -130,3 +131,24 @@ func normalizeString(input string) string {

return strings.Join(trimmedContent, "\n")
}

var configmapAnnotations = sets.NewString(
"auth-proxy-set-header",
"fastcgi-params-configmap",
)

// AnnotationsReferencesConfigmap checks if at least one annotation in the Ingress rule
// references a configmap.
func AnnotationsReferencesConfigmap(ing *networking.Ingress) bool {
if ing == nil || len(ing.GetAnnotations()) == 0 {
return false
}

for name := range ing.GetAnnotations() {
if configmapAnnotations.Has(name) {
return true
}
}

return false
}
78 changes: 50 additions & 28 deletions internal/ingress/controller/store/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -525,48 +525,69 @@ func New(
},
}

// TODO: add e2e test to verify that changes to one or more configmap trigger an update
changeTriggerUpdate := func(name string) bool {
return name == configmap || name == tcp || name == udp
}

cmEventHandler := cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
cm := obj.(*corev1.ConfigMap)
key := k8s.MetaNamespaceKey(cm)
// updates to configuration configmaps can trigger an update
if key == configmap || key == tcp || key == udp {
if changeTriggerUpdate(key) {
recorder.Eventf(cm, corev1.EventTypeNormal, "CREATE", fmt.Sprintf("ConfigMap %v", key))

if key == configmap {
store.setConfig(cm)
}
updateCh.In() <- Event{
Type: ConfigurationEvent,
Obj: obj,
}
}

updateCh.In() <- Event{
Type: ConfigurationEvent,
Obj: obj,
}
},
UpdateFunc: func(old, cur interface{}) {
if !reflect.DeepEqual(old, cur) {
cm := cur.(*corev1.ConfigMap)
key := k8s.MetaNamespaceKey(cm)
// updates to configuration configmaps can trigger an update
if key == configmap || key == tcp || key == udp {
recorder.Eventf(cm, corev1.EventTypeNormal, "UPDATE", fmt.Sprintf("ConfigMap %v", key))
if key == configmap {
store.setConfig(cm)
}
if reflect.DeepEqual(old, cur) {
return
}

ings := store.listers.IngressWithAnnotation.List()
for _, ingKey := range ings {
key := k8s.MetaNamespaceKey(ingKey)
ing, err := store.getIngress(key)
if err != nil {
klog.Errorf("could not find Ingress %v in local store: %v", key, err)
continue
}
store.syncIngress(ing)
}
// used to limit the number of events
triggerUpdate := false

updateCh.In() <- Event{
Type: ConfigurationEvent,
Obj: cur,
}
cm := cur.(*corev1.ConfigMap)
key := k8s.MetaNamespaceKey(cm)
// updates to configuration configmaps can trigger an update
if changeTriggerUpdate(key) {
recorder.Eventf(cm, corev1.EventTypeNormal, "UPDATE", fmt.Sprintf("ConfigMap %v", key))
triggerUpdate = true
}

if key == configmap {
store.setConfig(cm)
}

ings := store.listers.IngressWithAnnotation.List()
for _, ingKey := range ings {
key := k8s.MetaNamespaceKey(ingKey)
ing, err := store.getIngress(key)
if err != nil {
klog.Errorf("could not find Ingress %v in local store: %v", key, err)
continue
}

if parser.AnnotationsReferencesConfigmap(ing) {
recorder.Eventf(cm, corev1.EventTypeNormal, "UPDATE", fmt.Sprintf("ConfigMap %v", key))
store.syncIngress(ing)
triggerUpdate = true
}
}

if triggerUpdate {
updateCh.In() <- Event{
Type: ConfigurationEvent,
Obj: cur,
}
}
},
Expand Down Expand Up @@ -683,6 +704,7 @@ func (s *k8sStore) updateSecretIngressMap(ing *networkingv1beta1.Ingress) {
"auth-secret",
"auth-tls-secret",
"proxy-ssl-secret",
"secure-verify-ca-secret",
}
for _, ann := range secretAnnotations {
secrKey, err := objectRefAnnotationNsKey(ann, ing)
Expand Down

0 comments on commit a40a4b0

Please sign in to comment.