diff --git a/core/pkg/ingress/controller/controller.go b/core/pkg/ingress/controller/controller.go index bbb96df360..96c5800c5e 100644 --- a/core/pkg/ingress/controller/controller.go +++ b/core/pkg/ingress/controller/controller.go @@ -991,6 +991,11 @@ func (ic *GenericController) getEndpoints( upsServers := []ingress.Endpoint{} + // avoid duplicated upstream servers when the service + // contains multiple port definitions sharing the same + // targetport. + adus := make(map[string]bool, 0) + for _, ss := range ep.Subsets { for _, epPort := range ss.Ports { @@ -1031,6 +1036,10 @@ func (ic *GenericController) getEndpoints( } for _, epAddress := range ss.Addresses { + ep := fmt.Sprintf("%v:%v", epAddress.IP, targetPort) + if _, exists := adus[ep]; exists { + continue + } ups := ingress.Endpoint{ Address: epAddress.IP, Port: fmt.Sprintf("%v", targetPort), @@ -1038,6 +1047,7 @@ func (ic *GenericController) getEndpoints( FailTimeout: hz.FailTimeout, } upsServers = append(upsServers, ups) + adus[ep] = true } } }