in pkg/appgw/ingress_rules.go [139:181]
func (c *appGwConfigBuilder) newBackendIdsFiltered(cbCtx *ConfigBuilderContext) map[backendIdentifier]interface{} {
if c.mem.backendIDs != nil {
return *c.mem.backendIDs
}
backendIDs := make(map[backendIdentifier]interface{})
for _, ingress := range cbCtx.IngressList {
if ingress.Spec.DefaultBackend != nil {
backendID := generateBackendID(ingress, nil, nil, ingress.Spec.DefaultBackend)
klog.V(3).Info("Found default backend:", backendID.serviceKey())
backendIDs[backendID] = nil
}
for ruleIdx := range ingress.Spec.Rules {
rule := &ingress.Spec.Rules[ruleIdx]
if rule.HTTP == nil {
// skip no http rule
klog.V(3).Infof("[%s] Skip rule #%d for host '%s' - it has no HTTP rules.", ingress.Namespace, ruleIdx+1, rule.Host)
continue
}
for pathIdx := range rule.HTTP.Paths {
path := &rule.HTTP.Paths[pathIdx]
backendID := generateBackendID(ingress, rule, path, &path.Backend)
klog.V(3).Info("Found backend:", backendID.serviceKey())
backendIDs[backendID] = nil
}
}
}
finalBackendIDs := make(map[backendIdentifier]interface{})
serviceSet := newServiceSet(&cbCtx.ServiceList)
// Filter out backends, where Ingresses reference non-existent Services
for be := range backendIDs {
if _, exists := serviceSet[be.serviceKey()]; !exists {
klog.Errorf("Ingress %s/%s references non existent Service %s. Please correct the Service section of your Kubernetes YAML", be.Ingress.Namespace, be.Ingress.Name, be.serviceKey())
// TODO(draychev): Enable this filter when we are certain this won't break anything!
// continue
}
finalBackendIDs[be] = nil
}
c.mem.backendIDs = &finalBackendIDs
return finalBackendIDs
}