diff --git a/admiral/pkg/clusters/handler.go b/admiral/pkg/clusters/handler.go index 1cf4bc21..40d68ff9 100644 --- a/admiral/pkg/clusters/handler.go +++ b/admiral/pkg/clusters/handler.go @@ -30,6 +30,7 @@ import ( const ( DefaultBaseEjectionTime int64 = 300 DefaultConsecutiveGatewayErrors uint32 = 50 + DefaultConsecutive5xxErrors uint32 = 0 DefaultInterval int64 = 60 DefaultHTTP2MaxRequests int32 = 1000 DefaultMaxRequestsPerConnection int32 = 100 @@ -142,7 +143,9 @@ func getOutlierDetection(se *networkingv1alpha3.ServiceEntry, locality string, g outlierDetection := &networkingv1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: DefaultBaseEjectionTime}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: DefaultConsecutiveGatewayErrors}, - Interval: &duration.Duration{Seconds: DefaultInterval}, + // The default Consecutive5XXErrors is set to 5 in envoy, setting to 0 disables 5XX error outlier detection so that ConsecutiveGatewayErrors rule can get evaluated + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: DefaultConsecutive5xxErrors}, + Interval: &duration.Duration{Seconds: DefaultInterval}, } if gtpTrafficPolicy != nil && gtpTrafficPolicy.OutlierDetection != nil { diff --git a/admiral/pkg/clusters/handler_test.go b/admiral/pkg/clusters/handler_test.go index c32846f4..7b4179cc 100644 --- a/admiral/pkg/clusters/handler_test.go +++ b/admiral/pkg/clusters/handler_test.go @@ -179,6 +179,7 @@ func TestGetDestinationRule(t *testing.T) { outlierDetection := &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: 300}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: 50}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: 0}, Interval: &duration.Duration{Seconds: 60}, MaxEjectionPercent: 100, } @@ -329,6 +330,7 @@ func TestGetOutlierDetection(t *testing.T) { outlierDetection := &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: DefaultBaseEjectionTime}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: DefaultConsecutiveGatewayErrors}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: DefaultConsecutive5xxErrors}, Interval: &duration.Duration{Seconds: DefaultInterval}, MaxEjectionPercent: 100, } @@ -336,6 +338,7 @@ func TestGetOutlierDetection(t *testing.T) { outlierDetectionOneHostRemote := &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: DefaultBaseEjectionTime}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: DefaultConsecutiveGatewayErrors}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: DefaultConsecutive5xxErrors}, Interval: &duration.Duration{Seconds: DefaultInterval}, MaxEjectionPercent: 34, } @@ -437,6 +440,7 @@ func TestGetOutlierDetection(t *testing.T) { outlierDetection: &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: DefaultBaseEjectionTime}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: 10}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: 0}, Interval: &duration.Duration{Seconds: 60}, MaxEjectionPercent: 100, }, @@ -461,6 +465,7 @@ func TestGetOutlierDetection(t *testing.T) { outlierDetection: &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: 600}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: DefaultConsecutiveGatewayErrors}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: DefaultConsecutive5xxErrors}, Interval: &duration.Duration{Seconds: 60}, MaxEjectionPercent: 100, }, @@ -485,6 +490,7 @@ func TestGetOutlierDetection(t *testing.T) { outlierDetection: &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: 600}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: 50}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: 0}, Interval: &duration.Duration{Seconds: DefaultInterval}, MaxEjectionPercent: 100, }, @@ -510,6 +516,7 @@ func TestGetOutlierDetection(t *testing.T) { outlierDetection: &v1alpha3.OutlierDetection{ BaseEjectionTime: &duration.Duration{Seconds: 600}, ConsecutiveGatewayErrors: &wrappers.UInt32Value{Value: 10}, + Consecutive_5XxErrors: &wrappers.UInt32Value{Value: 0}, Interval: &duration.Duration{Seconds: 60}, MaxEjectionPercent: 100, },