From 0b22a811d056357380abe5c9bc0d9aff30566d3b Mon Sep 17 00:00:00 2001
From: Aditya Ranjan Barik <aditya.barik32@gmail.com>
Date: Fri, 24 Nov 2023 12:47:28 +0530
Subject: [PATCH 1/2] added failure percent algo support for grpc-xds proxyless

---
 kubernetes/customresourcedefinitions.gen.yaml | 472 +++++++++++++
 networking/v1alpha3/destination_rule.pb.go    | 641 +++++++++++++-----
 networking/v1alpha3/destination_rule.pb.html  | 178 ++++-
 networking/v1alpha3/destination_rule.proto    |  68 ++
 .../v1alpha3/destination_rule_deepcopy.gen.go |  42 ++
 .../v1alpha3/destination_rule_json.gen.go     |  22 +
 networking/v1beta1/destination_rule.pb.go     | 638 ++++++++++++-----
 networking/v1beta1/destination_rule.proto     |  68 ++
 .../v1beta1/destination_rule_deepcopy.gen.go  |  42 ++
 .../v1beta1/destination_rule_json.gen.go      |  22 +
 proto.lock                                    | 120 ++++
 11 files changed, 1963 insertions(+), 350 deletions(-)

diff --git a/kubernetes/customresourcedefinitions.gen.yaml b/kubernetes/customresourcedefinitions.gen.yaml
index b1962609de3..99795312626 100644
--- a/kubernetes/customresourcedefinitions.gen.yaml
+++ b/kubernetes/customresourcedefinitions.gen.yaml
@@ -541,6 +541,34 @@ spec:
                                 failures before ejection occurs.
                               nullable: true
                               type: integer
+                            failurePercentageEjection:
+                              description: FailurePercent Algorithm for Grpc-xds proxyless
+                                for deciding if the host is an outlier or not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through failure percentage statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The minimum number of addresses in
+                                    order to perform failure percentage-based ejection.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to perform failure
+                                    percentage-based ejection for this address.
+                                  nullable: true
+                                  type: integer
+                                threshold:
+                                  description: The failure percentage to use when
+                                    determining failure percentage-based outlier detection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                             interval:
                               description: Time interval between ejection sweep analysis.
                               type: string
@@ -559,6 +587,35 @@ spec:
                               description: Determines whether to distinguish local
                                 origin failures from external errors.
                               type: boolean
+                            successRateEjection:
+                              description: SuccessRateEjection Algorithm for Grpc-xds
+                                proxyless for deciding if the host is an outlier or
+                                not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through success rate statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The number of addresses that must have
+                                    enough request volume to detect success rate outliers.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to include this
+                                    address in success rate based outlier detection.
+                                  nullable: true
+                                  type: integer
+                                stdevFactor:
+                                  description: This factor is used to determine the
+                                    ejection threshold for success rate outlier ejection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                           type: object
                         portLevelSettings:
                           description: Traffic policies specific to individual ports.
@@ -831,6 +888,39 @@ spec:
                                       originated failures before ejection occurs.
                                     nullable: true
                                     type: integer
+                                  failurePercentageEjection:
+                                    description: FailurePercent Algorithm for Grpc-xds
+                                      proxyless for deciding if the host is an outlier
+                                      or not.
+                                    properties:
+                                      enforcementPercentage:
+                                        description: The % chance that an address
+                                          will be actually ejected when an outlier
+                                          status is detected through failure percentage
+                                          statistics.
+                                        nullable: true
+                                        type: integer
+                                      minimumHosts:
+                                        description: The minimum number of addresses
+                                          in order to perform failure percentage-based
+                                          ejection.
+                                        nullable: true
+                                        type: integer
+                                      requestVolume:
+                                        description: The minimum number of total requests
+                                          that must be collected in one interval (as
+                                          defined by the interval duration above)
+                                          to perform failure percentage-based ejection
+                                          for this address.
+                                        nullable: true
+                                        type: integer
+                                      threshold:
+                                        description: The failure percentage to use
+                                          when determining failure percentage-based
+                                          outlier detection.
+                                        nullable: true
+                                        type: integer
+                                    type: object
                                   interval:
                                     description: Time interval between ejection sweep
                                       analysis.
@@ -851,6 +941,39 @@ spec:
                                     description: Determines whether to distinguish
                                       local origin failures from external errors.
                                     type: boolean
+                                  successRateEjection:
+                                    description: SuccessRateEjection Algorithm for
+                                      Grpc-xds proxyless for deciding if the host
+                                      is an outlier or not.
+                                    properties:
+                                      enforcementPercentage:
+                                        description: The % chance that an address
+                                          will be actually ejected when an outlier
+                                          status is detected through success rate
+                                          statistics.
+                                        nullable: true
+                                        type: integer
+                                      minimumHosts:
+                                        description: The number of addresses that
+                                          must have enough request volume to detect
+                                          success rate outliers.
+                                        nullable: true
+                                        type: integer
+                                      requestVolume:
+                                        description: The minimum number of total requests
+                                          that must be collected in one interval (as
+                                          defined by the interval duration above)
+                                          to include this address in success rate
+                                          based outlier detection.
+                                        nullable: true
+                                        type: integer
+                                      stdevFactor:
+                                        description: This factor is used to determine
+                                          the ejection threshold for success rate
+                                          outlier ejection.
+                                        nullable: true
+                                        type: integer
+                                    type: object
                                 type: object
                               port:
                                 description: Specifies the number of a port on the
@@ -1237,6 +1360,34 @@ spec:
                           failures before ejection occurs.
                         nullable: true
                         type: integer
+                      failurePercentageEjection:
+                        description: FailurePercent Algorithm for Grpc-xds proxyless
+                          for deciding if the host is an outlier or not.
+                        properties:
+                          enforcementPercentage:
+                            description: The % chance that an address will be actually
+                              ejected when an outlier status is detected through failure
+                              percentage statistics.
+                            nullable: true
+                            type: integer
+                          minimumHosts:
+                            description: The minimum number of addresses in order
+                              to perform failure percentage-based ejection.
+                            nullable: true
+                            type: integer
+                          requestVolume:
+                            description: The minimum number of total requests that
+                              must be collected in one interval (as defined by the
+                              interval duration above) to perform failure percentage-based
+                              ejection for this address.
+                            nullable: true
+                            type: integer
+                          threshold:
+                            description: The failure percentage to use when determining
+                              failure percentage-based outlier detection.
+                            nullable: true
+                            type: integer
+                        type: object
                       interval:
                         description: Time interval between ejection sweep analysis.
                         type: string
@@ -1255,6 +1406,34 @@ spec:
                         description: Determines whether to distinguish local origin
                           failures from external errors.
                         type: boolean
+                      successRateEjection:
+                        description: SuccessRateEjection Algorithm for Grpc-xds proxyless
+                          for deciding if the host is an outlier or not.
+                        properties:
+                          enforcementPercentage:
+                            description: The % chance that an address will be actually
+                              ejected when an outlier status is detected through success
+                              rate statistics.
+                            nullable: true
+                            type: integer
+                          minimumHosts:
+                            description: The number of addresses that must have enough
+                              request volume to detect success rate outliers.
+                            nullable: true
+                            type: integer
+                          requestVolume:
+                            description: The minimum number of total requests that
+                              must be collected in one interval (as defined by the
+                              interval duration above) to include this address in
+                              success rate based outlier detection.
+                            nullable: true
+                            type: integer
+                          stdevFactor:
+                            description: This factor is used to determine the ejection
+                              threshold for success rate outlier ejection.
+                            nullable: true
+                            type: integer
+                        type: object
                     type: object
                   portLevelSettings:
                     description: Traffic policies specific to individual ports.
@@ -1520,6 +1699,34 @@ spec:
                                 failures before ejection occurs.
                               nullable: true
                               type: integer
+                            failurePercentageEjection:
+                              description: FailurePercent Algorithm for Grpc-xds proxyless
+                                for deciding if the host is an outlier or not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through failure percentage statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The minimum number of addresses in
+                                    order to perform failure percentage-based ejection.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to perform failure
+                                    percentage-based ejection for this address.
+                                  nullable: true
+                                  type: integer
+                                threshold:
+                                  description: The failure percentage to use when
+                                    determining failure percentage-based outlier detection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                             interval:
                               description: Time interval between ejection sweep analysis.
                               type: string
@@ -1538,6 +1745,35 @@ spec:
                               description: Determines whether to distinguish local
                                 origin failures from external errors.
                               type: boolean
+                            successRateEjection:
+                              description: SuccessRateEjection Algorithm for Grpc-xds
+                                proxyless for deciding if the host is an outlier or
+                                not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through success rate statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The number of addresses that must have
+                                    enough request volume to detect success rate outliers.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to include this
+                                    address in success rate based outlier detection.
+                                  nullable: true
+                                  type: integer
+                                stdevFactor:
+                                  description: This factor is used to determine the
+                                    ejection threshold for success rate outlier ejection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                           type: object
                         port:
                           description: Specifies the number of a port on the destination
@@ -1988,6 +2224,34 @@ spec:
                                 failures before ejection occurs.
                               nullable: true
                               type: integer
+                            failurePercentageEjection:
+                              description: FailurePercent Algorithm for Grpc-xds proxyless
+                                for deciding if the host is an outlier or not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through failure percentage statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The minimum number of addresses in
+                                    order to perform failure percentage-based ejection.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to perform failure
+                                    percentage-based ejection for this address.
+                                  nullable: true
+                                  type: integer
+                                threshold:
+                                  description: The failure percentage to use when
+                                    determining failure percentage-based outlier detection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                             interval:
                               description: Time interval between ejection sweep analysis.
                               type: string
@@ -2006,6 +2270,35 @@ spec:
                               description: Determines whether to distinguish local
                                 origin failures from external errors.
                               type: boolean
+                            successRateEjection:
+                              description: SuccessRateEjection Algorithm for Grpc-xds
+                                proxyless for deciding if the host is an outlier or
+                                not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through success rate statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The number of addresses that must have
+                                    enough request volume to detect success rate outliers.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to include this
+                                    address in success rate based outlier detection.
+                                  nullable: true
+                                  type: integer
+                                stdevFactor:
+                                  description: This factor is used to determine the
+                                    ejection threshold for success rate outlier ejection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                           type: object
                         portLevelSettings:
                           description: Traffic policies specific to individual ports.
@@ -2278,6 +2571,39 @@ spec:
                                       originated failures before ejection occurs.
                                     nullable: true
                                     type: integer
+                                  failurePercentageEjection:
+                                    description: FailurePercent Algorithm for Grpc-xds
+                                      proxyless for deciding if the host is an outlier
+                                      or not.
+                                    properties:
+                                      enforcementPercentage:
+                                        description: The % chance that an address
+                                          will be actually ejected when an outlier
+                                          status is detected through failure percentage
+                                          statistics.
+                                        nullable: true
+                                        type: integer
+                                      minimumHosts:
+                                        description: The minimum number of addresses
+                                          in order to perform failure percentage-based
+                                          ejection.
+                                        nullable: true
+                                        type: integer
+                                      requestVolume:
+                                        description: The minimum number of total requests
+                                          that must be collected in one interval (as
+                                          defined by the interval duration above)
+                                          to perform failure percentage-based ejection
+                                          for this address.
+                                        nullable: true
+                                        type: integer
+                                      threshold:
+                                        description: The failure percentage to use
+                                          when determining failure percentage-based
+                                          outlier detection.
+                                        nullable: true
+                                        type: integer
+                                    type: object
                                   interval:
                                     description: Time interval between ejection sweep
                                       analysis.
@@ -2298,6 +2624,39 @@ spec:
                                     description: Determines whether to distinguish
                                       local origin failures from external errors.
                                     type: boolean
+                                  successRateEjection:
+                                    description: SuccessRateEjection Algorithm for
+                                      Grpc-xds proxyless for deciding if the host
+                                      is an outlier or not.
+                                    properties:
+                                      enforcementPercentage:
+                                        description: The % chance that an address
+                                          will be actually ejected when an outlier
+                                          status is detected through success rate
+                                          statistics.
+                                        nullable: true
+                                        type: integer
+                                      minimumHosts:
+                                        description: The number of addresses that
+                                          must have enough request volume to detect
+                                          success rate outliers.
+                                        nullable: true
+                                        type: integer
+                                      requestVolume:
+                                        description: The minimum number of total requests
+                                          that must be collected in one interval (as
+                                          defined by the interval duration above)
+                                          to include this address in success rate
+                                          based outlier detection.
+                                        nullable: true
+                                        type: integer
+                                      stdevFactor:
+                                        description: This factor is used to determine
+                                          the ejection threshold for success rate
+                                          outlier ejection.
+                                        nullable: true
+                                        type: integer
+                                    type: object
                                 type: object
                               port:
                                 description: Specifies the number of a port on the
@@ -2684,6 +3043,34 @@ spec:
                           failures before ejection occurs.
                         nullable: true
                         type: integer
+                      failurePercentageEjection:
+                        description: FailurePercent Algorithm for Grpc-xds proxyless
+                          for deciding if the host is an outlier or not.
+                        properties:
+                          enforcementPercentage:
+                            description: The % chance that an address will be actually
+                              ejected when an outlier status is detected through failure
+                              percentage statistics.
+                            nullable: true
+                            type: integer
+                          minimumHosts:
+                            description: The minimum number of addresses in order
+                              to perform failure percentage-based ejection.
+                            nullable: true
+                            type: integer
+                          requestVolume:
+                            description: The minimum number of total requests that
+                              must be collected in one interval (as defined by the
+                              interval duration above) to perform failure percentage-based
+                              ejection for this address.
+                            nullable: true
+                            type: integer
+                          threshold:
+                            description: The failure percentage to use when determining
+                              failure percentage-based outlier detection.
+                            nullable: true
+                            type: integer
+                        type: object
                       interval:
                         description: Time interval between ejection sweep analysis.
                         type: string
@@ -2702,6 +3089,34 @@ spec:
                         description: Determines whether to distinguish local origin
                           failures from external errors.
                         type: boolean
+                      successRateEjection:
+                        description: SuccessRateEjection Algorithm for Grpc-xds proxyless
+                          for deciding if the host is an outlier or not.
+                        properties:
+                          enforcementPercentage:
+                            description: The % chance that an address will be actually
+                              ejected when an outlier status is detected through success
+                              rate statistics.
+                            nullable: true
+                            type: integer
+                          minimumHosts:
+                            description: The number of addresses that must have enough
+                              request volume to detect success rate outliers.
+                            nullable: true
+                            type: integer
+                          requestVolume:
+                            description: The minimum number of total requests that
+                              must be collected in one interval (as defined by the
+                              interval duration above) to include this address in
+                              success rate based outlier detection.
+                            nullable: true
+                            type: integer
+                          stdevFactor:
+                            description: This factor is used to determine the ejection
+                              threshold for success rate outlier ejection.
+                            nullable: true
+                            type: integer
+                        type: object
                     type: object
                   portLevelSettings:
                     description: Traffic policies specific to individual ports.
@@ -2967,6 +3382,34 @@ spec:
                                 failures before ejection occurs.
                               nullable: true
                               type: integer
+                            failurePercentageEjection:
+                              description: FailurePercent Algorithm for Grpc-xds proxyless
+                                for deciding if the host is an outlier or not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through failure percentage statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The minimum number of addresses in
+                                    order to perform failure percentage-based ejection.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to perform failure
+                                    percentage-based ejection for this address.
+                                  nullable: true
+                                  type: integer
+                                threshold:
+                                  description: The failure percentage to use when
+                                    determining failure percentage-based outlier detection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                             interval:
                               description: Time interval between ejection sweep analysis.
                               type: string
@@ -2985,6 +3428,35 @@ spec:
                               description: Determines whether to distinguish local
                                 origin failures from external errors.
                               type: boolean
+                            successRateEjection:
+                              description: SuccessRateEjection Algorithm for Grpc-xds
+                                proxyless for deciding if the host is an outlier or
+                                not.
+                              properties:
+                                enforcementPercentage:
+                                  description: The % chance that an address will be
+                                    actually ejected when an outlier status is detected
+                                    through success rate statistics.
+                                  nullable: true
+                                  type: integer
+                                minimumHosts:
+                                  description: The number of addresses that must have
+                                    enough request volume to detect success rate outliers.
+                                  nullable: true
+                                  type: integer
+                                requestVolume:
+                                  description: The minimum number of total requests
+                                    that must be collected in one interval (as defined
+                                    by the interval duration above) to include this
+                                    address in success rate based outlier detection.
+                                  nullable: true
+                                  type: integer
+                                stdevFactor:
+                                  description: This factor is used to determine the
+                                    ejection threshold for success rate outlier ejection.
+                                  nullable: true
+                                  type: integer
+                              type: object
                           type: object
                         port:
                           description: Specifies the number of a port on the destination
diff --git a/networking/v1alpha3/destination_rule.pb.go b/networking/v1alpha3/destination_rule.pb.go
index 890e325babd..fdd53be7dbe 100644
--- a/networking/v1alpha3/destination_rule.pb.go
+++ b/networking/v1alpha3/destination_rule.pb.go
@@ -429,7 +429,7 @@ func (x ClientTLSSettings_TLSmode) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use ClientTLSSettings_TLSmode.Descriptor instead.
 func (ClientTLSSettings_TLSmode) EnumDescriptor() ([]byte, []int) {
-	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{6, 0}
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{8, 0}
 }
 
 // DestinationRule defines policies that apply to traffic intended for a service
@@ -1281,6 +1281,12 @@ type OutlierDetection struct {
 	// disabled by setting it to 0%. The default is 0% as it's not typically
 	// applicable in k8s environments with few pods per service.
 	MinHealthPercent int32 `protobuf:"varint,5,opt,name=min_health_percent,json=minHealthPercent,proto3" json:"min_health_percent,omitempty"`
+	// FailurePercent Algorithm for Grpc-xds proxyless for deciding
+	// if the host is an outlier or not.
+	FailurePercentageEjection *FailurePercentageEjection `protobuf:"bytes,10,opt,name=failure_percentage_ejection,json=failurePercentageEjection,proto3" json:"failure_percentage_ejection,omitempty"`
+	// SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
+	// if the host is an outlier or not.
+	SuccessRateEjection *SuccessRateEjection `protobuf:"bytes,11,opt,name=success_rate_ejection,json=successRateEjection,proto3" json:"success_rate_ejection,omitempty"`
 }
 
 func (x *OutlierDetection) Reset() {
@@ -1379,6 +1385,202 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 {
 	return 0
 }
 
+func (x *OutlierDetection) GetFailurePercentageEjection() *FailurePercentageEjection {
+	if x != nil {
+		return x.FailurePercentageEjection
+	}
+	return nil
+}
+
+func (x *OutlierDetection) GetSuccessRateEjection() *SuccessRateEjection {
+	if x != nil {
+		return x.SuccessRateEjection
+	}
+	return nil
+}
+
+// Parameters for the failure percentage algorithm.
+// This algorithm ejects individual endpoints whose failure rate is greater than
+// some threshold, independently of any other endpoint
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+type FailurePercentageEjection struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The failure percentage to use when determining failure percentage-based outlier detection. If
+	// the failure percentage of a given address is greater than or equal to this value, it will be
+	// ejected.
+	Threshold *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=threshold,proto3" json:"threshold,omitempty"`
+	// The % chance that an address will be actually ejected when an outlier status is detected through
+	// failure percentage statistics. This setting can be used to disable ejection or to ramp it up
+	// slowly.
+	EnforcementPercentage *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=enforcement_percentage,json=enforcementPercentage,proto3" json:"enforcement_percentage,omitempty"`
+	// The minimum number of addresses in order to perform failure percentage-based ejection.
+	// If the total number of addresses is less than this value, failure percentage-based
+	// ejection will not be performed.
+	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
+	// The minimum number of total requests that must be collected in one interval (as defined by the
+	// interval duration above) to perform failure percentage-based ejection for this address. If the
+	// volume is lower than this setting, failure percentage-based ejection will not be performed for
+	// this host.
+	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
+}
+
+func (x *FailurePercentageEjection) Reset() {
+	*x = FailurePercentageEjection{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FailurePercentageEjection) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FailurePercentageEjection) ProtoMessage() {}
+
+func (x *FailurePercentageEjection) ProtoReflect() protoreflect.Message {
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FailurePercentageEjection.ProtoReflect.Descriptor instead.
+func (*FailurePercentageEjection) Descriptor() ([]byte, []int) {
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *FailurePercentageEjection) GetThreshold() *wrappers.UInt32Value {
+	if x != nil {
+		return x.Threshold
+	}
+	return nil
+}
+
+func (x *FailurePercentageEjection) GetEnforcementPercentage() *wrappers.UInt32Value {
+	if x != nil {
+		return x.EnforcementPercentage
+	}
+	return nil
+}
+
+func (x *FailurePercentageEjection) GetMinimumHosts() *wrappers.UInt32Value {
+	if x != nil {
+		return x.MinimumHosts
+	}
+	return nil
+}
+
+func (x *FailurePercentageEjection) GetRequestVolume() *wrappers.UInt32Value {
+	if x != nil {
+		return x.RequestVolume
+	}
+	return nil
+}
+
+// Parameters for the success rate ejection algorithm.
+// This algorithm monitors the request success rate for all endpoints and
+// ejects individual endpoints whose success rates are statistical outliers.
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+type SuccessRateEjection struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// This factor is used to determine the ejection threshold for success rate
+	// outlier ejection. The ejection threshold is the difference between the
+	// mean success rate, and the product of this factor and the standard
+	// deviation of the mean success rate: mean - (stdev *
+	// success_rate_stdev_factor). This factor is divided by a thousand to get a
+	// double. That is, if the desired factor is 1.9, the runtime value should
+	// be 1900.
+	StdevFactor *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=stdev_factor,json=stdevFactor,proto3" json:"stdev_factor,omitempty"`
+	// The % chance that an address will be actually ejected when an outlier status
+	// is detected through success rate statistics. This setting can be used to
+	// disable ejection or to ramp it up slowly.
+	EnforcementPercentage *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=enforcement_percentage,json=enforcementPercentage,proto3" json:"enforcement_percentage,omitempty"`
+	// The number of addresses that must have enough request volume to
+	// detect success rate outliers. If the number of addresses is less than this
+	// setting, outlier detection via success rate statistics is not performed
+	// for any addresses.
+	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
+	// The minimum number of total requests that must be collected in one
+	// interval (as defined by the interval duration above) to include this address
+	// in success rate based outlier detection. If the volume is lower than this
+	// setting, outlier detection via success rate statistics is not performed
+	// for that address.
+	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
+}
+
+func (x *SuccessRateEjection) Reset() {
+	*x = SuccessRateEjection{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SuccessRateEjection) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SuccessRateEjection) ProtoMessage() {}
+
+func (x *SuccessRateEjection) ProtoReflect() protoreflect.Message {
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SuccessRateEjection.ProtoReflect.Descriptor instead.
+func (*SuccessRateEjection) Descriptor() ([]byte, []int) {
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *SuccessRateEjection) GetStdevFactor() *wrappers.UInt32Value {
+	if x != nil {
+		return x.StdevFactor
+	}
+	return nil
+}
+
+func (x *SuccessRateEjection) GetEnforcementPercentage() *wrappers.UInt32Value {
+	if x != nil {
+		return x.EnforcementPercentage
+	}
+	return nil
+}
+
+func (x *SuccessRateEjection) GetMinimumHosts() *wrappers.UInt32Value {
+	if x != nil {
+		return x.MinimumHosts
+	}
+	return nil
+}
+
+func (x *SuccessRateEjection) GetRequestVolume() *wrappers.UInt32Value {
+	if x != nil {
+		return x.RequestVolume
+	}
+	return nil
+}
+
 // SSL/TLS related settings for upstream connections. See Envoy's [TLS
 // context](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto.html#common-tls-configuration)
 // for more details. These settings are common to both HTTP and TCP upstreams.
@@ -1584,7 +1786,7 @@ type ClientTLSSettings struct {
 func (x *ClientTLSSettings) Reset() {
 	*x = ClientTLSSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[6]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1597,7 +1799,7 @@ func (x *ClientTLSSettings) String() string {
 func (*ClientTLSSettings) ProtoMessage() {}
 
 func (x *ClientTLSSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[6]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1610,7 +1812,7 @@ func (x *ClientTLSSettings) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ClientTLSSettings.ProtoReflect.Descriptor instead.
 func (*ClientTLSSettings) Descriptor() ([]byte, []int) {
-	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{6}
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *ClientTLSSettings) GetMode() ClientTLSSettings_TLSmode {
@@ -1804,7 +2006,7 @@ type LocalityLoadBalancerSetting struct {
 func (x *LocalityLoadBalancerSetting) Reset() {
 	*x = LocalityLoadBalancerSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[7]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1817,7 +2019,7 @@ func (x *LocalityLoadBalancerSetting) String() string {
 func (*LocalityLoadBalancerSetting) ProtoMessage() {}
 
 func (x *LocalityLoadBalancerSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[7]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1830,7 +2032,7 @@ func (x *LocalityLoadBalancerSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use LocalityLoadBalancerSetting.ProtoReflect.Descriptor instead.
 func (*LocalityLoadBalancerSetting) Descriptor() ([]byte, []int) {
-	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{7}
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *LocalityLoadBalancerSetting) GetDistribute() []*LocalityLoadBalancerSetting_Distribute {
@@ -1883,7 +2085,7 @@ type TrafficPolicy_PortTrafficPolicy struct {
 func (x *TrafficPolicy_PortTrafficPolicy) Reset() {
 	*x = TrafficPolicy_PortTrafficPolicy{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[8]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1896,7 +2098,7 @@ func (x *TrafficPolicy_PortTrafficPolicy) String() string {
 func (*TrafficPolicy_PortTrafficPolicy) ProtoMessage() {}
 
 func (x *TrafficPolicy_PortTrafficPolicy) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[8]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1971,7 +2173,7 @@ type TrafficPolicy_TunnelSettings struct {
 func (x *TrafficPolicy_TunnelSettings) Reset() {
 	*x = TrafficPolicy_TunnelSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[9]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1984,7 +2186,7 @@ func (x *TrafficPolicy_TunnelSettings) String() string {
 func (*TrafficPolicy_TunnelSettings) ProtoMessage() {}
 
 func (x *TrafficPolicy_TunnelSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[9]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2071,7 +2273,7 @@ type LoadBalancerSettings_ConsistentHashLB struct {
 func (x *LoadBalancerSettings_ConsistentHashLB) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[11]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2084,7 +2286,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[11]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2237,7 +2439,7 @@ type LoadBalancerSettings_ConsistentHashLB_RingHash struct {
 func (x *LoadBalancerSettings_ConsistentHashLB_RingHash) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB_RingHash{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[12]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2250,7 +2452,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB_RingHash) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB_RingHash) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB_RingHash) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[12]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2287,7 +2489,7 @@ type LoadBalancerSettings_ConsistentHashLB_MagLev struct {
 func (x *LoadBalancerSettings_ConsistentHashLB_MagLev) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB_MagLev{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[13]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2300,7 +2502,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB_MagLev) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB_MagLev) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB_MagLev) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[13]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2343,7 +2545,7 @@ type LoadBalancerSettings_ConsistentHashLB_HTTPCookie struct {
 func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB_HTTPCookie{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[14]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2356,7 +2558,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB_HTTPCookie) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[14]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2415,7 +2617,7 @@ type ConnectionPoolSettings_TCPSettings struct {
 func (x *ConnectionPoolSettings_TCPSettings) Reset() {
 	*x = ConnectionPoolSettings_TCPSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[15]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2428,7 +2630,7 @@ func (x *ConnectionPoolSettings_TCPSettings) String() string {
 func (*ConnectionPoolSettings_TCPSettings) ProtoMessage() {}
 
 func (x *ConnectionPoolSettings_TCPSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[15]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2517,7 +2719,7 @@ type ConnectionPoolSettings_HTTPSettings struct {
 func (x *ConnectionPoolSettings_HTTPSettings) Reset() {
 	*x = ConnectionPoolSettings_HTTPSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[16]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2530,7 +2732,7 @@ func (x *ConnectionPoolSettings_HTTPSettings) String() string {
 func (*ConnectionPoolSettings_HTTPSettings) ProtoMessage() {}
 
 func (x *ConnectionPoolSettings_HTTPSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[16]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2625,7 +2827,7 @@ type ConnectionPoolSettings_TCPSettings_TcpKeepalive struct {
 func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) Reset() {
 	*x = ConnectionPoolSettings_TCPSettings_TcpKeepalive{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[17]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2638,7 +2840,7 @@ func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) String() string {
 func (*ConnectionPoolSettings_TCPSettings_TcpKeepalive) ProtoMessage() {}
 
 func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[17]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2701,7 +2903,7 @@ type LocalityLoadBalancerSetting_Distribute struct {
 func (x *LocalityLoadBalancerSetting_Distribute) Reset() {
 	*x = LocalityLoadBalancerSetting_Distribute{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[18]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2714,7 +2916,7 @@ func (x *LocalityLoadBalancerSetting_Distribute) String() string {
 func (*LocalityLoadBalancerSetting_Distribute) ProtoMessage() {}
 
 func (x *LocalityLoadBalancerSetting_Distribute) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[18]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2727,7 +2929,7 @@ func (x *LocalityLoadBalancerSetting_Distribute) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use LocalityLoadBalancerSetting_Distribute.ProtoReflect.Descriptor instead.
 func (*LocalityLoadBalancerSetting_Distribute) Descriptor() ([]byte, []int) {
-	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{7, 0}
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{9, 0}
 }
 
 func (x *LocalityLoadBalancerSetting_Distribute) GetFrom() string {
@@ -2766,7 +2968,7 @@ type LocalityLoadBalancerSetting_Failover struct {
 func (x *LocalityLoadBalancerSetting_Failover) Reset() {
 	*x = LocalityLoadBalancerSetting_Failover{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[19]
+		mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2779,7 +2981,7 @@ func (x *LocalityLoadBalancerSetting_Failover) String() string {
 func (*LocalityLoadBalancerSetting_Failover) ProtoMessage() {}
 
 func (x *LocalityLoadBalancerSetting_Failover) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[19]
+	mi := &file_networking_v1alpha3_destination_rule_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2792,7 +2994,7 @@ func (x *LocalityLoadBalancerSetting_Failover) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use LocalityLoadBalancerSetting_Failover.ProtoReflect.Descriptor instead.
 func (*LocalityLoadBalancerSetting_Failover) Descriptor() ([]byte, []int) {
-	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{7, 1}
+	return file_networking_v1alpha3_destination_rule_proto_rawDescGZIP(), []int{9, 1}
 }
 
 func (x *LocalityLoadBalancerSetting_Failover) GetFrom() string {
@@ -3085,7 +3287,7 @@ var file_networking_v1alpha3_destination_rule_proto_rawDesc = []byte{
 	0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44,
 	0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x4f, 0x5f, 0x4e,
 	0x4f, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07,
-	0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0x8a, 0x05, 0x0a, 0x10, 0x4f, 0x75,
+	0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0xe4, 0x06, 0x0a, 0x10, 0x4f, 0x75,
 	0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31,
 	0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x72,
 	0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11,
@@ -3126,73 +3328,126 @@ var file_networking_v1alpha3_destination_rule_proto_rawDesc = []byte{
 	0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6e, 0x5f,
 	0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05,
 	0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50,
-	0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xcd, 0x03, 0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, 0x6e,
-	0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x48, 0x0a, 0x04,
-	0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x69, 0x73, 0x74,
-	0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53,
-	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65,
-	0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
-	0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
-	0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65,
-	0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76,
-	0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72,
-	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12,
-	0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e,
-	0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a,
-	0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20,
-	0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e,
-	0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75,
-	0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65,
-	0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12,
-	0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06,
-	0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55,
-	0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55,
-	0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa5, 0x04, 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c,
-	0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53,
-	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x61, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69,
-	0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x73, 0x74,
-	0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c,
-	0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69,
-	0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64,
-	0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x66, 0x61, 0x69,
-	0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73,
+	0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x74, 0x0a, 0x1b, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72,
+	0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x6a, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x69, 0x73,
 	0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
-	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79,
-	0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74,
-	0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x66, 0x61,
-	0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76,
-	0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28,
-	0x09, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72,
-	0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65,
-	0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0xb2, 0x01, 0x0a, 0x0a, 0x44, 0x69,
-	0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x59, 0x0a, 0x02,
-	0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f,
-	0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61,
-	0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
-	0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35, 0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e,
-	0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72,
-	0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e,
-	0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x22,
-	0x5a, 0x20, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50,
+	0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x52, 0x19, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e,
+	0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x15,
+	0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6a, 0x65,
+	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x73,
+	0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52,
+	0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x75, 0x63,
+	0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x22, 0xb4, 0x02, 0x0a, 0x19, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x65, 0x72, 0x63,
+	0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a,
+	0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+	0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x16, 0x65, 0x6e,
+	0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e,
+	0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63,
+	0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12,
+	0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56,
+	0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x48, 0x6f, 0x73,
+	0x74, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x6f,
+	0x6c, 0x75, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e,
+	0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x63, 0x63,
+	0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x3f, 0x0a, 0x0c, 0x73, 0x74, 0x64, 0x65, 0x76, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61,
+	0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x74, 0x64, 0x65, 0x76, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72,
+	0x12, 0x53, 0x0a, 0x16, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f,
+	0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15,
+	0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x63, 0x65,
+	0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d,
+	0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69,
+	0x6d, 0x75, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
+	0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d,
+	0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, 0xcd, 0x03,
+	0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69,
+	0x6e, 0x67, 0x73, 0x12, 0x48, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x34, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6c,
+	0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e,
+	0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a,
+	0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
+	0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e,
+	0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
+	0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a,
+	0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66,
+	0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e,
+	0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e,
+	0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a,
+	0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73,
+	0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c, 0x0a,
+	0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76,
+	0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f,
+	0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72,
+	0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07, 0x54,
+	0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c,
+	0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12,
+	0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49,
+	0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa5, 0x04,
+	0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61,
+	0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x61, 0x0a,
+	0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28,
+	0x0b, 0x32, 0x41, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
+	0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f,
+	0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
+	0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69,
+	0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+	0x12, 0x5b, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c,
+	0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e,
+	0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f,
+	0x76, 0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a,
+	0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69,
+	0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76,
+	0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e,
+	0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
+	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f,
+	0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64,
+	0x1a, 0xb2, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12,
+	0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66,
+	0x72, 0x6f, 0x6d, 0x12, 0x59, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x49, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69,
+	0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61,
+	0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72,
+	0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
+	0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35,
+	0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65,
+	0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x22, 0x5a, 0x20, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69,
+	0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
+	0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
+	0x33,
 }
 
 var (
@@ -3208,7 +3463,7 @@ func file_networking_v1alpha3_destination_rule_proto_rawDescGZIP() []byte {
 }
 
 var file_networking_v1alpha3_destination_rule_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_networking_v1alpha3_destination_rule_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
+var file_networking_v1alpha3_destination_rule_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
 var file_networking_v1alpha3_destination_rule_proto_goTypes = []interface{}{
 	(LoadBalancerSettings_SimpleLB)(0),                       // 0: istio.networking.v1alpha3.LoadBalancerSettings.SimpleLB
 	(ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy)(0), // 1: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
@@ -3219,77 +3474,89 @@ var file_networking_v1alpha3_destination_rule_proto_goTypes = []interface{}{
 	(*LoadBalancerSettings)(nil),                             // 6: istio.networking.v1alpha3.LoadBalancerSettings
 	(*ConnectionPoolSettings)(nil),                           // 7: istio.networking.v1alpha3.ConnectionPoolSettings
 	(*OutlierDetection)(nil),                                 // 8: istio.networking.v1alpha3.OutlierDetection
-	(*ClientTLSSettings)(nil),                                // 9: istio.networking.v1alpha3.ClientTLSSettings
-	(*LocalityLoadBalancerSetting)(nil),                      // 10: istio.networking.v1alpha3.LocalityLoadBalancerSetting
-	(*TrafficPolicy_PortTrafficPolicy)(nil),                  // 11: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy
-	(*TrafficPolicy_TunnelSettings)(nil),                     // 12: istio.networking.v1alpha3.TrafficPolicy.TunnelSettings
-	nil,                                                      // 13: istio.networking.v1alpha3.Subset.LabelsEntry
-	(*LoadBalancerSettings_ConsistentHashLB)(nil),            // 14: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB
-	(*LoadBalancerSettings_ConsistentHashLB_RingHash)(nil),   // 15: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.RingHash
-	(*LoadBalancerSettings_ConsistentHashLB_MagLev)(nil),     // 16: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.MagLev
-	(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie)(nil), // 17: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
-	(*ConnectionPoolSettings_TCPSettings)(nil),               // 18: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings
-	(*ConnectionPoolSettings_HTTPSettings)(nil),              // 19: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings
-	(*ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil),  // 20: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive
-	(*LocalityLoadBalancerSetting_Distribute)(nil),           // 21: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute
-	(*LocalityLoadBalancerSetting_Failover)(nil),             // 22: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Failover
-	nil,                              // 23: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.ToEntry
-	(*v1beta1.WorkloadSelector)(nil), // 24: istio.type.v1beta1.WorkloadSelector
-	(*duration.Duration)(nil),        // 25: google.protobuf.Duration
-	(*wrappers.UInt32Value)(nil),     // 26: google.protobuf.UInt32Value
-	(*wrappers.BoolValue)(nil),       // 27: google.protobuf.BoolValue
-	(*PortSelector)(nil),             // 28: istio.networking.v1alpha3.PortSelector
+	(*FailurePercentageEjection)(nil),                        // 9: istio.networking.v1alpha3.FailurePercentageEjection
+	(*SuccessRateEjection)(nil),                              // 10: istio.networking.v1alpha3.SuccessRateEjection
+	(*ClientTLSSettings)(nil),                                // 11: istio.networking.v1alpha3.ClientTLSSettings
+	(*LocalityLoadBalancerSetting)(nil),                      // 12: istio.networking.v1alpha3.LocalityLoadBalancerSetting
+	(*TrafficPolicy_PortTrafficPolicy)(nil),                  // 13: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy
+	(*TrafficPolicy_TunnelSettings)(nil),                     // 14: istio.networking.v1alpha3.TrafficPolicy.TunnelSettings
+	nil,                                                      // 15: istio.networking.v1alpha3.Subset.LabelsEntry
+	(*LoadBalancerSettings_ConsistentHashLB)(nil),            // 16: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB
+	(*LoadBalancerSettings_ConsistentHashLB_RingHash)(nil),   // 17: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.RingHash
+	(*LoadBalancerSettings_ConsistentHashLB_MagLev)(nil),     // 18: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.MagLev
+	(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie)(nil), // 19: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
+	(*ConnectionPoolSettings_TCPSettings)(nil),               // 20: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings
+	(*ConnectionPoolSettings_HTTPSettings)(nil),              // 21: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings
+	(*ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil),  // 22: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive
+	(*LocalityLoadBalancerSetting_Distribute)(nil),           // 23: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute
+	(*LocalityLoadBalancerSetting_Failover)(nil),             // 24: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Failover
+	nil,                              // 25: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.ToEntry
+	(*v1beta1.WorkloadSelector)(nil), // 26: istio.type.v1beta1.WorkloadSelector
+	(*duration.Duration)(nil),        // 27: google.protobuf.Duration
+	(*wrappers.UInt32Value)(nil),     // 28: google.protobuf.UInt32Value
+	(*wrappers.BoolValue)(nil),       // 29: google.protobuf.BoolValue
+	(*PortSelector)(nil),             // 30: istio.networking.v1alpha3.PortSelector
 }
 var file_networking_v1alpha3_destination_rule_proto_depIdxs = []int32{
 	4,  // 0: istio.networking.v1alpha3.DestinationRule.traffic_policy:type_name -> istio.networking.v1alpha3.TrafficPolicy
 	5,  // 1: istio.networking.v1alpha3.DestinationRule.subsets:type_name -> istio.networking.v1alpha3.Subset
-	24, // 2: istio.networking.v1alpha3.DestinationRule.workload_selector:type_name -> istio.type.v1beta1.WorkloadSelector
+	26, // 2: istio.networking.v1alpha3.DestinationRule.workload_selector:type_name -> istio.type.v1beta1.WorkloadSelector
 	6,  // 3: istio.networking.v1alpha3.TrafficPolicy.load_balancer:type_name -> istio.networking.v1alpha3.LoadBalancerSettings
 	7,  // 4: istio.networking.v1alpha3.TrafficPolicy.connection_pool:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings
 	8,  // 5: istio.networking.v1alpha3.TrafficPolicy.outlier_detection:type_name -> istio.networking.v1alpha3.OutlierDetection
-	9,  // 6: istio.networking.v1alpha3.TrafficPolicy.tls:type_name -> istio.networking.v1alpha3.ClientTLSSettings
-	11, // 7: istio.networking.v1alpha3.TrafficPolicy.port_level_settings:type_name -> istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy
-	12, // 8: istio.networking.v1alpha3.TrafficPolicy.tunnel:type_name -> istio.networking.v1alpha3.TrafficPolicy.TunnelSettings
-	13, // 9: istio.networking.v1alpha3.Subset.labels:type_name -> istio.networking.v1alpha3.Subset.LabelsEntry
+	11, // 6: istio.networking.v1alpha3.TrafficPolicy.tls:type_name -> istio.networking.v1alpha3.ClientTLSSettings
+	13, // 7: istio.networking.v1alpha3.TrafficPolicy.port_level_settings:type_name -> istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy
+	14, // 8: istio.networking.v1alpha3.TrafficPolicy.tunnel:type_name -> istio.networking.v1alpha3.TrafficPolicy.TunnelSettings
+	15, // 9: istio.networking.v1alpha3.Subset.labels:type_name -> istio.networking.v1alpha3.Subset.LabelsEntry
 	4,  // 10: istio.networking.v1alpha3.Subset.traffic_policy:type_name -> istio.networking.v1alpha3.TrafficPolicy
 	0,  // 11: istio.networking.v1alpha3.LoadBalancerSettings.simple:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.SimpleLB
-	14, // 12: istio.networking.v1alpha3.LoadBalancerSettings.consistent_hash:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB
-	10, // 13: istio.networking.v1alpha3.LoadBalancerSettings.locality_lb_setting:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting
-	25, // 14: istio.networking.v1alpha3.LoadBalancerSettings.warmup_duration_secs:type_name -> google.protobuf.Duration
-	18, // 15: istio.networking.v1alpha3.ConnectionPoolSettings.tcp:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings
-	19, // 16: istio.networking.v1alpha3.ConnectionPoolSettings.http:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings
-	26, // 17: istio.networking.v1alpha3.OutlierDetection.consecutive_local_origin_failures:type_name -> google.protobuf.UInt32Value
-	26, // 18: istio.networking.v1alpha3.OutlierDetection.consecutive_gateway_errors:type_name -> google.protobuf.UInt32Value
-	26, // 19: istio.networking.v1alpha3.OutlierDetection.consecutive_5xx_errors:type_name -> google.protobuf.UInt32Value
-	25, // 20: istio.networking.v1alpha3.OutlierDetection.interval:type_name -> google.protobuf.Duration
-	25, // 21: istio.networking.v1alpha3.OutlierDetection.base_ejection_time:type_name -> google.protobuf.Duration
-	2,  // 22: istio.networking.v1alpha3.ClientTLSSettings.mode:type_name -> istio.networking.v1alpha3.ClientTLSSettings.TLSmode
-	27, // 23: istio.networking.v1alpha3.ClientTLSSettings.insecure_skip_verify:type_name -> google.protobuf.BoolValue
-	21, // 24: istio.networking.v1alpha3.LocalityLoadBalancerSetting.distribute:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute
-	22, // 25: istio.networking.v1alpha3.LocalityLoadBalancerSetting.failover:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Failover
-	27, // 26: istio.networking.v1alpha3.LocalityLoadBalancerSetting.enabled:type_name -> google.protobuf.BoolValue
-	28, // 27: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.port:type_name -> istio.networking.v1alpha3.PortSelector
-	6,  // 28: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.load_balancer:type_name -> istio.networking.v1alpha3.LoadBalancerSettings
-	7,  // 29: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.connection_pool:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings
-	8,  // 30: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.outlier_detection:type_name -> istio.networking.v1alpha3.OutlierDetection
-	9,  // 31: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.tls:type_name -> istio.networking.v1alpha3.ClientTLSSettings
-	17, // 32: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.http_cookie:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
-	15, // 33: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.ring_hash:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.RingHash
-	16, // 34: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.maglev:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.MagLev
-	25, // 35: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration
-	25, // 36: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration
-	20, // 37: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive
-	25, // 38: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.max_connection_duration:type_name -> google.protobuf.Duration
-	25, // 39: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration
-	1,  // 40: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
-	25, // 41: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration
-	25, // 42: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration
-	23, // 43: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.ToEntry
-	44, // [44:44] is the sub-list for method output_type
-	44, // [44:44] is the sub-list for method input_type
-	44, // [44:44] is the sub-list for extension type_name
-	44, // [44:44] is the sub-list for extension extendee
-	0,  // [0:44] is the sub-list for field type_name
+	16, // 12: istio.networking.v1alpha3.LoadBalancerSettings.consistent_hash:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB
+	12, // 13: istio.networking.v1alpha3.LoadBalancerSettings.locality_lb_setting:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting
+	27, // 14: istio.networking.v1alpha3.LoadBalancerSettings.warmup_duration_secs:type_name -> google.protobuf.Duration
+	20, // 15: istio.networking.v1alpha3.ConnectionPoolSettings.tcp:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings
+	21, // 16: istio.networking.v1alpha3.ConnectionPoolSettings.http:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings
+	28, // 17: istio.networking.v1alpha3.OutlierDetection.consecutive_local_origin_failures:type_name -> google.protobuf.UInt32Value
+	28, // 18: istio.networking.v1alpha3.OutlierDetection.consecutive_gateway_errors:type_name -> google.protobuf.UInt32Value
+	28, // 19: istio.networking.v1alpha3.OutlierDetection.consecutive_5xx_errors:type_name -> google.protobuf.UInt32Value
+	27, // 20: istio.networking.v1alpha3.OutlierDetection.interval:type_name -> google.protobuf.Duration
+	27, // 21: istio.networking.v1alpha3.OutlierDetection.base_ejection_time:type_name -> google.protobuf.Duration
+	9,  // 22: istio.networking.v1alpha3.OutlierDetection.failure_percentage_ejection:type_name -> istio.networking.v1alpha3.FailurePercentageEjection
+	10, // 23: istio.networking.v1alpha3.OutlierDetection.success_rate_ejection:type_name -> istio.networking.v1alpha3.SuccessRateEjection
+	28, // 24: istio.networking.v1alpha3.FailurePercentageEjection.threshold:type_name -> google.protobuf.UInt32Value
+	28, // 25: istio.networking.v1alpha3.FailurePercentageEjection.enforcement_percentage:type_name -> google.protobuf.UInt32Value
+	28, // 26: istio.networking.v1alpha3.FailurePercentageEjection.minimum_hosts:type_name -> google.protobuf.UInt32Value
+	28, // 27: istio.networking.v1alpha3.FailurePercentageEjection.request_volume:type_name -> google.protobuf.UInt32Value
+	28, // 28: istio.networking.v1alpha3.SuccessRateEjection.stdev_factor:type_name -> google.protobuf.UInt32Value
+	28, // 29: istio.networking.v1alpha3.SuccessRateEjection.enforcement_percentage:type_name -> google.protobuf.UInt32Value
+	28, // 30: istio.networking.v1alpha3.SuccessRateEjection.minimum_hosts:type_name -> google.protobuf.UInt32Value
+	28, // 31: istio.networking.v1alpha3.SuccessRateEjection.request_volume:type_name -> google.protobuf.UInt32Value
+	2,  // 32: istio.networking.v1alpha3.ClientTLSSettings.mode:type_name -> istio.networking.v1alpha3.ClientTLSSettings.TLSmode
+	29, // 33: istio.networking.v1alpha3.ClientTLSSettings.insecure_skip_verify:type_name -> google.protobuf.BoolValue
+	23, // 34: istio.networking.v1alpha3.LocalityLoadBalancerSetting.distribute:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute
+	24, // 35: istio.networking.v1alpha3.LocalityLoadBalancerSetting.failover:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Failover
+	29, // 36: istio.networking.v1alpha3.LocalityLoadBalancerSetting.enabled:type_name -> google.protobuf.BoolValue
+	30, // 37: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.port:type_name -> istio.networking.v1alpha3.PortSelector
+	6,  // 38: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.load_balancer:type_name -> istio.networking.v1alpha3.LoadBalancerSettings
+	7,  // 39: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.connection_pool:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings
+	8,  // 40: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.outlier_detection:type_name -> istio.networking.v1alpha3.OutlierDetection
+	11, // 41: istio.networking.v1alpha3.TrafficPolicy.PortTrafficPolicy.tls:type_name -> istio.networking.v1alpha3.ClientTLSSettings
+	19, // 42: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.http_cookie:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
+	17, // 43: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.ring_hash:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.RingHash
+	18, // 44: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.maglev:type_name -> istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.MagLev
+	27, // 45: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration
+	27, // 46: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration
+	22, // 47: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive
+	27, // 48: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.max_connection_duration:type_name -> google.protobuf.Duration
+	27, // 49: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration
+	1,  // 50: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
+	27, // 51: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration
+	27, // 52: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration
+	25, // 53: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.ToEntry
+	54, // [54:54] is the sub-list for method output_type
+	54, // [54:54] is the sub-list for method input_type
+	54, // [54:54] is the sub-list for extension type_name
+	54, // [54:54] is the sub-list for extension extendee
+	0,  // [0:54] is the sub-list for field type_name
 }
 
 func init() { file_networking_v1alpha3_destination_rule_proto_init() }
@@ -3372,7 +3639,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1alpha3_destination_rule_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ClientTLSSettings); i {
+			switch v := v.(*FailurePercentageEjection); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3384,7 +3651,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1alpha3_destination_rule_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*LocalityLoadBalancerSetting); i {
+			switch v := v.(*SuccessRateEjection); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3396,7 +3663,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1alpha3_destination_rule_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TrafficPolicy_PortTrafficPolicy); i {
+			switch v := v.(*ClientTLSSettings); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3408,7 +3675,19 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1alpha3_destination_rule_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TrafficPolicy_TunnelSettings); i {
+			switch v := v.(*LocalityLoadBalancerSetting); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrafficPolicy_PortTrafficPolicy); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3420,6 +3699,18 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1alpha3_destination_rule_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrafficPolicy_TunnelSettings); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB); i {
 			case 0:
 				return &v.state
@@ -3431,7 +3722,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB_RingHash); i {
 			case 0:
 				return &v.state
@@ -3443,7 +3734,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB_MagLev); i {
 			case 0:
 				return &v.state
@@ -3455,7 +3746,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie); i {
 			case 0:
 				return &v.state
@@ -3467,7 +3758,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ConnectionPoolSettings_TCPSettings); i {
 			case 0:
 				return &v.state
@@ -3479,7 +3770,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ConnectionPoolSettings_HTTPSettings); i {
 			case 0:
 				return &v.state
@@ -3491,7 +3782,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ConnectionPoolSettings_TCPSettings_TcpKeepalive); i {
 			case 0:
 				return &v.state
@@ -3503,7 +3794,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LocalityLoadBalancerSetting_Distribute); i {
 			case 0:
 				return &v.state
@@ -3515,7 +3806,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1alpha3_destination_rule_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1alpha3_destination_rule_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LocalityLoadBalancerSetting_Failover); i {
 			case 0:
 				return &v.state
@@ -3532,7 +3823,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 		(*LoadBalancerSettings_Simple)(nil),
 		(*LoadBalancerSettings_ConsistentHash)(nil),
 	}
-	file_networking_v1alpha3_destination_rule_proto_msgTypes[11].OneofWrappers = []interface{}{
+	file_networking_v1alpha3_destination_rule_proto_msgTypes[13].OneofWrappers = []interface{}{
 		(*LoadBalancerSettings_ConsistentHashLB_HttpHeaderName)(nil),
 		(*LoadBalancerSettings_ConsistentHashLB_HttpCookie)(nil),
 		(*LoadBalancerSettings_ConsistentHashLB_UseSourceIp)(nil),
@@ -3546,7 +3837,7 @@ func file_networking_v1alpha3_destination_rule_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_networking_v1alpha3_destination_rule_proto_rawDesc,
 			NumEnums:      3,
-			NumMessages:   21,
+			NumMessages:   23,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/networking/v1alpha3/destination_rule.pb.html b/networking/v1alpha3/destination_rule.pb.html
index 00612060378..04a51bc1ac3 100644
--- a/networking/v1alpha3/destination_rule.pb.html
+++ b/networking/v1alpha3/destination_rule.pb.html
@@ -6,7 +6,7 @@
 generator: protoc-gen-docs
 schema: istio.networking.v1alpha3.DestinationRule
 aliases: [/docs/reference/config/networking/v1alpha3/destination-rule]
-number_of_entries: 23
+number_of_entries: 25
 ---
 <p><code>DestinationRule</code> defines policies that apply to traffic intended for a
 service after routing has occurred. These rules specify configuration
@@ -890,6 +890,182 @@ <h2 id="OutlierDetection">OutlierDetection</h2>
 disabled by setting it to 0%. The default is 0% as it&rsquo;s not typically
 applicable in k8s environments with few pods per service.</p>
 
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="OutlierDetection-failure_percentage_ejection">
+<td><code>failurePercentageEjection</code></td>
+<td><code><a href="#FailurePercentageEjection">FailurePercentageEjection</a></code></td>
+<td>
+<p>FailurePercent Algorithm for Grpc-xds proxyless for deciding
+if the host is an outlier or not.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="OutlierDetection-success_rate_ejection">
+<td><code>successRateEjection</code></td>
+<td><code><a href="#SuccessRateEjection">SuccessRateEjection</a></code></td>
+<td>
+<p>SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
+if the host is an outlier or not.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+</tbody>
+</table>
+</section>
+<h2 id="FailurePercentageEjection">FailurePercentageEjection</h2>
+<section>
+<p>Parameters for the failure percentage algorithm.
+This algorithm ejects individual endpoints whose failure rate is greater than
+some threshold, independently of any other endpoint
+Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection</p>
+
+<table class="message-fields">
+<thead>
+<tr>
+<th>Field</th>
+<th>Type</th>
+<th>Description</th>
+<th>Required</th>
+</tr>
+</thead>
+<tbody>
+<tr id="FailurePercentageEjection-threshold">
+<td><code>threshold</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The failure percentage to use when determining failure percentage-based outlier detection. If
+the failure percentage of a given address is greater than or equal to this value, it will be
+ejected.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="FailurePercentageEjection-enforcement_percentage">
+<td><code>enforcementPercentage</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The % chance that an address will be actually ejected when an outlier status is detected through
+failure percentage statistics. This setting can be used to disable ejection or to ramp it up
+slowly.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="FailurePercentageEjection-minimum_hosts">
+<td><code>minimumHosts</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The minimum number of addresses in order to perform failure percentage-based ejection.
+If the total number of addresses is less than this value, failure percentage-based
+ejection will not be performed.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="FailurePercentageEjection-request_volume">
+<td><code>requestVolume</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The minimum number of total requests that must be collected in one interval (as defined by the
+interval duration above) to perform failure percentage-based ejection for this address. If the
+volume is lower than this setting, failure percentage-based ejection will not be performed for
+this host.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+</tbody>
+</table>
+</section>
+<h2 id="SuccessRateEjection">SuccessRateEjection</h2>
+<section>
+<p>Parameters for the success rate ejection algorithm.
+This algorithm monitors the request success rate for all endpoints and
+ejects individual endpoints whose success rates are statistical outliers.
+Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection</p>
+
+<table class="message-fields">
+<thead>
+<tr>
+<th>Field</th>
+<th>Type</th>
+<th>Description</th>
+<th>Required</th>
+</tr>
+</thead>
+<tbody>
+<tr id="SuccessRateEjection-stdev_factor">
+<td><code>stdevFactor</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>This factor is used to determine the ejection threshold for success rate
+outlier ejection. The ejection threshold is the difference between the
+mean success rate, and the product of this factor and the standard
+deviation of the mean success rate: mean - (stdev *
+success_rate_stdev_factor). This factor is divided by a thousand to get a
+double. That is, if the desired factor is 1.9, the runtime value should
+be 1900.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="SuccessRateEjection-enforcement_percentage">
+<td><code>enforcementPercentage</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The % chance that an address will be actually ejected when an outlier status
+is detected through success rate statistics. This setting can be used to
+disable ejection or to ramp it up slowly.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="SuccessRateEjection-minimum_hosts">
+<td><code>minimumHosts</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The number of addresses that must have enough request volume to
+detect success rate outliers. If the number of addresses is less than this
+setting, outlier detection via success rate statistics is not performed
+for any addresses.</p>
+
+</td>
+<td>
+No
+</td>
+</tr>
+<tr id="SuccessRateEjection-request_volume">
+<td><code>requestVolume</code></td>
+<td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
+<td>
+<p>The minimum number of total requests that must be collected in one
+interval (as defined by the interval duration above) to include this address
+in success rate based outlier detection. If the volume is lower than this
+setting, outlier detection via success rate statistics is not performed
+for that address.</p>
+
 </td>
 <td>
 No
diff --git a/networking/v1alpha3/destination_rule.proto b/networking/v1alpha3/destination_rule.proto
index b0c8501a124..904a4ce6bb0 100644
--- a/networking/v1alpha3/destination_rule.proto
+++ b/networking/v1alpha3/destination_rule.proto
@@ -946,6 +946,74 @@ message OutlierDetection {
   // disabled by setting it to 0%. The default is 0% as it's not typically
   // applicable in k8s environments with few pods per service.
   int32 min_health_percent = 5;
+
+  // FailurePercent Algorithm for Grpc-xds proxyless for deciding
+  // if the host is an outlier or not.
+  FailurePercentageEjection failure_percentage_ejection = 10;
+
+  // SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
+  // if the host is an outlier or not.
+  SuccessRateEjection success_rate_ejection = 11;
+}
+
+// Parameters for the failure percentage algorithm.
+// This algorithm ejects individual endpoints whose failure rate is greater than
+// some threshold, independently of any other endpoint
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+message FailurePercentageEjection {
+  // The failure percentage to use when determining failure percentage-based outlier detection. If
+  // the failure percentage of a given address is greater than or equal to this value, it will be
+  // ejected.
+  google.protobuf.UInt32Value threshold = 1;
+
+  // The % chance that an address will be actually ejected when an outlier status is detected through
+  // failure percentage statistics. This setting can be used to disable ejection or to ramp it up
+  // slowly.
+  google.protobuf.UInt32Value enforcement_percentage = 2;
+
+  // The minimum number of addresses in order to perform failure percentage-based ejection.
+  // If the total number of addresses is less than this value, failure percentage-based
+  // ejection will not be performed.
+  google.protobuf.UInt32Value minimum_hosts = 3;
+
+  // The minimum number of total requests that must be collected in one interval (as defined by the
+  // interval duration above) to perform failure percentage-based ejection for this address. If the
+  // volume is lower than this setting, failure percentage-based ejection will not be performed for
+  // this host.
+  google.protobuf.UInt32Value request_volume = 4;
+}
+
+// Parameters for the success rate ejection algorithm.
+// This algorithm monitors the request success rate for all endpoints and
+// ejects individual endpoints whose success rates are statistical outliers.
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+message SuccessRateEjection {
+  // This factor is used to determine the ejection threshold for success rate
+  // outlier ejection. The ejection threshold is the difference between the
+  // mean success rate, and the product of this factor and the standard
+  // deviation of the mean success rate: mean - (stdev *
+  // success_rate_stdev_factor). This factor is divided by a thousand to get a
+  // double. That is, if the desired factor is 1.9, the runtime value should
+  // be 1900.
+  google.protobuf.UInt32Value stdev_factor = 1;
+
+  // The % chance that an address will be actually ejected when an outlier status
+  // is detected through success rate statistics. This setting can be used to
+  // disable ejection or to ramp it up slowly.
+  google.protobuf.UInt32Value enforcement_percentage = 2;
+
+  // The number of addresses that must have enough request volume to
+  // detect success rate outliers. If the number of addresses is less than this
+  // setting, outlier detection via success rate statistics is not performed
+  // for any addresses.
+  google.protobuf.UInt32Value minimum_hosts = 3;
+
+  // The minimum number of total requests that must be collected in one
+  // interval (as defined by the interval duration above) to include this address
+  // in success rate based outlier detection. If the volume is lower than this
+  // setting, outlier detection via success rate statistics is not performed
+  // for that address.
+  google.protobuf.UInt32Value request_volume = 4;
 }
 
 // SSL/TLS related settings for upstream connections. See Envoy's [TLS
diff --git a/networking/v1alpha3/destination_rule_deepcopy.gen.go b/networking/v1alpha3/destination_rule_deepcopy.gen.go
index d177dcb4d6e..53f0b627bd5 100644
--- a/networking/v1alpha3/destination_rule_deepcopy.gen.go
+++ b/networking/v1alpha3/destination_rule_deepcopy.gen.go
@@ -320,6 +320,48 @@ func (in *OutlierDetection) DeepCopyInterface() interface{} {
 	return in.DeepCopy()
 }
 
+// DeepCopyInto supports using FailurePercentageEjection within kubernetes types, where deepcopy-gen is used.
+func (in *FailurePercentageEjection) DeepCopyInto(out *FailurePercentageEjection) {
+	p := proto.Clone(in).(*FailurePercentageEjection)
+	*out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FailurePercentageEjection. Required by controller-gen.
+func (in *FailurePercentageEjection) DeepCopy() *FailurePercentageEjection {
+	if in == nil {
+		return nil
+	}
+	out := new(FailurePercentageEjection)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new FailurePercentageEjection. Required by controller-gen.
+func (in *FailurePercentageEjection) DeepCopyInterface() interface{} {
+	return in.DeepCopy()
+}
+
+// DeepCopyInto supports using SuccessRateEjection within kubernetes types, where deepcopy-gen is used.
+func (in *SuccessRateEjection) DeepCopyInto(out *SuccessRateEjection) {
+	p := proto.Clone(in).(*SuccessRateEjection)
+	*out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SuccessRateEjection. Required by controller-gen.
+func (in *SuccessRateEjection) DeepCopy() *SuccessRateEjection {
+	if in == nil {
+		return nil
+	}
+	out := new(SuccessRateEjection)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new SuccessRateEjection. Required by controller-gen.
+func (in *SuccessRateEjection) DeepCopyInterface() interface{} {
+	return in.DeepCopy()
+}
+
 // DeepCopyInto supports using ClientTLSSettings within kubernetes types, where deepcopy-gen is used.
 func (in *ClientTLSSettings) DeepCopyInto(out *ClientTLSSettings) {
 	p := proto.Clone(in).(*ClientTLSSettings)
diff --git a/networking/v1alpha3/destination_rule_json.gen.go b/networking/v1alpha3/destination_rule_json.gen.go
index 3900fe48256..2e92cb2e059 100644
--- a/networking/v1alpha3/destination_rule_json.gen.go
+++ b/networking/v1alpha3/destination_rule_json.gen.go
@@ -171,6 +171,28 @@ func (this *OutlierDetection) UnmarshalJSON(b []byte) error {
 	return DestinationRuleUnmarshaler.Unmarshal(bytes.NewReader(b), this)
 }
 
+// MarshalJSON is a custom marshaler for FailurePercentageEjection
+func (this *FailurePercentageEjection) MarshalJSON() ([]byte, error) {
+	str, err := DestinationRuleMarshaler.MarshalToString(this)
+	return []byte(str), err
+}
+
+// UnmarshalJSON is a custom unmarshaler for FailurePercentageEjection
+func (this *FailurePercentageEjection) UnmarshalJSON(b []byte) error {
+	return DestinationRuleUnmarshaler.Unmarshal(bytes.NewReader(b), this)
+}
+
+// MarshalJSON is a custom marshaler for SuccessRateEjection
+func (this *SuccessRateEjection) MarshalJSON() ([]byte, error) {
+	str, err := DestinationRuleMarshaler.MarshalToString(this)
+	return []byte(str), err
+}
+
+// UnmarshalJSON is a custom unmarshaler for SuccessRateEjection
+func (this *SuccessRateEjection) UnmarshalJSON(b []byte) error {
+	return DestinationRuleUnmarshaler.Unmarshal(bytes.NewReader(b), this)
+}
+
 // MarshalJSON is a custom marshaler for ClientTLSSettings
 func (this *ClientTLSSettings) MarshalJSON() ([]byte, error) {
 	str, err := DestinationRuleMarshaler.MarshalToString(this)
diff --git a/networking/v1beta1/destination_rule.pb.go b/networking/v1beta1/destination_rule.pb.go
index bc53de57a15..a653833b40b 100644
--- a/networking/v1beta1/destination_rule.pb.go
+++ b/networking/v1beta1/destination_rule.pb.go
@@ -379,7 +379,7 @@ func (x ClientTLSSettings_TLSmode) Number() protoreflect.EnumNumber {
 
 // Deprecated: Use ClientTLSSettings_TLSmode.Descriptor instead.
 func (ClientTLSSettings_TLSmode) EnumDescriptor() ([]byte, []int) {
-	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{6, 0}
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{8, 0}
 }
 
 // DestinationRule defines policies that apply to traffic intended for a service
@@ -1230,6 +1230,12 @@ type OutlierDetection struct {
 	// disabled by setting it to 0%. The default is 0% as it's not typically
 	// applicable in k8s environments with few pods per service.
 	MinHealthPercent int32 `protobuf:"varint,5,opt,name=min_health_percent,json=minHealthPercent,proto3" json:"min_health_percent,omitempty"`
+	// FailurePercent Algorithm for Grpc-xds proxyless for deciding
+	// if the host is an outlier or not.
+	FailurePercentageEjection *FailurePercentageEjection `protobuf:"bytes,10,opt,name=failure_percentage_ejection,json=failurePercentageEjection,proto3" json:"failure_percentage_ejection,omitempty"`
+	// SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
+	// if the host is an outlier or not.
+	SuccessRateEjection *SuccessRateEjection `protobuf:"bytes,11,opt,name=success_rate_ejection,json=successRateEjection,proto3" json:"success_rate_ejection,omitempty"`
 }
 
 func (x *OutlierDetection) Reset() {
@@ -1328,6 +1334,202 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 {
 	return 0
 }
 
+func (x *OutlierDetection) GetFailurePercentageEjection() *FailurePercentageEjection {
+	if x != nil {
+		return x.FailurePercentageEjection
+	}
+	return nil
+}
+
+func (x *OutlierDetection) GetSuccessRateEjection() *SuccessRateEjection {
+	if x != nil {
+		return x.SuccessRateEjection
+	}
+	return nil
+}
+
+// Parameters for the failure percentage algorithm.
+// This algorithm ejects individual endpoints whose failure rate is greater than
+// some threshold, independently of any other endpoint
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+type FailurePercentageEjection struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// The failure percentage to use when determining failure percentage-based outlier detection. If
+	// the failure percentage of a given address is greater than or equal to this value, it will be
+	// ejected.
+	Threshold *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=threshold,proto3" json:"threshold,omitempty"`
+	// The % chance that an address will be actually ejected when an outlier status is detected through
+	// failure percentage statistics. This setting can be used to disable ejection or to ramp it up
+	// slowly.
+	EnforcementPercentage *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=enforcement_percentage,json=enforcementPercentage,proto3" json:"enforcement_percentage,omitempty"`
+	// The minimum number of addresses in order to perform failure percentage-based ejection.
+	// If the total number of addresses is less than this value, failure percentage-based
+	// ejection will not be performed.
+	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
+	// The minimum number of total requests that must be collected in one interval (as defined by the
+	// interval duration above) to perform failure percentage-based ejection for this address. If the
+	// volume is lower than this setting, failure percentage-based ejection will not be performed for
+	// this host.
+	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
+}
+
+func (x *FailurePercentageEjection) Reset() {
+	*x = FailurePercentageEjection{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *FailurePercentageEjection) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FailurePercentageEjection) ProtoMessage() {}
+
+func (x *FailurePercentageEjection) ProtoReflect() protoreflect.Message {
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FailurePercentageEjection.ProtoReflect.Descriptor instead.
+func (*FailurePercentageEjection) Descriptor() ([]byte, []int) {
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{6}
+}
+
+func (x *FailurePercentageEjection) GetThreshold() *wrappers.UInt32Value {
+	if x != nil {
+		return x.Threshold
+	}
+	return nil
+}
+
+func (x *FailurePercentageEjection) GetEnforcementPercentage() *wrappers.UInt32Value {
+	if x != nil {
+		return x.EnforcementPercentage
+	}
+	return nil
+}
+
+func (x *FailurePercentageEjection) GetMinimumHosts() *wrappers.UInt32Value {
+	if x != nil {
+		return x.MinimumHosts
+	}
+	return nil
+}
+
+func (x *FailurePercentageEjection) GetRequestVolume() *wrappers.UInt32Value {
+	if x != nil {
+		return x.RequestVolume
+	}
+	return nil
+}
+
+// Parameters for the success rate ejection algorithm.
+// This algorithm monitors the request success rate for all endpoints and
+// ejects individual endpoints whose success rates are statistical outliers.
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+type SuccessRateEjection struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	// This factor is used to determine the ejection threshold for success rate
+	// outlier ejection. The ejection threshold is the difference between the
+	// mean success rate, and the product of this factor and the standard
+	// deviation of the mean success rate: mean - (stdev *
+	// success_rate_stdev_factor). This factor is divided by a thousand to get a
+	// double. That is, if the desired factor is 1.9, the runtime value should
+	// be 1900.
+	StdevFactor *wrappers.UInt32Value `protobuf:"bytes,1,opt,name=stdev_factor,json=stdevFactor,proto3" json:"stdev_factor,omitempty"`
+	// The % chance that an address will be actually ejected when an outlier status
+	// is detected through success rate statistics. This setting can be used to
+	// disable ejection or to ramp it up slowly.
+	EnforcementPercentage *wrappers.UInt32Value `protobuf:"bytes,2,opt,name=enforcement_percentage,json=enforcementPercentage,proto3" json:"enforcement_percentage,omitempty"`
+	// The number of addresses that must have enough request volume to
+	// detect success rate outliers. If the number of addresses is less than this
+	// setting, outlier detection via success rate statistics is not performed
+	// for any addresses.
+	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
+	// The minimum number of total requests that must be collected in one
+	// interval (as defined by the interval duration above) to include this address
+	// in success rate based outlier detection. If the volume is lower than this
+	// setting, outlier detection via success rate statistics is not performed
+	// for that address.
+	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
+}
+
+func (x *SuccessRateEjection) Reset() {
+	*x = SuccessRateEjection{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *SuccessRateEjection) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*SuccessRateEjection) ProtoMessage() {}
+
+func (x *SuccessRateEjection) ProtoReflect() protoreflect.Message {
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SuccessRateEjection.ProtoReflect.Descriptor instead.
+func (*SuccessRateEjection) Descriptor() ([]byte, []int) {
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7}
+}
+
+func (x *SuccessRateEjection) GetStdevFactor() *wrappers.UInt32Value {
+	if x != nil {
+		return x.StdevFactor
+	}
+	return nil
+}
+
+func (x *SuccessRateEjection) GetEnforcementPercentage() *wrappers.UInt32Value {
+	if x != nil {
+		return x.EnforcementPercentage
+	}
+	return nil
+}
+
+func (x *SuccessRateEjection) GetMinimumHosts() *wrappers.UInt32Value {
+	if x != nil {
+		return x.MinimumHosts
+	}
+	return nil
+}
+
+func (x *SuccessRateEjection) GetRequestVolume() *wrappers.UInt32Value {
+	if x != nil {
+		return x.RequestVolume
+	}
+	return nil
+}
+
 // SSL/TLS related settings for upstream connections. See Envoy's [TLS
 // context](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto.html#common-tls-configuration)
 // for more details. These settings are common to both HTTP and TCP upstreams.
@@ -1533,7 +1735,7 @@ type ClientTLSSettings struct {
 func (x *ClientTLSSettings) Reset() {
 	*x = ClientTLSSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[6]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[8]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1546,7 +1748,7 @@ func (x *ClientTLSSettings) String() string {
 func (*ClientTLSSettings) ProtoMessage() {}
 
 func (x *ClientTLSSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[6]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[8]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1559,7 +1761,7 @@ func (x *ClientTLSSettings) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use ClientTLSSettings.ProtoReflect.Descriptor instead.
 func (*ClientTLSSettings) Descriptor() ([]byte, []int) {
-	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{6}
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{8}
 }
 
 func (x *ClientTLSSettings) GetMode() ClientTLSSettings_TLSmode {
@@ -1753,7 +1955,7 @@ type LocalityLoadBalancerSetting struct {
 func (x *LocalityLoadBalancerSetting) Reset() {
 	*x = LocalityLoadBalancerSetting{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[7]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[9]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1766,7 +1968,7 @@ func (x *LocalityLoadBalancerSetting) String() string {
 func (*LocalityLoadBalancerSetting) ProtoMessage() {}
 
 func (x *LocalityLoadBalancerSetting) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[7]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[9]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1779,7 +1981,7 @@ func (x *LocalityLoadBalancerSetting) ProtoReflect() protoreflect.Message {
 
 // Deprecated: Use LocalityLoadBalancerSetting.ProtoReflect.Descriptor instead.
 func (*LocalityLoadBalancerSetting) Descriptor() ([]byte, []int) {
-	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7}
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{9}
 }
 
 func (x *LocalityLoadBalancerSetting) GetDistribute() []*LocalityLoadBalancerSetting_Distribute {
@@ -1832,7 +2034,7 @@ type TrafficPolicy_PortTrafficPolicy struct {
 func (x *TrafficPolicy_PortTrafficPolicy) Reset() {
 	*x = TrafficPolicy_PortTrafficPolicy{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[8]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[10]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1845,7 +2047,7 @@ func (x *TrafficPolicy_PortTrafficPolicy) String() string {
 func (*TrafficPolicy_PortTrafficPolicy) ProtoMessage() {}
 
 func (x *TrafficPolicy_PortTrafficPolicy) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[8]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[10]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -1920,7 +2122,7 @@ type TrafficPolicy_TunnelSettings struct {
 func (x *TrafficPolicy_TunnelSettings) Reset() {
 	*x = TrafficPolicy_TunnelSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[9]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[11]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -1933,7 +2135,7 @@ func (x *TrafficPolicy_TunnelSettings) String() string {
 func (*TrafficPolicy_TunnelSettings) ProtoMessage() {}
 
 func (x *TrafficPolicy_TunnelSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[9]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[11]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2020,7 +2222,7 @@ type LoadBalancerSettings_ConsistentHashLB struct {
 func (x *LoadBalancerSettings_ConsistentHashLB) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[11]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[13]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2033,7 +2235,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[11]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[13]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2186,7 +2388,7 @@ type LoadBalancerSettings_ConsistentHashLB_RingHash struct {
 func (x *LoadBalancerSettings_ConsistentHashLB_RingHash) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB_RingHash{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[12]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[14]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2199,7 +2401,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB_RingHash) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB_RingHash) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB_RingHash) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[12]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[14]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2236,7 +2438,7 @@ type LoadBalancerSettings_ConsistentHashLB_MagLev struct {
 func (x *LoadBalancerSettings_ConsistentHashLB_MagLev) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB_MagLev{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[13]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[15]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2249,7 +2451,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB_MagLev) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB_MagLev) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB_MagLev) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[13]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[15]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2292,7 +2494,7 @@ type LoadBalancerSettings_ConsistentHashLB_HTTPCookie struct {
 func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) Reset() {
 	*x = LoadBalancerSettings_ConsistentHashLB_HTTPCookie{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[14]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[16]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2305,7 +2507,7 @@ func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) String() string {
 func (*LoadBalancerSettings_ConsistentHashLB_HTTPCookie) ProtoMessage() {}
 
 func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[14]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[16]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2364,7 +2566,7 @@ type ConnectionPoolSettings_TCPSettings struct {
 func (x *ConnectionPoolSettings_TCPSettings) Reset() {
 	*x = ConnectionPoolSettings_TCPSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[15]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[17]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2377,7 +2579,7 @@ func (x *ConnectionPoolSettings_TCPSettings) String() string {
 func (*ConnectionPoolSettings_TCPSettings) ProtoMessage() {}
 
 func (x *ConnectionPoolSettings_TCPSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[15]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[17]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2466,7 +2668,7 @@ type ConnectionPoolSettings_HTTPSettings struct {
 func (x *ConnectionPoolSettings_HTTPSettings) Reset() {
 	*x = ConnectionPoolSettings_HTTPSettings{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[16]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[18]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2479,7 +2681,7 @@ func (x *ConnectionPoolSettings_HTTPSettings) String() string {
 func (*ConnectionPoolSettings_HTTPSettings) ProtoMessage() {}
 
 func (x *ConnectionPoolSettings_HTTPSettings) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[16]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[18]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2574,7 +2776,7 @@ type ConnectionPoolSettings_TCPSettings_TcpKeepalive struct {
 func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) Reset() {
 	*x = ConnectionPoolSettings_TCPSettings_TcpKeepalive{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[17]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[19]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2587,7 +2789,7 @@ func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) String() string {
 func (*ConnectionPoolSettings_TCPSettings_TcpKeepalive) ProtoMessage() {}
 
 func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[17]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[19]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2650,7 +2852,7 @@ type LocalityLoadBalancerSetting_Distribute struct {
 func (x *LocalityLoadBalancerSetting_Distribute) Reset() {
 	*x = LocalityLoadBalancerSetting_Distribute{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[18]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[20]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2663,7 +2865,7 @@ func (x *LocalityLoadBalancerSetting_Distribute) String() string {
 func (*LocalityLoadBalancerSetting_Distribute) ProtoMessage() {}
 
 func (x *LocalityLoadBalancerSetting_Distribute) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[18]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[20]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2676,7 +2878,7 @@ func (x *LocalityLoadBalancerSetting_Distribute) ProtoReflect() protoreflect.Mes
 
 // Deprecated: Use LocalityLoadBalancerSetting_Distribute.ProtoReflect.Descriptor instead.
 func (*LocalityLoadBalancerSetting_Distribute) Descriptor() ([]byte, []int) {
-	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7, 0}
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{9, 0}
 }
 
 func (x *LocalityLoadBalancerSetting_Distribute) GetFrom() string {
@@ -2715,7 +2917,7 @@ type LocalityLoadBalancerSetting_Failover struct {
 func (x *LocalityLoadBalancerSetting_Failover) Reset() {
 	*x = LocalityLoadBalancerSetting_Failover{}
 	if protoimpl.UnsafeEnabled {
-		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[19]
+		mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[21]
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		ms.StoreMessageInfo(mi)
 	}
@@ -2728,7 +2930,7 @@ func (x *LocalityLoadBalancerSetting_Failover) String() string {
 func (*LocalityLoadBalancerSetting_Failover) ProtoMessage() {}
 
 func (x *LocalityLoadBalancerSetting_Failover) ProtoReflect() protoreflect.Message {
-	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[19]
+	mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[21]
 	if protoimpl.UnsafeEnabled && x != nil {
 		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 		if ms.LoadMessageInfo() == nil {
@@ -2741,7 +2943,7 @@ func (x *LocalityLoadBalancerSetting_Failover) ProtoReflect() protoreflect.Messa
 
 // Deprecated: Use LocalityLoadBalancerSetting_Failover.ProtoReflect.Descriptor instead.
 func (*LocalityLoadBalancerSetting_Failover) Descriptor() ([]byte, []int) {
-	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7, 1}
+	return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{9, 1}
 }
 
 func (x *LocalityLoadBalancerSetting_Failover) GetFrom() string {
@@ -3032,7 +3234,7 @@ var file_networking_v1beta1_destination_rule_proto_rawDesc = []byte{
 	0x48, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12,
 	0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e,
 	0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x01,
-	0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0x8a, 0x05,
+	0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0xe2, 0x06,
 	0x0a, 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69,
 	0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76,
 	0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02,
@@ -3073,73 +3275,125 @@ var file_networking_v1beta1_destination_rule_proto_rawDesc = []byte{
 	0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12,
 	0x6d, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65,
 	0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x48, 0x65, 0x61,
-	0x6c, 0x74, 0x68, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xcc, 0x03, 0x0a, 0x11, 0x43,
-	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
-	0x12, 0x47, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33,
+	0x6c, 0x74, 0x68, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x73, 0x0a, 0x1b, 0x66, 0x61,
+	0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65,
+	0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69,
+	0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x75,
+	0x72, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63,
+	0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x65, 0x72,
+	0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
+	0x61, 0x0a, 0x15, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f,
+	0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d,
 	0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e,
-	0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
-	0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x6d,
-	0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x69,
-	0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72,
-	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76,
-	0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70,
-	0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x5f,
-	0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
-	0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c,
-	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65,
-	0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73,
-	0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73,
-	0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41,
-	0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x69, 0x18, 0x06,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c, 0x0a, 0x14, 0x69, 0x6e, 0x73,
-	0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66,
-	0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
-	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61,
-	0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69,
-	0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x6d, 0x6f,
-	0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12,
-	0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d,
-	0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x54, 0x49, 0x4f,
-	0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa2, 0x04, 0x0a, 0x1b, 0x4c, 0x6f,
+	0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73,
+	0x73, 0x52, 0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73,
+	0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69,
+	0x6f, 0x6e, 0x22, 0xb4, 0x02, 0x0a, 0x19, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x65,
+	0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x3a, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+	0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75,
+	0x65, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x53, 0x0a, 0x16,
+	0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x63,
+	0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x65, 0x6e, 0x66, 0x6f,
+	0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67,
+	0x65, 0x12, 0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x68, 0x6f, 0x73,
+	0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
+	0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33,
+	0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x48,
+	0x6f, 0x73, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f,
+	0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55,
+	0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75,
+	0x65, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, 0xb3, 0x02, 0x0a, 0x13, 0x53, 0x75,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f,
+	0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74, 0x64, 0x65, 0x76, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f,
+	0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
+	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32,
+	0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x74, 0x64, 0x65, 0x76, 0x46, 0x61, 0x63, 0x74,
+	0x6f, 0x72, 0x12, 0x53, 0x0a, 0x16, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e,
+	0x74, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x15, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72,
+	0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d,
+	0x75, 0x6d, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
+	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
+	0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x69,
+	0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65,
+	0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22,
+	0xcc, 0x03, 0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74,
+	0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x47, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77,
+	0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43,
+	0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
+	0x2e, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d,
+	0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69,
+	0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65,
+	0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a,
+	0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27,
+	0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
+	0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69,
+	0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65,
+	0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65,
+	0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f,
+	0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62,
+	0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03,
+	0x73, 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c,
+	0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f,
+	0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
+	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42,
+	0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75,
+	0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07,
+	0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42,
+	0x4c, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01,
+	0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c,
+	0x49, 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa2,
+	0x04, 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42,
+	0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x60,
+	0x0a, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f,
 	0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
-	0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0a, 0x64, 0x69, 0x73,
-	0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e,
-	0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
-	0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74,
-	0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74,
-	0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
-	0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x5a, 0x0a, 0x08, 0x66,
-	0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e,
-	0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67,
-	0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74,
-	0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74,
-	0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x66,
-	0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f,
-	0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03,
-	0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f,
-	0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
-	0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75,
-	0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0xb1, 0x01, 0x0a, 0x0a, 0x44,
-	0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f,
-	0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x58, 0x0a,
-	0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x69, 0x73, 0x74, 0x69,
-	0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62,
-	0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61,
-	0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
-	0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35, 0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e,
-	0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72,
-	0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e,
-	0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x21,
-	0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e,
-	0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
-	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69,
+	0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+	0x12, 0x5a, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f,
+	0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
+	0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76,
+	0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11,
+	0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74,
+	0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65,
+	0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61,
+	0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f,
+	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f,
+	0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a,
+	0xb1, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x12,
+	0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72,
+	0x6f, 0x6d, 0x12, 0x58, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48,
+	0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e,
+	0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69,
+	0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65,
+	0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+	0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35, 0x0a, 0x07,
+	0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+	0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12,
+	0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66,
+	0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x02, 0x74, 0x6f, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76,
+	0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -3155,7 +3409,7 @@ func file_networking_v1beta1_destination_rule_proto_rawDescGZIP() []byte {
 }
 
 var file_networking_v1beta1_destination_rule_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
-var file_networking_v1beta1_destination_rule_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
+var file_networking_v1beta1_destination_rule_proto_msgTypes = make([]protoimpl.MessageInfo, 23)
 var file_networking_v1beta1_destination_rule_proto_goTypes = []interface{}{
 	(LoadBalancerSettings_SimpleLB)(0),                       // 0: istio.networking.v1beta1.LoadBalancerSettings.SimpleLB
 	(ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy)(0), // 1: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
@@ -3166,77 +3420,89 @@ var file_networking_v1beta1_destination_rule_proto_goTypes = []interface{}{
 	(*LoadBalancerSettings)(nil),                             // 6: istio.networking.v1beta1.LoadBalancerSettings
 	(*ConnectionPoolSettings)(nil),                           // 7: istio.networking.v1beta1.ConnectionPoolSettings
 	(*OutlierDetection)(nil),                                 // 8: istio.networking.v1beta1.OutlierDetection
-	(*ClientTLSSettings)(nil),                                // 9: istio.networking.v1beta1.ClientTLSSettings
-	(*LocalityLoadBalancerSetting)(nil),                      // 10: istio.networking.v1beta1.LocalityLoadBalancerSetting
-	(*TrafficPolicy_PortTrafficPolicy)(nil),                  // 11: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy
-	(*TrafficPolicy_TunnelSettings)(nil),                     // 12: istio.networking.v1beta1.TrafficPolicy.TunnelSettings
-	nil,                                                      // 13: istio.networking.v1beta1.Subset.LabelsEntry
-	(*LoadBalancerSettings_ConsistentHashLB)(nil),            // 14: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB
-	(*LoadBalancerSettings_ConsistentHashLB_RingHash)(nil),   // 15: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.RingHash
-	(*LoadBalancerSettings_ConsistentHashLB_MagLev)(nil),     // 16: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.MagLev
-	(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie)(nil), // 17: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
-	(*ConnectionPoolSettings_TCPSettings)(nil),               // 18: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings
-	(*ConnectionPoolSettings_HTTPSettings)(nil),              // 19: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings
-	(*ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil),  // 20: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive
-	(*LocalityLoadBalancerSetting_Distribute)(nil),           // 21: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute
-	(*LocalityLoadBalancerSetting_Failover)(nil),             // 22: istio.networking.v1beta1.LocalityLoadBalancerSetting.Failover
-	nil,                              // 23: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry
-	(*v1beta1.WorkloadSelector)(nil), // 24: istio.type.v1beta1.WorkloadSelector
-	(*duration.Duration)(nil),        // 25: google.protobuf.Duration
-	(*wrappers.UInt32Value)(nil),     // 26: google.protobuf.UInt32Value
-	(*wrappers.BoolValue)(nil),       // 27: google.protobuf.BoolValue
-	(*PortSelector)(nil),             // 28: istio.networking.v1beta1.PortSelector
+	(*FailurePercentageEjection)(nil),                        // 9: istio.networking.v1beta1.FailurePercentageEjection
+	(*SuccessRateEjection)(nil),                              // 10: istio.networking.v1beta1.SuccessRateEjection
+	(*ClientTLSSettings)(nil),                                // 11: istio.networking.v1beta1.ClientTLSSettings
+	(*LocalityLoadBalancerSetting)(nil),                      // 12: istio.networking.v1beta1.LocalityLoadBalancerSetting
+	(*TrafficPolicy_PortTrafficPolicy)(nil),                  // 13: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy
+	(*TrafficPolicy_TunnelSettings)(nil),                     // 14: istio.networking.v1beta1.TrafficPolicy.TunnelSettings
+	nil,                                                      // 15: istio.networking.v1beta1.Subset.LabelsEntry
+	(*LoadBalancerSettings_ConsistentHashLB)(nil),            // 16: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB
+	(*LoadBalancerSettings_ConsistentHashLB_RingHash)(nil),   // 17: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.RingHash
+	(*LoadBalancerSettings_ConsistentHashLB_MagLev)(nil),     // 18: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.MagLev
+	(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie)(nil), // 19: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
+	(*ConnectionPoolSettings_TCPSettings)(nil),               // 20: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings
+	(*ConnectionPoolSettings_HTTPSettings)(nil),              // 21: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings
+	(*ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil),  // 22: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive
+	(*LocalityLoadBalancerSetting_Distribute)(nil),           // 23: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute
+	(*LocalityLoadBalancerSetting_Failover)(nil),             // 24: istio.networking.v1beta1.LocalityLoadBalancerSetting.Failover
+	nil,                              // 25: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry
+	(*v1beta1.WorkloadSelector)(nil), // 26: istio.type.v1beta1.WorkloadSelector
+	(*duration.Duration)(nil),        // 27: google.protobuf.Duration
+	(*wrappers.UInt32Value)(nil),     // 28: google.protobuf.UInt32Value
+	(*wrappers.BoolValue)(nil),       // 29: google.protobuf.BoolValue
+	(*PortSelector)(nil),             // 30: istio.networking.v1beta1.PortSelector
 }
 var file_networking_v1beta1_destination_rule_proto_depIdxs = []int32{
 	4,  // 0: istio.networking.v1beta1.DestinationRule.traffic_policy:type_name -> istio.networking.v1beta1.TrafficPolicy
 	5,  // 1: istio.networking.v1beta1.DestinationRule.subsets:type_name -> istio.networking.v1beta1.Subset
-	24, // 2: istio.networking.v1beta1.DestinationRule.workload_selector:type_name -> istio.type.v1beta1.WorkloadSelector
+	26, // 2: istio.networking.v1beta1.DestinationRule.workload_selector:type_name -> istio.type.v1beta1.WorkloadSelector
 	6,  // 3: istio.networking.v1beta1.TrafficPolicy.load_balancer:type_name -> istio.networking.v1beta1.LoadBalancerSettings
 	7,  // 4: istio.networking.v1beta1.TrafficPolicy.connection_pool:type_name -> istio.networking.v1beta1.ConnectionPoolSettings
 	8,  // 5: istio.networking.v1beta1.TrafficPolicy.outlier_detection:type_name -> istio.networking.v1beta1.OutlierDetection
-	9,  // 6: istio.networking.v1beta1.TrafficPolicy.tls:type_name -> istio.networking.v1beta1.ClientTLSSettings
-	11, // 7: istio.networking.v1beta1.TrafficPolicy.port_level_settings:type_name -> istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy
-	12, // 8: istio.networking.v1beta1.TrafficPolicy.tunnel:type_name -> istio.networking.v1beta1.TrafficPolicy.TunnelSettings
-	13, // 9: istio.networking.v1beta1.Subset.labels:type_name -> istio.networking.v1beta1.Subset.LabelsEntry
+	11, // 6: istio.networking.v1beta1.TrafficPolicy.tls:type_name -> istio.networking.v1beta1.ClientTLSSettings
+	13, // 7: istio.networking.v1beta1.TrafficPolicy.port_level_settings:type_name -> istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy
+	14, // 8: istio.networking.v1beta1.TrafficPolicy.tunnel:type_name -> istio.networking.v1beta1.TrafficPolicy.TunnelSettings
+	15, // 9: istio.networking.v1beta1.Subset.labels:type_name -> istio.networking.v1beta1.Subset.LabelsEntry
 	4,  // 10: istio.networking.v1beta1.Subset.traffic_policy:type_name -> istio.networking.v1beta1.TrafficPolicy
 	0,  // 11: istio.networking.v1beta1.LoadBalancerSettings.simple:type_name -> istio.networking.v1beta1.LoadBalancerSettings.SimpleLB
-	14, // 12: istio.networking.v1beta1.LoadBalancerSettings.consistent_hash:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB
-	10, // 13: istio.networking.v1beta1.LoadBalancerSettings.locality_lb_setting:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting
-	25, // 14: istio.networking.v1beta1.LoadBalancerSettings.warmup_duration_secs:type_name -> google.protobuf.Duration
-	18, // 15: istio.networking.v1beta1.ConnectionPoolSettings.tcp:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings
-	19, // 16: istio.networking.v1beta1.ConnectionPoolSettings.http:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings
-	26, // 17: istio.networking.v1beta1.OutlierDetection.consecutive_local_origin_failures:type_name -> google.protobuf.UInt32Value
-	26, // 18: istio.networking.v1beta1.OutlierDetection.consecutive_gateway_errors:type_name -> google.protobuf.UInt32Value
-	26, // 19: istio.networking.v1beta1.OutlierDetection.consecutive_5xx_errors:type_name -> google.protobuf.UInt32Value
-	25, // 20: istio.networking.v1beta1.OutlierDetection.interval:type_name -> google.protobuf.Duration
-	25, // 21: istio.networking.v1beta1.OutlierDetection.base_ejection_time:type_name -> google.protobuf.Duration
-	2,  // 22: istio.networking.v1beta1.ClientTLSSettings.mode:type_name -> istio.networking.v1beta1.ClientTLSSettings.TLSmode
-	27, // 23: istio.networking.v1beta1.ClientTLSSettings.insecure_skip_verify:type_name -> google.protobuf.BoolValue
-	21, // 24: istio.networking.v1beta1.LocalityLoadBalancerSetting.distribute:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute
-	22, // 25: istio.networking.v1beta1.LocalityLoadBalancerSetting.failover:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Failover
-	27, // 26: istio.networking.v1beta1.LocalityLoadBalancerSetting.enabled:type_name -> google.protobuf.BoolValue
-	28, // 27: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.port:type_name -> istio.networking.v1beta1.PortSelector
-	6,  // 28: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.load_balancer:type_name -> istio.networking.v1beta1.LoadBalancerSettings
-	7,  // 29: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.connection_pool:type_name -> istio.networking.v1beta1.ConnectionPoolSettings
-	8,  // 30: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.outlier_detection:type_name -> istio.networking.v1beta1.OutlierDetection
-	9,  // 31: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.tls:type_name -> istio.networking.v1beta1.ClientTLSSettings
-	17, // 32: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.http_cookie:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
-	15, // 33: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.ring_hash:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.RingHash
-	16, // 34: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.maglev:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.MagLev
-	25, // 35: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration
-	25, // 36: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration
-	20, // 37: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive
-	25, // 38: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.max_connection_duration:type_name -> google.protobuf.Duration
-	25, // 39: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration
-	1,  // 40: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
-	25, // 41: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration
-	25, // 42: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration
-	23, // 43: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry
-	44, // [44:44] is the sub-list for method output_type
-	44, // [44:44] is the sub-list for method input_type
-	44, // [44:44] is the sub-list for extension type_name
-	44, // [44:44] is the sub-list for extension extendee
-	0,  // [0:44] is the sub-list for field type_name
+	16, // 12: istio.networking.v1beta1.LoadBalancerSettings.consistent_hash:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB
+	12, // 13: istio.networking.v1beta1.LoadBalancerSettings.locality_lb_setting:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting
+	27, // 14: istio.networking.v1beta1.LoadBalancerSettings.warmup_duration_secs:type_name -> google.protobuf.Duration
+	20, // 15: istio.networking.v1beta1.ConnectionPoolSettings.tcp:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings
+	21, // 16: istio.networking.v1beta1.ConnectionPoolSettings.http:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings
+	28, // 17: istio.networking.v1beta1.OutlierDetection.consecutive_local_origin_failures:type_name -> google.protobuf.UInt32Value
+	28, // 18: istio.networking.v1beta1.OutlierDetection.consecutive_gateway_errors:type_name -> google.protobuf.UInt32Value
+	28, // 19: istio.networking.v1beta1.OutlierDetection.consecutive_5xx_errors:type_name -> google.protobuf.UInt32Value
+	27, // 20: istio.networking.v1beta1.OutlierDetection.interval:type_name -> google.protobuf.Duration
+	27, // 21: istio.networking.v1beta1.OutlierDetection.base_ejection_time:type_name -> google.protobuf.Duration
+	9,  // 22: istio.networking.v1beta1.OutlierDetection.failure_percentage_ejection:type_name -> istio.networking.v1beta1.FailurePercentageEjection
+	10, // 23: istio.networking.v1beta1.OutlierDetection.success_rate_ejection:type_name -> istio.networking.v1beta1.SuccessRateEjection
+	28, // 24: istio.networking.v1beta1.FailurePercentageEjection.threshold:type_name -> google.protobuf.UInt32Value
+	28, // 25: istio.networking.v1beta1.FailurePercentageEjection.enforcement_percentage:type_name -> google.protobuf.UInt32Value
+	28, // 26: istio.networking.v1beta1.FailurePercentageEjection.minimum_hosts:type_name -> google.protobuf.UInt32Value
+	28, // 27: istio.networking.v1beta1.FailurePercentageEjection.request_volume:type_name -> google.protobuf.UInt32Value
+	28, // 28: istio.networking.v1beta1.SuccessRateEjection.stdev_factor:type_name -> google.protobuf.UInt32Value
+	28, // 29: istio.networking.v1beta1.SuccessRateEjection.enforcement_percentage:type_name -> google.protobuf.UInt32Value
+	28, // 30: istio.networking.v1beta1.SuccessRateEjection.minimum_hosts:type_name -> google.protobuf.UInt32Value
+	28, // 31: istio.networking.v1beta1.SuccessRateEjection.request_volume:type_name -> google.protobuf.UInt32Value
+	2,  // 32: istio.networking.v1beta1.ClientTLSSettings.mode:type_name -> istio.networking.v1beta1.ClientTLSSettings.TLSmode
+	29, // 33: istio.networking.v1beta1.ClientTLSSettings.insecure_skip_verify:type_name -> google.protobuf.BoolValue
+	23, // 34: istio.networking.v1beta1.LocalityLoadBalancerSetting.distribute:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute
+	24, // 35: istio.networking.v1beta1.LocalityLoadBalancerSetting.failover:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Failover
+	29, // 36: istio.networking.v1beta1.LocalityLoadBalancerSetting.enabled:type_name -> google.protobuf.BoolValue
+	30, // 37: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.port:type_name -> istio.networking.v1beta1.PortSelector
+	6,  // 38: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.load_balancer:type_name -> istio.networking.v1beta1.LoadBalancerSettings
+	7,  // 39: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.connection_pool:type_name -> istio.networking.v1beta1.ConnectionPoolSettings
+	8,  // 40: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.outlier_detection:type_name -> istio.networking.v1beta1.OutlierDetection
+	11, // 41: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.tls:type_name -> istio.networking.v1beta1.ClientTLSSettings
+	19, // 42: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.http_cookie:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie
+	17, // 43: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.ring_hash:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.RingHash
+	18, // 44: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.maglev:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.MagLev
+	27, // 45: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration
+	27, // 46: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration
+	22, // 47: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive
+	27, // 48: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.max_connection_duration:type_name -> google.protobuf.Duration
+	27, // 49: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration
+	1,  // 50: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy
+	27, // 51: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration
+	27, // 52: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration
+	25, // 53: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry
+	54, // [54:54] is the sub-list for method output_type
+	54, // [54:54] is the sub-list for method input_type
+	54, // [54:54] is the sub-list for extension type_name
+	54, // [54:54] is the sub-list for extension extendee
+	0,  // [0:54] is the sub-list for field type_name
 }
 
 func init() { file_networking_v1beta1_destination_rule_proto_init() }
@@ -3319,7 +3585,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1beta1_destination_rule_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*ClientTLSSettings); i {
+			switch v := v.(*FailurePercentageEjection); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3331,7 +3597,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1beta1_destination_rule_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*LocalityLoadBalancerSetting); i {
+			switch v := v.(*SuccessRateEjection); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3343,7 +3609,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1beta1_destination_rule_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TrafficPolicy_PortTrafficPolicy); i {
+			switch v := v.(*ClientTLSSettings); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3355,7 +3621,19 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1beta1_destination_rule_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*TrafficPolicy_TunnelSettings); i {
+			switch v := v.(*LocalityLoadBalancerSetting); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_networking_v1beta1_destination_rule_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrafficPolicy_PortTrafficPolicy); i {
 			case 0:
 				return &v.state
 			case 1:
@@ -3367,6 +3645,18 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 			}
 		}
 		file_networking_v1beta1_destination_rule_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrafficPolicy_TunnelSettings); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_networking_v1beta1_destination_rule_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB); i {
 			case 0:
 				return &v.state
@@ -3378,7 +3668,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB_RingHash); i {
 			case 0:
 				return &v.state
@@ -3390,7 +3680,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB_MagLev); i {
 			case 0:
 				return &v.state
@@ -3402,7 +3692,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie); i {
 			case 0:
 				return &v.state
@@ -3414,7 +3704,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ConnectionPoolSettings_TCPSettings); i {
 			case 0:
 				return &v.state
@@ -3426,7 +3716,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ConnectionPoolSettings_HTTPSettings); i {
 			case 0:
 				return &v.state
@@ -3438,7 +3728,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*ConnectionPoolSettings_TCPSettings_TcpKeepalive); i {
 			case 0:
 				return &v.state
@@ -3450,7 +3740,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LocalityLoadBalancerSetting_Distribute); i {
 			case 0:
 				return &v.state
@@ -3462,7 +3752,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 				return nil
 			}
 		}
-		file_networking_v1beta1_destination_rule_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+		file_networking_v1beta1_destination_rule_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
 			switch v := v.(*LocalityLoadBalancerSetting_Failover); i {
 			case 0:
 				return &v.state
@@ -3479,7 +3769,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 		(*LoadBalancerSettings_Simple)(nil),
 		(*LoadBalancerSettings_ConsistentHash)(nil),
 	}
-	file_networking_v1beta1_destination_rule_proto_msgTypes[11].OneofWrappers = []interface{}{
+	file_networking_v1beta1_destination_rule_proto_msgTypes[13].OneofWrappers = []interface{}{
 		(*LoadBalancerSettings_ConsistentHashLB_HttpHeaderName)(nil),
 		(*LoadBalancerSettings_ConsistentHashLB_HttpCookie)(nil),
 		(*LoadBalancerSettings_ConsistentHashLB_UseSourceIp)(nil),
@@ -3493,7 +3783,7 @@ func file_networking_v1beta1_destination_rule_proto_init() {
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_networking_v1beta1_destination_rule_proto_rawDesc,
 			NumEnums:      3,
-			NumMessages:   21,
+			NumMessages:   23,
 			NumExtensions: 0,
 			NumServices:   0,
 		},
diff --git a/networking/v1beta1/destination_rule.proto b/networking/v1beta1/destination_rule.proto
index 063524e576e..8e55774e1a3 100644
--- a/networking/v1beta1/destination_rule.proto
+++ b/networking/v1beta1/destination_rule.proto
@@ -895,6 +895,74 @@ message OutlierDetection {
   // disabled by setting it to 0%. The default is 0% as it's not typically
   // applicable in k8s environments with few pods per service.
   int32 min_health_percent = 5;
+
+  // FailurePercent Algorithm for Grpc-xds proxyless for deciding
+  // if the host is an outlier or not.
+  FailurePercentageEjection failure_percentage_ejection = 10;
+
+  // SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
+  // if the host is an outlier or not.
+  SuccessRateEjection success_rate_ejection = 11;
+}
+
+// Parameters for the failure percentage algorithm.
+// This algorithm ejects individual endpoints whose failure rate is greater than
+// some threshold, independently of any other endpoint
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+message FailurePercentageEjection {
+  // The failure percentage to use when determining failure percentage-based outlier detection. If
+  // the failure percentage of a given address is greater than or equal to this value, it will be
+  // ejected.
+  google.protobuf.UInt32Value threshold = 1;
+
+  // The % chance that an address will be actually ejected when an outlier status is detected through
+  // failure percentage statistics. This setting can be used to disable ejection or to ramp it up
+  // slowly.
+  google.protobuf.UInt32Value enforcement_percentage = 2;
+
+  // The minimum number of addresses in order to perform failure percentage-based ejection.
+  // If the total number of addresses is less than this value, failure percentage-based
+  // ejection will not be performed.
+  google.protobuf.UInt32Value minimum_hosts = 3;
+
+  // The minimum number of total requests that must be collected in one interval (as defined by the
+  // interval duration above) to perform failure percentage-based ejection for this address. If the
+  // volume is lower than this setting, failure percentage-based ejection will not be performed for
+  // this host.
+  google.protobuf.UInt32Value request_volume = 4;
+}
+
+// Parameters for the success rate ejection algorithm.
+// This algorithm monitors the request success rate for all endpoints and
+// ejects individual endpoints whose success rates are statistical outliers.
+// Defaults to values declared in envoy.config.cluster.v3.OutlierDetection.SuccessRateEjection
+message SuccessRateEjection {
+  // This factor is used to determine the ejection threshold for success rate
+  // outlier ejection. The ejection threshold is the difference between the
+  // mean success rate, and the product of this factor and the standard
+  // deviation of the mean success rate: mean - (stdev *
+  // success_rate_stdev_factor). This factor is divided by a thousand to get a
+  // double. That is, if the desired factor is 1.9, the runtime value should
+  // be 1900.
+  google.protobuf.UInt32Value stdev_factor = 1;
+
+  // The % chance that an address will be actually ejected when an outlier status
+  // is detected through success rate statistics. This setting can be used to
+  // disable ejection or to ramp it up slowly.
+  google.protobuf.UInt32Value enforcement_percentage = 2;
+
+  // The number of addresses that must have enough request volume to
+  // detect success rate outliers. If the number of addresses is less than this
+  // setting, outlier detection via success rate statistics is not performed
+  // for any addresses.
+  google.protobuf.UInt32Value minimum_hosts = 3;
+
+  // The minimum number of total requests that must be collected in one
+  // interval (as defined by the interval duration above) to include this address
+  // in success rate based outlier detection. If the volume is lower than this
+  // setting, outlier detection via success rate statistics is not performed
+  // for that address.
+  google.protobuf.UInt32Value request_volume = 4;
 }
 
 // SSL/TLS related settings for upstream connections. See Envoy's [TLS
diff --git a/networking/v1beta1/destination_rule_deepcopy.gen.go b/networking/v1beta1/destination_rule_deepcopy.gen.go
index a8f3018dad2..3760b1ce698 100644
--- a/networking/v1beta1/destination_rule_deepcopy.gen.go
+++ b/networking/v1beta1/destination_rule_deepcopy.gen.go
@@ -320,6 +320,48 @@ func (in *OutlierDetection) DeepCopyInterface() interface{} {
 	return in.DeepCopy()
 }
 
+// DeepCopyInto supports using FailurePercentageEjection within kubernetes types, where deepcopy-gen is used.
+func (in *FailurePercentageEjection) DeepCopyInto(out *FailurePercentageEjection) {
+	p := proto.Clone(in).(*FailurePercentageEjection)
+	*out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FailurePercentageEjection. Required by controller-gen.
+func (in *FailurePercentageEjection) DeepCopy() *FailurePercentageEjection {
+	if in == nil {
+		return nil
+	}
+	out := new(FailurePercentageEjection)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new FailurePercentageEjection. Required by controller-gen.
+func (in *FailurePercentageEjection) DeepCopyInterface() interface{} {
+	return in.DeepCopy()
+}
+
+// DeepCopyInto supports using SuccessRateEjection within kubernetes types, where deepcopy-gen is used.
+func (in *SuccessRateEjection) DeepCopyInto(out *SuccessRateEjection) {
+	p := proto.Clone(in).(*SuccessRateEjection)
+	*out = *p
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SuccessRateEjection. Required by controller-gen.
+func (in *SuccessRateEjection) DeepCopy() *SuccessRateEjection {
+	if in == nil {
+		return nil
+	}
+	out := new(SuccessRateEjection)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new SuccessRateEjection. Required by controller-gen.
+func (in *SuccessRateEjection) DeepCopyInterface() interface{} {
+	return in.DeepCopy()
+}
+
 // DeepCopyInto supports using ClientTLSSettings within kubernetes types, where deepcopy-gen is used.
 func (in *ClientTLSSettings) DeepCopyInto(out *ClientTLSSettings) {
 	p := proto.Clone(in).(*ClientTLSSettings)
diff --git a/networking/v1beta1/destination_rule_json.gen.go b/networking/v1beta1/destination_rule_json.gen.go
index ffd201316d3..f0b805a61b8 100644
--- a/networking/v1beta1/destination_rule_json.gen.go
+++ b/networking/v1beta1/destination_rule_json.gen.go
@@ -171,6 +171,28 @@ func (this *OutlierDetection) UnmarshalJSON(b []byte) error {
 	return DestinationRuleUnmarshaler.Unmarshal(bytes.NewReader(b), this)
 }
 
+// MarshalJSON is a custom marshaler for FailurePercentageEjection
+func (this *FailurePercentageEjection) MarshalJSON() ([]byte, error) {
+	str, err := DestinationRuleMarshaler.MarshalToString(this)
+	return []byte(str), err
+}
+
+// UnmarshalJSON is a custom unmarshaler for FailurePercentageEjection
+func (this *FailurePercentageEjection) UnmarshalJSON(b []byte) error {
+	return DestinationRuleUnmarshaler.Unmarshal(bytes.NewReader(b), this)
+}
+
+// MarshalJSON is a custom marshaler for SuccessRateEjection
+func (this *SuccessRateEjection) MarshalJSON() ([]byte, error) {
+	str, err := DestinationRuleMarshaler.MarshalToString(this)
+	return []byte(str), err
+}
+
+// UnmarshalJSON is a custom unmarshaler for SuccessRateEjection
+func (this *SuccessRateEjection) UnmarshalJSON(b []byte) error {
+	return DestinationRuleUnmarshaler.Unmarshal(bytes.NewReader(b), this)
+}
+
 // MarshalJSON is a custom marshaler for ClientTLSSettings
 func (this *ClientTLSSettings) MarshalJSON() ([]byte, error) {
 	str, err := DestinationRuleMarshaler.MarshalToString(this)
diff --git a/proto.lock b/proto.lock
index bf66bb63ed8..3fc5ce414dd 100644
--- a/proto.lock
+++ b/proto.lock
@@ -39830,6 +39830,66 @@
                 "id": 5,
                 "name": "min_health_percent",
                 "type": "int32"
+              },
+              {
+                "id": 10,
+                "name": "failure_percentage_ejection",
+                "type": "FailurePercentageEjection"
+              },
+              {
+                "id": 11,
+                "name": "success_rate_ejection",
+                "type": "SuccessRateEjection"
+              }
+            ]
+          },
+          {
+            "name": "FailurePercentageEjection",
+            "fields": [
+              {
+                "id": 1,
+                "name": "threshold",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 2,
+                "name": "enforcement_percentage",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 3,
+                "name": "minimum_hosts",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 4,
+                "name": "request_volume",
+                "type": "google.protobuf.UInt32Value"
+              }
+            ]
+          },
+          {
+            "name": "SuccessRateEjection",
+            "fields": [
+              {
+                "id": 1,
+                "name": "stdev_factor",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 2,
+                "name": "enforcement_percentage",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 3,
+                "name": "minimum_hosts",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 4,
+                "name": "request_volume",
+                "type": "google.protobuf.UInt32Value"
               }
             ]
           },
@@ -42801,6 +42861,66 @@
                 "id": 5,
                 "name": "min_health_percent",
                 "type": "int32"
+              },
+              {
+                "id": 10,
+                "name": "failure_percentage_ejection",
+                "type": "FailurePercentageEjection"
+              },
+              {
+                "id": 11,
+                "name": "success_rate_ejection",
+                "type": "SuccessRateEjection"
+              }
+            ]
+          },
+          {
+            "name": "FailurePercentageEjection",
+            "fields": [
+              {
+                "id": 1,
+                "name": "threshold",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 2,
+                "name": "enforcement_percentage",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 3,
+                "name": "minimum_hosts",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 4,
+                "name": "request_volume",
+                "type": "google.protobuf.UInt32Value"
+              }
+            ]
+          },
+          {
+            "name": "SuccessRateEjection",
+            "fields": [
+              {
+                "id": 1,
+                "name": "stdev_factor",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 2,
+                "name": "enforcement_percentage",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 3,
+                "name": "minimum_hosts",
+                "type": "google.protobuf.UInt32Value"
+              },
+              {
+                "id": 4,
+                "name": "request_volume",
+                "type": "google.protobuf.UInt32Value"
               }
             ]
           },

From f5dff3632295f3b1d52eebaadb4d377024d6dc20 Mon Sep 17 00:00:00 2001
From: aditya-32 <barik.a@media.net>
Date: Fri, 1 Dec 2023 15:30:31 +0530
Subject: [PATCH 2/2] updated comments

---
 kubernetes/customresourcedefinitions.gen.yaml | 152 ++++++++----------
 networking/v1alpha3/destination_rule.pb.go    |  19 +--
 networking/v1alpha3/destination_rule.pb.html  |  19 +--
 networking/v1alpha3/destination_rule.proto    |  19 +--
 networking/v1beta1/destination_rule.pb.go     |  19 +--
 networking/v1beta1/destination_rule.proto     |  19 +--
 6 files changed, 104 insertions(+), 143 deletions(-)

diff --git a/kubernetes/customresourcedefinitions.gen.yaml b/kubernetes/customresourcedefinitions.gen.yaml
index 4cb481771df..000e8621683 100644
--- a/kubernetes/customresourcedefinitions.gen.yaml
+++ b/kubernetes/customresourcedefinitions.gen.yaml
@@ -542,8 +542,8 @@ spec:
                               nullable: true
                               type: integer
                             failurePercentageEjection:
-                              description: FailurePercent Algorithm for Grpc-xds proxyless
-                                for deciding if the host is an outlier or not.
+                              description: FailurePercent Algorithm for deciding if
+                                the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -558,9 +558,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to perform failure
-                                    percentage-based ejection for this address.
+                                    that must be collected in one interval to perform
+                                    failure percentage-based ejection for this address.
                                   nullable: true
                                   type: integer
                                 threshold:
@@ -588,9 +587,8 @@ spec:
                                 origin failures from external errors.
                               type: boolean
                             successRateEjection:
-                              description: SuccessRateEjection Algorithm for Grpc-xds
-                                proxyless for deciding if the host is an outlier or
-                                not.
+                              description: SuccessRateEjection Algorithm for deciding
+                                if the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -605,9 +603,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to include this
-                                    address in success rate based outlier detection.
+                                    that must be collected in one interval to include
+                                    this address in success rate based outlier detection.
                                   nullable: true
                                   type: integer
                                 stdevFactor:
@@ -889,9 +886,8 @@ spec:
                                     nullable: true
                                     type: integer
                                   failurePercentageEjection:
-                                    description: FailurePercent Algorithm for Grpc-xds
-                                      proxyless for deciding if the host is an outlier
-                                      or not.
+                                    description: FailurePercent Algorithm for deciding
+                                      if the host is an outlier or not.
                                     properties:
                                       enforcementPercentage:
                                         description: The % chance that an address
@@ -908,9 +904,8 @@ spec:
                                         type: integer
                                       requestVolume:
                                         description: The minimum number of total requests
-                                          that must be collected in one interval (as
-                                          defined by the interval duration above)
-                                          to perform failure percentage-based ejection
+                                          that must be collected in one interval to
+                                          perform failure percentage-based ejection
                                           for this address.
                                         nullable: true
                                         type: integer
@@ -943,8 +938,7 @@ spec:
                                     type: boolean
                                   successRateEjection:
                                     description: SuccessRateEjection Algorithm for
-                                      Grpc-xds proxyless for deciding if the host
-                                      is an outlier or not.
+                                      deciding if the host is an outlier or not.
                                     properties:
                                       enforcementPercentage:
                                         description: The % chance that an address
@@ -961,10 +955,9 @@ spec:
                                         type: integer
                                       requestVolume:
                                         description: The minimum number of total requests
-                                          that must be collected in one interval (as
-                                          defined by the interval duration above)
-                                          to include this address in success rate
-                                          based outlier detection.
+                                          that must be collected in one interval to
+                                          include this address in success rate based
+                                          outlier detection.
                                         nullable: true
                                         type: integer
                                       stdevFactor:
@@ -1371,8 +1364,8 @@ spec:
                         nullable: true
                         type: integer
                       failurePercentageEjection:
-                        description: FailurePercent Algorithm for Grpc-xds proxyless
-                          for deciding if the host is an outlier or not.
+                        description: FailurePercent Algorithm for deciding if the
+                          host is an outlier or not.
                         properties:
                           enforcementPercentage:
                             description: The % chance that an address will be actually
@@ -1387,9 +1380,8 @@ spec:
                             type: integer
                           requestVolume:
                             description: The minimum number of total requests that
-                              must be collected in one interval (as defined by the
-                              interval duration above) to perform failure percentage-based
-                              ejection for this address.
+                              must be collected in one interval to perform failure
+                              percentage-based ejection for this address.
                             nullable: true
                             type: integer
                           threshold:
@@ -1417,8 +1409,8 @@ spec:
                           failures from external errors.
                         type: boolean
                       successRateEjection:
-                        description: SuccessRateEjection Algorithm for Grpc-xds proxyless
-                          for deciding if the host is an outlier or not.
+                        description: SuccessRateEjection Algorithm for deciding if
+                          the host is an outlier or not.
                         properties:
                           enforcementPercentage:
                             description: The % chance that an address will be actually
@@ -1433,9 +1425,8 @@ spec:
                             type: integer
                           requestVolume:
                             description: The minimum number of total requests that
-                              must be collected in one interval (as defined by the
-                              interval duration above) to include this address in
-                              success rate based outlier detection.
+                              must be collected in one interval to include this address
+                              in success rate based outlier detection.
                             nullable: true
                             type: integer
                           stdevFactor:
@@ -1710,8 +1701,8 @@ spec:
                               nullable: true
                               type: integer
                             failurePercentageEjection:
-                              description: FailurePercent Algorithm for Grpc-xds proxyless
-                                for deciding if the host is an outlier or not.
+                              description: FailurePercent Algorithm for deciding if
+                                the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -1726,9 +1717,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to perform failure
-                                    percentage-based ejection for this address.
+                                    that must be collected in one interval to perform
+                                    failure percentage-based ejection for this address.
                                   nullable: true
                                   type: integer
                                 threshold:
@@ -1756,9 +1746,8 @@ spec:
                                 origin failures from external errors.
                               type: boolean
                             successRateEjection:
-                              description: SuccessRateEjection Algorithm for Grpc-xds
-                                proxyless for deciding if the host is an outlier or
-                                not.
+                              description: SuccessRateEjection Algorithm for deciding
+                                if the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -1773,9 +1762,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to include this
-                                    address in success rate based outlier detection.
+                                    that must be collected in one interval to include
+                                    this address in success rate based outlier detection.
                                   nullable: true
                                   type: integer
                                 stdevFactor:
@@ -2245,8 +2233,8 @@ spec:
                               nullable: true
                               type: integer
                             failurePercentageEjection:
-                              description: FailurePercent Algorithm for Grpc-xds proxyless
-                                for deciding if the host is an outlier or not.
+                              description: FailurePercent Algorithm for deciding if
+                                the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -2261,9 +2249,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to perform failure
-                                    percentage-based ejection for this address.
+                                    that must be collected in one interval to perform
+                                    failure percentage-based ejection for this address.
                                   nullable: true
                                   type: integer
                                 threshold:
@@ -2291,9 +2278,8 @@ spec:
                                 origin failures from external errors.
                               type: boolean
                             successRateEjection:
-                              description: SuccessRateEjection Algorithm for Grpc-xds
-                                proxyless for deciding if the host is an outlier or
-                                not.
+                              description: SuccessRateEjection Algorithm for deciding
+                                if the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -2308,9 +2294,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to include this
-                                    address in success rate based outlier detection.
+                                    that must be collected in one interval to include
+                                    this address in success rate based outlier detection.
                                   nullable: true
                                   type: integer
                                 stdevFactor:
@@ -2592,9 +2577,8 @@ spec:
                                     nullable: true
                                     type: integer
                                   failurePercentageEjection:
-                                    description: FailurePercent Algorithm for Grpc-xds
-                                      proxyless for deciding if the host is an outlier
-                                      or not.
+                                    description: FailurePercent Algorithm for deciding
+                                      if the host is an outlier or not.
                                     properties:
                                       enforcementPercentage:
                                         description: The % chance that an address
@@ -2611,9 +2595,8 @@ spec:
                                         type: integer
                                       requestVolume:
                                         description: The minimum number of total requests
-                                          that must be collected in one interval (as
-                                          defined by the interval duration above)
-                                          to perform failure percentage-based ejection
+                                          that must be collected in one interval to
+                                          perform failure percentage-based ejection
                                           for this address.
                                         nullable: true
                                         type: integer
@@ -2646,8 +2629,7 @@ spec:
                                     type: boolean
                                   successRateEjection:
                                     description: SuccessRateEjection Algorithm for
-                                      Grpc-xds proxyless for deciding if the host
-                                      is an outlier or not.
+                                      deciding if the host is an outlier or not.
                                     properties:
                                       enforcementPercentage:
                                         description: The % chance that an address
@@ -2664,10 +2646,9 @@ spec:
                                         type: integer
                                       requestVolume:
                                         description: The minimum number of total requests
-                                          that must be collected in one interval (as
-                                          defined by the interval duration above)
-                                          to include this address in success rate
-                                          based outlier detection.
+                                          that must be collected in one interval to
+                                          include this address in success rate based
+                                          outlier detection.
                                         nullable: true
                                         type: integer
                                       stdevFactor:
@@ -3074,8 +3055,8 @@ spec:
                         nullable: true
                         type: integer
                       failurePercentageEjection:
-                        description: FailurePercent Algorithm for Grpc-xds proxyless
-                          for deciding if the host is an outlier or not.
+                        description: FailurePercent Algorithm for deciding if the
+                          host is an outlier or not.
                         properties:
                           enforcementPercentage:
                             description: The % chance that an address will be actually
@@ -3090,9 +3071,8 @@ spec:
                             type: integer
                           requestVolume:
                             description: The minimum number of total requests that
-                              must be collected in one interval (as defined by the
-                              interval duration above) to perform failure percentage-based
-                              ejection for this address.
+                              must be collected in one interval to perform failure
+                              percentage-based ejection for this address.
                             nullable: true
                             type: integer
                           threshold:
@@ -3120,8 +3100,8 @@ spec:
                           failures from external errors.
                         type: boolean
                       successRateEjection:
-                        description: SuccessRateEjection Algorithm for Grpc-xds proxyless
-                          for deciding if the host is an outlier or not.
+                        description: SuccessRateEjection Algorithm for deciding if
+                          the host is an outlier or not.
                         properties:
                           enforcementPercentage:
                             description: The % chance that an address will be actually
@@ -3136,9 +3116,8 @@ spec:
                             type: integer
                           requestVolume:
                             description: The minimum number of total requests that
-                              must be collected in one interval (as defined by the
-                              interval duration above) to include this address in
-                              success rate based outlier detection.
+                              must be collected in one interval to include this address
+                              in success rate based outlier detection.
                             nullable: true
                             type: integer
                           stdevFactor:
@@ -3413,8 +3392,8 @@ spec:
                               nullable: true
                               type: integer
                             failurePercentageEjection:
-                              description: FailurePercent Algorithm for Grpc-xds proxyless
-                                for deciding if the host is an outlier or not.
+                              description: FailurePercent Algorithm for deciding if
+                                the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -3429,9 +3408,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to perform failure
-                                    percentage-based ejection for this address.
+                                    that must be collected in one interval to perform
+                                    failure percentage-based ejection for this address.
                                   nullable: true
                                   type: integer
                                 threshold:
@@ -3459,9 +3437,8 @@ spec:
                                 origin failures from external errors.
                               type: boolean
                             successRateEjection:
-                              description: SuccessRateEjection Algorithm for Grpc-xds
-                                proxyless for deciding if the host is an outlier or
-                                not.
+                              description: SuccessRateEjection Algorithm for deciding
+                                if the host is an outlier or not.
                               properties:
                                 enforcementPercentage:
                                   description: The % chance that an address will be
@@ -3476,9 +3453,8 @@ spec:
                                   type: integer
                                 requestVolume:
                                   description: The minimum number of total requests
-                                    that must be collected in one interval (as defined
-                                    by the interval duration above) to include this
-                                    address in success rate based outlier detection.
+                                    that must be collected in one interval to include
+                                    this address in success rate based outlier detection.
                                   nullable: true
                                   type: integer
                                 stdevFactor:
diff --git a/networking/v1alpha3/destination_rule.pb.go b/networking/v1alpha3/destination_rule.pb.go
index 79cb04595e8..c41075a91a5 100644
--- a/networking/v1alpha3/destination_rule.pb.go
+++ b/networking/v1alpha3/destination_rule.pb.go
@@ -1338,11 +1338,9 @@ type OutlierDetection struct {
 	// disabled by setting it to 0%. The default is 0% as it's not typically
 	// applicable in k8s environments with few pods per service.
 	MinHealthPercent int32 `protobuf:"varint,5,opt,name=min_health_percent,json=minHealthPercent,proto3" json:"min_health_percent,omitempty"`
-	// FailurePercent Algorithm for Grpc-xds proxyless for deciding
-	// if the host is an outlier or not.
+	// FailurePercent Algorithm for deciding if the host is an outlier or not.
 	FailurePercentageEjection *FailurePercentageEjection `protobuf:"bytes,10,opt,name=failure_percentage_ejection,json=failurePercentageEjection,proto3" json:"failure_percentage_ejection,omitempty"`
-	// SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
-	// if the host is an outlier or not.
+	// SuccessRateEjection Algorithm for deciding if the host is an outlier or not.
 	SuccessRateEjection *SuccessRateEjection `protobuf:"bytes,11,opt,name=success_rate_ejection,json=successRateEjection,proto3" json:"success_rate_ejection,omitempty"`
 }
 
@@ -1477,8 +1475,8 @@ type FailurePercentageEjection struct {
 	// If the total number of addresses is less than this value, failure percentage-based
 	// ejection will not be performed.
 	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
-	// The minimum number of total requests that must be collected in one interval (as defined by the
-	// interval duration above) to perform failure percentage-based ejection for this address. If the
+	// The minimum number of total requests that must be collected in one interval
+	// to perform failure percentage-based ejection for this address. If the
 	// volume is lower than this setting, failure percentage-based ejection will not be performed for
 	// this host.
 	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
@@ -1571,10 +1569,9 @@ type SuccessRateEjection struct {
 	// for any addresses.
 	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
 	// The minimum number of total requests that must be collected in one
-	// interval (as defined by the interval duration above) to include this address
-	// in success rate based outlier detection. If the volume is lower than this
-	// setting, outlier detection via success rate statistics is not performed
-	// for that address.
+	// interval to include this address in success rate based outlier detection.
+	// If the volume is lower than this setting, outlier detection via success
+	// rate statistics is not performed for that address.
 	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
 }
 
@@ -1646,7 +1643,7 @@ func (x *SuccessRateEjection) GetRequestVolume() *wrappers.UInt32Value {
 // for connections to upstream database cluster.
 //
 // {{<tabset category-name="example">}}
-// {{<tab name="v1alpha3" category-value="v1alpha3">}}
+// {{<tab name="v1alpha3" category-value="v1lpha3">}}
 // ```yaml
 // apiVersion: networking.istio.io/v1alpha3
 // kind: DestinationRule
diff --git a/networking/v1alpha3/destination_rule.pb.html b/networking/v1alpha3/destination_rule.pb.html
index 00cc73febba..bd70345028e 100644
--- a/networking/v1alpha3/destination_rule.pb.html
+++ b/networking/v1alpha3/destination_rule.pb.html
@@ -910,8 +910,7 @@ <h2 id="OutlierDetection">OutlierDetection</h2>
 <td><code>failurePercentageEjection</code></td>
 <td><code><a href="#FailurePercentageEjection">FailurePercentageEjection</a></code></td>
 <td>
-<p>FailurePercent Algorithm for Grpc-xds proxyless for deciding
-if the host is an outlier or not.</p>
+<p>FailurePercent Algorithm for deciding if the host is an outlier or not.</p>
 
 </td>
 <td>
@@ -922,8 +921,7 @@ <h2 id="OutlierDetection">OutlierDetection</h2>
 <td><code>successRateEjection</code></td>
 <td><code><a href="#SuccessRateEjection">SuccessRateEjection</a></code></td>
 <td>
-<p>SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
-if the host is an outlier or not.</p>
+<p>SuccessRateEjection Algorithm for deciding if the host is an outlier or not.</p>
 
 </td>
 <td>
@@ -993,8 +991,8 @@ <h2 id="FailurePercentageEjection">FailurePercentageEjection</h2>
 <td><code>requestVolume</code></td>
 <td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
 <td>
-<p>The minimum number of total requests that must be collected in one interval (as defined by the
-interval duration above) to perform failure percentage-based ejection for this address. If the
+<p>The minimum number of total requests that must be collected in one interval
+to perform failure percentage-based ejection for this address. If the
 volume is lower than this setting, failure percentage-based ejection will not be performed for
 this host.</p>
 
@@ -1072,10 +1070,9 @@ <h2 id="SuccessRateEjection">SuccessRateEjection</h2>
 <td><code><a href="#google-protobuf-UInt32Value">UInt32Value</a></code></td>
 <td>
 <p>The minimum number of total requests that must be collected in one
-interval (as defined by the interval duration above) to include this address
-in success rate based outlier detection. If the volume is lower than this
-setting, outlier detection via success rate statistics is not performed
-for that address.</p>
+interval to include this address in success rate based outlier detection.
+If the volume is lower than this setting, outlier detection via success
+rate statistics is not performed for that address.</p>
 
 </td>
 <td>
@@ -1093,7 +1090,7 @@ <h2 id="ClientTLSSettings">ClientTLSSettings</h2>
 <p>For example, the following rule configures a client to use mutual TLS
 for connections to upstream database cluster.</p>
 <p>{{<tabset category-name="example">}}
-{{<tab name="v1alpha3" category-value="v1alpha3">}}</p>
+{{<tab name="v1alpha3" category-value="v1lpha3">}}</p>
 <pre><code class="language-yaml">apiVersion: networking.istio.io/v1alpha3
 kind: DestinationRule
 metadata:
diff --git a/networking/v1alpha3/destination_rule.proto b/networking/v1alpha3/destination_rule.proto
index 9d4eda774d6..3e1c97500a6 100644
--- a/networking/v1alpha3/destination_rule.proto
+++ b/networking/v1alpha3/destination_rule.proto
@@ -963,12 +963,10 @@ message OutlierDetection {
   // applicable in k8s environments with few pods per service.
   int32 min_health_percent = 5;
 
-  // FailurePercent Algorithm for Grpc-xds proxyless for deciding
-  // if the host is an outlier or not.
+  // FailurePercent Algorithm for deciding if the host is an outlier or not.
   FailurePercentageEjection failure_percentage_ejection = 10;
 
-  // SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
-  // if the host is an outlier or not.
+  // SuccessRateEjection Algorithm for deciding if the host is an outlier or not.
   SuccessRateEjection success_rate_ejection = 11;
 }
 
@@ -992,8 +990,8 @@ message FailurePercentageEjection {
   // ejection will not be performed.
   google.protobuf.UInt32Value minimum_hosts = 3;
 
-  // The minimum number of total requests that must be collected in one interval (as defined by the
-  // interval duration above) to perform failure percentage-based ejection for this address. If the
+  // The minimum number of total requests that must be collected in one interval
+  // to perform failure percentage-based ejection for this address. If the
   // volume is lower than this setting, failure percentage-based ejection will not be performed for
   // this host.
   google.protobuf.UInt32Value request_volume = 4;
@@ -1025,10 +1023,9 @@ message SuccessRateEjection {
   google.protobuf.UInt32Value minimum_hosts = 3;
 
   // The minimum number of total requests that must be collected in one
-  // interval (as defined by the interval duration above) to include this address
-  // in success rate based outlier detection. If the volume is lower than this
-  // setting, outlier detection via success rate statistics is not performed
-  // for that address.
+  // interval to include this address in success rate based outlier detection.
+  // If the volume is lower than this setting, outlier detection via success
+  // rate statistics is not performed for that address.
   google.protobuf.UInt32Value request_volume = 4;
 }
 
@@ -1040,7 +1037,7 @@ message SuccessRateEjection {
 // for connections to upstream database cluster.
 //
 // {{<tabset category-name="example">}}
-// {{<tab name="v1alpha3" category-value="v1alpha3">}}
+// {{<tab name="v1alpha3" category-value="v1lpha3">}}
 // ```yaml
 // apiVersion: networking.istio.io/v1alpha3
 // kind: DestinationRule
diff --git a/networking/v1beta1/destination_rule.pb.go b/networking/v1beta1/destination_rule.pb.go
index eeaef9db3ca..4d050df44f0 100644
--- a/networking/v1beta1/destination_rule.pb.go
+++ b/networking/v1beta1/destination_rule.pb.go
@@ -1287,11 +1287,9 @@ type OutlierDetection struct {
 	// disabled by setting it to 0%. The default is 0% as it's not typically
 	// applicable in k8s environments with few pods per service.
 	MinHealthPercent int32 `protobuf:"varint,5,opt,name=min_health_percent,json=minHealthPercent,proto3" json:"min_health_percent,omitempty"`
-	// FailurePercent Algorithm for Grpc-xds proxyless for deciding
-	// if the host is an outlier or not.
+	// FailurePercent Algorithm for deciding if the host is an outlier or not.
 	FailurePercentageEjection *FailurePercentageEjection `protobuf:"bytes,10,opt,name=failure_percentage_ejection,json=failurePercentageEjection,proto3" json:"failure_percentage_ejection,omitempty"`
-	// SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
-	// if the host is an outlier or not.
+	// SuccessRateEjection Algorithm for deciding if the host is an outlier or not.
 	SuccessRateEjection *SuccessRateEjection `protobuf:"bytes,11,opt,name=success_rate_ejection,json=successRateEjection,proto3" json:"success_rate_ejection,omitempty"`
 }
 
@@ -1426,8 +1424,8 @@ type FailurePercentageEjection struct {
 	// If the total number of addresses is less than this value, failure percentage-based
 	// ejection will not be performed.
 	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
-	// The minimum number of total requests that must be collected in one interval (as defined by the
-	// interval duration above) to perform failure percentage-based ejection for this address. If the
+	// The minimum number of total requests that must be collected in one interval
+	// to perform failure percentage-based ejection for this address. If the
 	// volume is lower than this setting, failure percentage-based ejection will not be performed for
 	// this host.
 	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
@@ -1520,10 +1518,9 @@ type SuccessRateEjection struct {
 	// for any addresses.
 	MinimumHosts *wrappers.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"minimum_hosts,omitempty"`
 	// The minimum number of total requests that must be collected in one
-	// interval (as defined by the interval duration above) to include this address
-	// in success rate based outlier detection. If the volume is lower than this
-	// setting, outlier detection via success rate statistics is not performed
-	// for that address.
+	// interval to include this address in success rate based outlier detection.
+	// If the volume is lower than this setting, outlier detection via success
+	// rate statistics is not performed for that address.
 	RequestVolume *wrappers.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"`
 }
 
@@ -1595,7 +1592,7 @@ func (x *SuccessRateEjection) GetRequestVolume() *wrappers.UInt32Value {
 // for connections to upstream database cluster.
 //
 // {{<tabset category-name="example">}}
-// {{<tab name="v1alpha3" category-value="v1alpha3">}}
+// {{<tab name="v1alpha3" category-value="v1lpha3">}}
 // ```yaml
 // apiVersion: networking.istio.io/v1alpha3
 // kind: DestinationRule
diff --git a/networking/v1beta1/destination_rule.proto b/networking/v1beta1/destination_rule.proto
index f9899357408..cd20218268c 100644
--- a/networking/v1beta1/destination_rule.proto
+++ b/networking/v1beta1/destination_rule.proto
@@ -912,12 +912,10 @@ message OutlierDetection {
   // applicable in k8s environments with few pods per service.
   int32 min_health_percent = 5;
 
-  // FailurePercent Algorithm for Grpc-xds proxyless for deciding
-  // if the host is an outlier or not.
+  // FailurePercent Algorithm for deciding if the host is an outlier or not.
   FailurePercentageEjection failure_percentage_ejection = 10;
 
-  // SuccessRateEjection Algorithm for Grpc-xds proxyless for deciding
-  // if the host is an outlier or not.
+  // SuccessRateEjection Algorithm for deciding if the host is an outlier or not.
   SuccessRateEjection success_rate_ejection = 11;
 }
 
@@ -941,8 +939,8 @@ message FailurePercentageEjection {
   // ejection will not be performed.
   google.protobuf.UInt32Value minimum_hosts = 3;
 
-  // The minimum number of total requests that must be collected in one interval (as defined by the
-  // interval duration above) to perform failure percentage-based ejection for this address. If the
+  // The minimum number of total requests that must be collected in one interval
+  // to perform failure percentage-based ejection for this address. If the
   // volume is lower than this setting, failure percentage-based ejection will not be performed for
   // this host.
   google.protobuf.UInt32Value request_volume = 4;
@@ -974,10 +972,9 @@ message SuccessRateEjection {
   google.protobuf.UInt32Value minimum_hosts = 3;
 
   // The minimum number of total requests that must be collected in one
-  // interval (as defined by the interval duration above) to include this address
-  // in success rate based outlier detection. If the volume is lower than this
-  // setting, outlier detection via success rate statistics is not performed
-  // for that address.
+  // interval to include this address in success rate based outlier detection.
+  // If the volume is lower than this setting, outlier detection via success
+  // rate statistics is not performed for that address.
   google.protobuf.UInt32Value request_volume = 4;
 }
 
@@ -989,7 +986,7 @@ message SuccessRateEjection {
 // for connections to upstream database cluster.
 //
 // {{<tabset category-name="example">}}
-// {{<tab name="v1alpha3" category-value="v1alpha3">}}
+// {{<tab name="v1alpha3" category-value="v1lpha3">}}
 // ```yaml
 // apiVersion: networking.istio.io/v1alpha3
 // kind: DestinationRule