From 7ce53669b94a89e0ea7cdb0b262cbebe187bf2fc Mon Sep 17 00:00:00 2001 From: Prashanth Josyula Date: Sat, 29 Nov 2025 19:16:03 -0800 Subject: [PATCH] Add gateway_selector field to VirtualService for label-based gateway selection This commit introduces a new `gateway_selector` field to the VirtualService API that allows selecting gateways using label selectors instead of explicit names, following the Kubernetes Service selector pattern. Changes: - Add GatewayReference message with name and selector fields - Add gateway_selector field to VirtualService (field number 7) - Update documentation with examples and usage patterns - Mark gateways and gateway_selector as mutually exclusive - Generate corresponding Go code and CRD definitions The new field enables dynamic gateway selection, reducing operational overhead when updating or replacing gateways across multiple VirtualServices. Fixes: #58426 --- kubernetes/customresourcedefinitions.gen.yaml | 45 ++ networking/v1/virtual_service_alias.gen.go | 31 + networking/v1alpha3/virtual_service.pb.go | 532 +++++++++++------- networking/v1alpha3/virtual_service.pb.html | 93 ++- networking/v1alpha3/virtual_service.proto | 76 +++ .../v1alpha3/virtual_service_deepcopy.gen.go | 21 + .../v1alpha3/virtual_service_json.gen.go | 11 + .../v1beta1/virtual_service_alias.gen.go | 31 + 8 files changed, 645 insertions(+), 195 deletions(-) diff --git a/kubernetes/customresourcedefinitions.gen.yaml b/kubernetes/customresourcedefinitions.gen.yaml index 74be765fc5a..7830b2dfed2 100644 --- a/kubernetes/customresourcedefinitions.gen.yaml +++ b/kubernetes/customresourcedefinitions.gen.yaml @@ -10581,6 +10581,21 @@ spec: items: type: string type: array + gatewaySelector: + description: Gateway selector allows selecting gateways using label + selectors instead of explicit names. + items: + properties: + name: + description: Name specifies the gateway by name. + type: string + selector: + additionalProperties: + type: string + description: Selector specifies a label selector to match gateways. + type: object + type: object + type: array gateways: description: The names of gateways and sidecars that should apply these routes. @@ -11633,6 +11648,21 @@ spec: items: type: string type: array + gatewaySelector: + description: Gateway selector allows selecting gateways using label + selectors instead of explicit names. + items: + properties: + name: + description: Name specifies the gateway by name. + type: string + selector: + additionalProperties: + type: string + description: Selector specifies a label selector to match gateways. + type: object + type: object + type: array gateways: description: The names of gateways and sidecars that should apply these routes. @@ -12685,6 +12715,21 @@ spec: items: type: string type: array + gatewaySelector: + description: Gateway selector allows selecting gateways using label + selectors instead of explicit names. + items: + properties: + name: + description: Name specifies the gateway by name. + type: string + selector: + additionalProperties: + type: string + description: Selector specifies a label selector to match gateways. + type: object + type: object + type: array gateways: description: The names of gateways and sidecars that should apply these routes. diff --git a/networking/v1/virtual_service_alias.gen.go b/networking/v1/virtual_service_alias.gen.go index 2ce6d259235..a30829cddc2 100644 --- a/networking/v1/virtual_service_alias.gen.go +++ b/networking/v1/virtual_service_alias.gen.go @@ -31,6 +31,37 @@ import "istio.io/api/networking/v1alpha3" // --> type VirtualService = v1alpha3.VirtualService +// GatewayReference specifies a reference to a gateway either by name or by label selector. +// This allows for flexible gateway selection in VirtualService configurations. +// +// Example using name: +// ```yaml +// gateway_selector: +// - name: "my-gateway" +// - name: "istio-system/another-gateway" +// ``` +// +// Example using label selector (Kubernetes-style): +// ```yaml +// gateway_selector: +// - selector: +// env: "prod" +// version: "v1" +// - selector: +// region: "us-east" +// +// ``` +// +// Example mixing both: +// ```yaml +// gateway_selector: +// - name: "mesh" +// - selector: +// env: "prod" +// +// ``` +type GatewayReference = v1alpha3.GatewayReference + // Destination indicates the network addressable service to which the // request/connection will be sent after processing a routing rule. The // destination.host should unambiguously refer to a service in the service diff --git a/networking/v1alpha3/virtual_service.pb.go b/networking/v1alpha3/virtual_service.pb.go index 3979d99bbce..b1d87a07cd4 100644 --- a/networking/v1alpha3/virtual_service.pb.go +++ b/networking/v1alpha3/virtual_service.pb.go @@ -179,7 +179,7 @@ func (x HTTPRedirect_RedirectPortSelection) Number() protoreflect.EnumNumber { // Deprecated: Use HTTPRedirect_RedirectPortSelection.Descriptor instead. func (HTTPRedirect_RedirectPortSelection) EnumDescriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{12, 0} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{13, 0} } type CorsPolicy_UnmatchedPreflights int32 @@ -233,7 +233,7 @@ func (x CorsPolicy_UnmatchedPreflights) Number() protoreflect.EnumNumber { // Deprecated: Use CorsPolicy_UnmatchedPreflights.Descriptor instead. func (CorsPolicy_UnmatchedPreflights) EnumDescriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19, 0} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{20, 0} } // Configuration affecting traffic routing. @@ -307,7 +307,29 @@ type VirtualService struct { // sidecars in the mesh. If a list of gateway names is provided, the // rules will apply only to the gateways. To apply the rules to both // gateways and sidecars, specify `mesh` as one of the gateway names. + // + // **Note:** This field is mutually exclusive with `gateway_selector`. If both + // are specified, `gateway_selector` takes precedence. Gateways []string `protobuf:"bytes,2,rep,name=gateways,proto3" json:"gateways,omitempty"` + // Gateway selector allows selecting gateways using label selectors instead of + // explicit names. This provides more flexibility for dynamic gateway selection. + // Each entry can specify either a gateway name or a label selector. + // + // Example: + // ```yaml + // gateway_selector: + // - name: "mesh" + // - selector: + // env: "prod" + // version: "v1" + // - selector: + // region: "us-east" + // + // ``` + // + // **Note:** This field is mutually exclusive with `gateways`. If both are + // specified, `gateway_selector` takes precedence. + GatewaySelector []*GatewayReference `protobuf:"bytes,7,rep,name=gateway_selector,json=gatewaySelector,proto3" json:"gateway_selector,omitempty"` // An ordered list of route rules for HTTP traffic. HTTP routes will be // applied to platform service ports using HTTP/HTTP2/GRPC protocols, gateway // ports with protocol HTTP/HTTP2/GRPC/TLS-terminated-HTTPS and service @@ -389,6 +411,13 @@ func (x *VirtualService) GetGateways() []string { return nil } +func (x *VirtualService) GetGatewaySelector() []*GatewayReference { + if x != nil { + return x.GatewaySelector + } + return nil +} + func (x *VirtualService) GetHttp() []*HTTPRoute { if x != nil { return x.Http @@ -417,6 +446,110 @@ func (x *VirtualService) GetExportTo() []string { return nil } +// GatewayReference specifies a reference to a gateway either by name or by label selector. +// This allows for flexible gateway selection in VirtualService configurations. +// +// Example using name: +// ```yaml +// gateway_selector: +// - name: "my-gateway" +// - name: "istio-system/another-gateway" +// ``` +// +// Example using label selector (Kubernetes-style): +// ```yaml +// gateway_selector: +// - selector: +// env: "prod" +// version: "v1" +// - selector: +// region: "us-east" +// +// ``` +// +// Example mixing both: +// ```yaml +// gateway_selector: +// - name: "mesh" +// - selector: +// env: "prod" +// +// ``` +type GatewayReference struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Name specifies the gateway by name. This can be a simple name like "my-gateway" + // or a namespaced name like "istio-system/my-gateway". + // The reserved word "mesh" can be used to refer to all sidecars in the mesh. + // + // **Note:** This field is mutually exclusive with `selector`. If both are specified, + // `selector` takes precedence. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Selector specifies a label selector to match gateways. All labels in the selector + // must be present on the gateway for it to match (subset matching). + // + // Example: + // ```yaml + // selector: + // + // env: "prod" + // version: "v1" + // region: "us-east" + // + // ``` + // + // This will match any gateway that has all three labels with the specified values. + // + // **Note:** This field is mutually exclusive with `name`. If both are specified, + // `selector` takes precedence. + Selector map[string]string `protobuf:"bytes,2,rep,name=selector,proto3" json:"selector,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GatewayReference) Reset() { + *x = GatewayReference{} + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GatewayReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GatewayReference) ProtoMessage() {} + +func (x *GatewayReference) ProtoReflect() protoreflect.Message { + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GatewayReference.ProtoReflect.Descriptor instead. +func (*GatewayReference) Descriptor() ([]byte, []int) { + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{1} +} + +func (x *GatewayReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *GatewayReference) GetSelector() map[string]string { + if x != nil { + return x.Selector + } + return nil +} + // Destination indicates the network addressable service to which the // request/connection will be sent after processing a routing rule. The // destination.host should unambiguously refer to a service in the service @@ -595,7 +728,7 @@ type Destination struct { func (x *Destination) Reset() { *x = Destination{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[1] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -607,7 +740,7 @@ func (x *Destination) String() string { func (*Destination) ProtoMessage() {} func (x *Destination) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[1] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -620,7 +753,7 @@ func (x *Destination) ProtoReflect() protoreflect.Message { // Deprecated: Use Destination.ProtoReflect.Descriptor instead. func (*Destination) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{1} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{2} } func (x *Destination) GetHost() string { @@ -745,7 +878,7 @@ type HTTPRoute struct { func (x *HTTPRoute) Reset() { *x = HTTPRoute{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[2] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -757,7 +890,7 @@ func (x *HTTPRoute) String() string { func (*HTTPRoute) ProtoMessage() {} func (x *HTTPRoute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[2] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -770,7 +903,7 @@ func (x *HTTPRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRoute.ProtoReflect.Descriptor instead. func (*HTTPRoute) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{2} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{3} } func (x *HTTPRoute) GetName() string { @@ -971,7 +1104,7 @@ type Delegate struct { func (x *Delegate) Reset() { *x = Delegate{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[3] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -983,7 +1116,7 @@ func (x *Delegate) String() string { func (*Delegate) ProtoMessage() {} func (x *Delegate) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[3] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -996,7 +1129,7 @@ func (x *Delegate) ProtoReflect() protoreflect.Message { // Deprecated: Use Delegate.ProtoReflect.Descriptor instead. func (*Delegate) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{3} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{4} } func (x *Delegate) GetName() string { @@ -1066,7 +1199,7 @@ type Headers struct { func (x *Headers) Reset() { *x = Headers{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[4] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1078,7 +1211,7 @@ func (x *Headers) String() string { func (*Headers) ProtoMessage() {} func (x *Headers) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[4] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1091,7 +1224,7 @@ func (x *Headers) ProtoReflect() protoreflect.Message { // Deprecated: Use Headers.ProtoReflect.Descriptor instead. func (*Headers) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{4} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{5} } func (x *Headers) GetRequest() *Headers_HeaderOperations { @@ -1158,7 +1291,7 @@ type TLSRoute struct { func (x *TLSRoute) Reset() { *x = TLSRoute{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[5] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1170,7 +1303,7 @@ func (x *TLSRoute) String() string { func (*TLSRoute) ProtoMessage() {} func (x *TLSRoute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[5] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1183,7 +1316,7 @@ func (x *TLSRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use TLSRoute.ProtoReflect.Descriptor instead. func (*TLSRoute) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{5} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{6} } func (x *TLSRoute) GetMatch() []*TLSMatchAttributes { @@ -1240,7 +1373,7 @@ type TCPRoute struct { func (x *TCPRoute) Reset() { *x = TCPRoute{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[6] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1252,7 +1385,7 @@ func (x *TCPRoute) String() string { func (*TCPRoute) ProtoMessage() {} func (x *TCPRoute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[6] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1265,7 +1398,7 @@ func (x *TCPRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use TCPRoute.ProtoReflect.Descriptor instead. func (*TCPRoute) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{6} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{7} } func (x *TCPRoute) GetMatch() []*L4MatchAttributes { @@ -1445,7 +1578,7 @@ type HTTPMatchRequest struct { func (x *HTTPMatchRequest) Reset() { *x = HTTPMatchRequest{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[7] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1457,7 +1590,7 @@ func (x *HTTPMatchRequest) String() string { func (*HTTPMatchRequest) ProtoMessage() {} func (x *HTTPMatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[7] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1470,7 +1603,7 @@ func (x *HTTPMatchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPMatchRequest.ProtoReflect.Descriptor instead. func (*HTTPMatchRequest) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{7} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{8} } func (x *HTTPMatchRequest) GetName() string { @@ -1666,7 +1799,7 @@ type HTTPRouteDestination struct { func (x *HTTPRouteDestination) Reset() { *x = HTTPRouteDestination{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[8] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1678,7 +1811,7 @@ func (x *HTTPRouteDestination) String() string { func (*HTTPRouteDestination) ProtoMessage() {} func (x *HTTPRouteDestination) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[8] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1691,7 +1824,7 @@ func (x *HTTPRouteDestination) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRouteDestination.ProtoReflect.Descriptor instead. func (*HTTPRouteDestination) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{8} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{9} } func (x *HTTPRouteDestination) GetDestination() *Destination { @@ -1731,7 +1864,7 @@ type RouteDestination struct { func (x *RouteDestination) Reset() { *x = RouteDestination{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[9] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1743,7 +1876,7 @@ func (x *RouteDestination) String() string { func (*RouteDestination) ProtoMessage() {} func (x *RouteDestination) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[9] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1756,7 +1889,7 @@ func (x *RouteDestination) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteDestination.ProtoReflect.Descriptor instead. func (*RouteDestination) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{9} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{10} } func (x *RouteDestination) GetDestination() *Destination { @@ -1813,7 +1946,7 @@ type L4MatchAttributes struct { func (x *L4MatchAttributes) Reset() { *x = L4MatchAttributes{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[10] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1825,7 +1958,7 @@ func (x *L4MatchAttributes) String() string { func (*L4MatchAttributes) ProtoMessage() {} func (x *L4MatchAttributes) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[10] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1838,7 +1971,7 @@ func (x *L4MatchAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use L4MatchAttributes.ProtoReflect.Descriptor instead. func (*L4MatchAttributes) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{10} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{11} } func (x *L4MatchAttributes) GetDestinationSubnets() []string { @@ -1924,7 +2057,7 @@ type TLSMatchAttributes struct { func (x *TLSMatchAttributes) Reset() { *x = TLSMatchAttributes{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[11] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1936,7 +2069,7 @@ func (x *TLSMatchAttributes) String() string { func (*TLSMatchAttributes) ProtoMessage() {} func (x *TLSMatchAttributes) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[11] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1949,7 +2082,7 @@ func (x *TLSMatchAttributes) ProtoReflect() protoreflect.Message { // Deprecated: Use TLSMatchAttributes.ProtoReflect.Descriptor instead. func (*TLSMatchAttributes) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{11} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{12} } func (x *TLSMatchAttributes) GetSniHosts() []string { @@ -2049,7 +2182,7 @@ type HTTPRedirect struct { func (x *HTTPRedirect) Reset() { *x = HTTPRedirect{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[12] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2061,7 +2194,7 @@ func (x *HTTPRedirect) String() string { func (*HTTPRedirect) ProtoMessage() {} func (x *HTTPRedirect) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[12] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2074,7 +2207,7 @@ func (x *HTTPRedirect) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRedirect.ProtoReflect.Descriptor instead. func (*HTTPRedirect) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{12} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{13} } func (x *HTTPRedirect) GetUri() string { @@ -2246,7 +2379,7 @@ type HTTPDirectResponse struct { func (x *HTTPDirectResponse) Reset() { *x = HTTPDirectResponse{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2258,7 +2391,7 @@ func (x *HTTPDirectResponse) String() string { func (*HTTPDirectResponse) ProtoMessage() {} func (x *HTTPDirectResponse) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2271,7 +2404,7 @@ func (x *HTTPDirectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPDirectResponse.ProtoReflect.Descriptor instead. func (*HTTPDirectResponse) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{13} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{14} } func (x *HTTPDirectResponse) GetStatus() uint32 { @@ -2301,7 +2434,7 @@ type HTTPBody struct { func (x *HTTPBody) Reset() { *x = HTTPBody{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2313,7 +2446,7 @@ func (x *HTTPBody) String() string { func (*HTTPBody) ProtoMessage() {} func (x *HTTPBody) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2326,7 +2459,7 @@ func (x *HTTPBody) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPBody.ProtoReflect.Descriptor instead. func (*HTTPBody) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{14} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{15} } func (x *HTTPBody) GetSpecifier() isHTTPBody_Specifier { @@ -2417,7 +2550,7 @@ type HTTPRewrite struct { func (x *HTTPRewrite) Reset() { *x = HTTPRewrite{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2429,7 +2562,7 @@ func (x *HTTPRewrite) String() string { func (*HTTPRewrite) ProtoMessage() {} func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2442,7 +2575,7 @@ func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRewrite.ProtoReflect.Descriptor instead. func (*HTTPRewrite) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{15} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{16} } func (x *HTTPRewrite) GetUri() string { @@ -2488,7 +2621,7 @@ type RegexRewrite struct { func (x *RegexRewrite) Reset() { *x = RegexRewrite{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2500,7 +2633,7 @@ func (x *RegexRewrite) String() string { func (*RegexRewrite) ProtoMessage() {} func (x *RegexRewrite) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2513,7 +2646,7 @@ func (x *RegexRewrite) ProtoReflect() protoreflect.Message { // Deprecated: Use RegexRewrite.ProtoReflect.Descriptor instead. func (*RegexRewrite) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{16} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{17} } func (x *RegexRewrite) GetMatch() string { @@ -2546,7 +2679,7 @@ type StringMatch struct { func (x *StringMatch) Reset() { *x = StringMatch{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2558,7 +2691,7 @@ func (x *StringMatch) String() string { func (*StringMatch) ProtoMessage() {} func (x *StringMatch) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2571,7 +2704,7 @@ func (x *StringMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use StringMatch.ProtoReflect.Descriptor instead. func (*StringMatch) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{17} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{18} } func (x *StringMatch) GetMatchType() isStringMatch_MatchType { @@ -2707,7 +2840,7 @@ type HTTPRetry struct { func (x *HTTPRetry) Reset() { *x = HTTPRetry{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2719,7 +2852,7 @@ func (x *HTTPRetry) String() string { func (*HTTPRetry) ProtoMessage() {} func (x *HTTPRetry) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2732,7 +2865,7 @@ func (x *HTTPRetry) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRetry.ProtoReflect.Descriptor instead. func (*HTTPRetry) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{18} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19} } func (x *HTTPRetry) GetAttempts() int32 { @@ -2852,7 +2985,7 @@ type CorsPolicy struct { func (x *CorsPolicy) Reset() { *x = CorsPolicy{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2864,7 +2997,7 @@ func (x *CorsPolicy) String() string { func (*CorsPolicy) ProtoMessage() {} func (x *CorsPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2877,7 +3010,7 @@ func (x *CorsPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use CorsPolicy.ProtoReflect.Descriptor instead. func (*CorsPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{20} } // Deprecated: Marked as deprecated in networking/v1alpha3/virtual_service.proto. @@ -2959,7 +3092,7 @@ type HTTPFaultInjection struct { func (x *HTTPFaultInjection) Reset() { *x = HTTPFaultInjection{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2971,7 +3104,7 @@ func (x *HTTPFaultInjection) String() string { func (*HTTPFaultInjection) ProtoMessage() {} func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2984,7 +3117,7 @@ func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{20} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{21} } func (x *HTTPFaultInjection) GetDelay() *HTTPFaultInjection_Delay { @@ -3021,7 +3154,7 @@ type HTTPMirrorPolicy struct { func (x *HTTPMirrorPolicy) Reset() { *x = HTTPMirrorPolicy{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[21] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3033,7 +3166,7 @@ func (x *HTTPMirrorPolicy) String() string { func (*HTTPMirrorPolicy) ProtoMessage() {} func (x *HTTPMirrorPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[21] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3046,7 +3179,7 @@ func (x *HTTPMirrorPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPMirrorPolicy.ProtoReflect.Descriptor instead. func (*HTTPMirrorPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{21} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{22} } func (x *HTTPMirrorPolicy) GetDestination() *Destination { @@ -3075,7 +3208,7 @@ type PortSelector struct { func (x *PortSelector) Reset() { *x = PortSelector{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[22] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3087,7 +3220,7 @@ func (x *PortSelector) String() string { func (*PortSelector) ProtoMessage() {} func (x *PortSelector) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[22] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3100,7 +3233,7 @@ func (x *PortSelector) ProtoReflect() protoreflect.Message { // Deprecated: Use PortSelector.ProtoReflect.Descriptor instead. func (*PortSelector) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{22} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{23} } func (x *PortSelector) GetNumber() uint32 { @@ -3120,7 +3253,7 @@ type Percent struct { func (x *Percent) Reset() { *x = Percent{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[23] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3132,7 +3265,7 @@ func (x *Percent) String() string { func (*Percent) ProtoMessage() {} func (x *Percent) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[23] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3145,7 +3278,7 @@ func (x *Percent) ProtoReflect() protoreflect.Message { // Deprecated: Use Percent.ProtoReflect.Descriptor instead. func (*Percent) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{23} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{24} } func (x *Percent) GetValue() float64 { @@ -3171,7 +3304,7 @@ type Headers_HeaderOperations struct { func (x *Headers_HeaderOperations) Reset() { *x = Headers_HeaderOperations{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[24] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3183,7 +3316,7 @@ func (x *Headers_HeaderOperations) String() string { func (*Headers_HeaderOperations) ProtoMessage() {} func (x *Headers_HeaderOperations) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[24] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3196,7 +3329,7 @@ func (x *Headers_HeaderOperations) ProtoReflect() protoreflect.Message { // Deprecated: Use Headers_HeaderOperations.ProtoReflect.Descriptor instead. func (*Headers_HeaderOperations) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{4, 0} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{5, 0} } func (x *Headers_HeaderOperations) GetSet() map[string]string { @@ -3277,7 +3410,7 @@ type HTTPFaultInjection_Delay struct { func (x *HTTPFaultInjection_Delay) Reset() { *x = HTTPFaultInjection_Delay{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[33] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3289,7 +3422,7 @@ func (x *HTTPFaultInjection_Delay) String() string { func (*HTTPFaultInjection_Delay) ProtoMessage() {} func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[33] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3302,7 +3435,7 @@ func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection_Delay.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection_Delay) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{20, 0} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{21, 0} } // Deprecated: Marked as deprecated in networking/v1alpha3/virtual_service.proto. @@ -3413,7 +3546,7 @@ type HTTPFaultInjection_Abort struct { func (x *HTTPFaultInjection_Abort) Reset() { *x = HTTPFaultInjection_Abort{} - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[34] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3425,7 +3558,7 @@ func (x *HTTPFaultInjection_Abort) String() string { func (*HTTPFaultInjection_Abort) ProtoMessage() {} func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[34] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3438,7 +3571,7 @@ func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection_Abort.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection_Abort) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{20, 1} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{21, 1} } func (x *HTTPFaultInjection_Abort) GetErrorType() isHTTPFaultInjection_Abort_ErrorType { @@ -3514,14 +3647,21 @@ var File_networking_v1alpha3_virtual_service_proto protoreflect.FileDescriptor const file_networking_v1alpha3_virtual_service_proto_rawDesc = "" + "\n" + - ")networking/v1alpha3/virtual_service.proto\x12\x19istio.networking.v1alpha3\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\x87\x02\n" + + ")networking/v1alpha3/virtual_service.proto\x12\x19istio.networking.v1alpha3\x1a\x1fgoogle/api/field_behavior.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1egoogle/protobuf/wrappers.proto\"\xdf\x02\n" + "\x0eVirtualService\x12\x14\n" + "\x05hosts\x18\x01 \x03(\tR\x05hosts\x12\x1a\n" + - "\bgateways\x18\x02 \x03(\tR\bgateways\x128\n" + + "\bgateways\x18\x02 \x03(\tR\bgateways\x12V\n" + + "\x10gateway_selector\x18\a \x03(\v2+.istio.networking.v1alpha3.GatewayReferenceR\x0fgatewaySelector\x128\n" + "\x04http\x18\x03 \x03(\v2$.istio.networking.v1alpha3.HTTPRouteR\x04http\x125\n" + "\x03tls\x18\x05 \x03(\v2#.istio.networking.v1alpha3.TLSRouteR\x03tls\x125\n" + "\x03tcp\x18\x04 \x03(\v2#.istio.networking.v1alpha3.TCPRouteR\x03tcp\x12\x1b\n" + - "\texport_to\x18\x06 \x03(\tR\bexportTo\"|\n" + + "\texport_to\x18\x06 \x03(\tR\bexportTo\"\xba\x01\n" + + "\x10GatewayReference\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12U\n" + + "\bselector\x18\x02 \x03(\v29.istio.networking.v1alpha3.GatewayReference.SelectorEntryR\bselector\x1a;\n" + + "\rSelectorEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"|\n" + "\vDestination\x12\x18\n" + "\x04host\x18\x01 \x01(\tB\x04\xe2A\x01\x02R\x04host\x12\x16\n" + "\x06subset\x18\x02 \x01(\tR\x06subset\x12;\n" + @@ -3724,117 +3864,121 @@ func file_networking_v1alpha3_virtual_service_proto_rawDescGZIP() []byte { } var file_networking_v1alpha3_virtual_service_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_networking_v1alpha3_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 35) +var file_networking_v1alpha3_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 37) var file_networking_v1alpha3_virtual_service_proto_goTypes = []any{ (HTTPRedirect_RedirectPortSelection)(0), // 0: istio.networking.v1alpha3.HTTPRedirect.RedirectPortSelection (CorsPolicy_UnmatchedPreflights)(0), // 1: istio.networking.v1alpha3.CorsPolicy.UnmatchedPreflights (*VirtualService)(nil), // 2: istio.networking.v1alpha3.VirtualService - (*Destination)(nil), // 3: istio.networking.v1alpha3.Destination - (*HTTPRoute)(nil), // 4: istio.networking.v1alpha3.HTTPRoute - (*Delegate)(nil), // 5: istio.networking.v1alpha3.Delegate - (*Headers)(nil), // 6: istio.networking.v1alpha3.Headers - (*TLSRoute)(nil), // 7: istio.networking.v1alpha3.TLSRoute - (*TCPRoute)(nil), // 8: istio.networking.v1alpha3.TCPRoute - (*HTTPMatchRequest)(nil), // 9: istio.networking.v1alpha3.HTTPMatchRequest - (*HTTPRouteDestination)(nil), // 10: istio.networking.v1alpha3.HTTPRouteDestination - (*RouteDestination)(nil), // 11: istio.networking.v1alpha3.RouteDestination - (*L4MatchAttributes)(nil), // 12: istio.networking.v1alpha3.L4MatchAttributes - (*TLSMatchAttributes)(nil), // 13: istio.networking.v1alpha3.TLSMatchAttributes - (*HTTPRedirect)(nil), // 14: istio.networking.v1alpha3.HTTPRedirect - (*HTTPDirectResponse)(nil), // 15: istio.networking.v1alpha3.HTTPDirectResponse - (*HTTPBody)(nil), // 16: istio.networking.v1alpha3.HTTPBody - (*HTTPRewrite)(nil), // 17: istio.networking.v1alpha3.HTTPRewrite - (*RegexRewrite)(nil), // 18: istio.networking.v1alpha3.RegexRewrite - (*StringMatch)(nil), // 19: istio.networking.v1alpha3.StringMatch - (*HTTPRetry)(nil), // 20: istio.networking.v1alpha3.HTTPRetry - (*CorsPolicy)(nil), // 21: istio.networking.v1alpha3.CorsPolicy - (*HTTPFaultInjection)(nil), // 22: istio.networking.v1alpha3.HTTPFaultInjection - (*HTTPMirrorPolicy)(nil), // 23: istio.networking.v1alpha3.HTTPMirrorPolicy - (*PortSelector)(nil), // 24: istio.networking.v1alpha3.PortSelector - (*Percent)(nil), // 25: istio.networking.v1alpha3.Percent - (*Headers_HeaderOperations)(nil), // 26: istio.networking.v1alpha3.Headers.HeaderOperations - nil, // 27: istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry - nil, // 28: istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry - nil, // 29: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry - nil, // 30: istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry - nil, // 31: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry - nil, // 32: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry - nil, // 33: istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry - nil, // 34: istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry - (*HTTPFaultInjection_Delay)(nil), // 35: istio.networking.v1alpha3.HTTPFaultInjection.Delay - (*HTTPFaultInjection_Abort)(nil), // 36: istio.networking.v1alpha3.HTTPFaultInjection.Abort - (*duration.Duration)(nil), // 37: google.protobuf.Duration - (*wrappers.UInt32Value)(nil), // 38: google.protobuf.UInt32Value - (*wrappers.BoolValue)(nil), // 39: google.protobuf.BoolValue + (*GatewayReference)(nil), // 3: istio.networking.v1alpha3.GatewayReference + (*Destination)(nil), // 4: istio.networking.v1alpha3.Destination + (*HTTPRoute)(nil), // 5: istio.networking.v1alpha3.HTTPRoute + (*Delegate)(nil), // 6: istio.networking.v1alpha3.Delegate + (*Headers)(nil), // 7: istio.networking.v1alpha3.Headers + (*TLSRoute)(nil), // 8: istio.networking.v1alpha3.TLSRoute + (*TCPRoute)(nil), // 9: istio.networking.v1alpha3.TCPRoute + (*HTTPMatchRequest)(nil), // 10: istio.networking.v1alpha3.HTTPMatchRequest + (*HTTPRouteDestination)(nil), // 11: istio.networking.v1alpha3.HTTPRouteDestination + (*RouteDestination)(nil), // 12: istio.networking.v1alpha3.RouteDestination + (*L4MatchAttributes)(nil), // 13: istio.networking.v1alpha3.L4MatchAttributes + (*TLSMatchAttributes)(nil), // 14: istio.networking.v1alpha3.TLSMatchAttributes + (*HTTPRedirect)(nil), // 15: istio.networking.v1alpha3.HTTPRedirect + (*HTTPDirectResponse)(nil), // 16: istio.networking.v1alpha3.HTTPDirectResponse + (*HTTPBody)(nil), // 17: istio.networking.v1alpha3.HTTPBody + (*HTTPRewrite)(nil), // 18: istio.networking.v1alpha3.HTTPRewrite + (*RegexRewrite)(nil), // 19: istio.networking.v1alpha3.RegexRewrite + (*StringMatch)(nil), // 20: istio.networking.v1alpha3.StringMatch + (*HTTPRetry)(nil), // 21: istio.networking.v1alpha3.HTTPRetry + (*CorsPolicy)(nil), // 22: istio.networking.v1alpha3.CorsPolicy + (*HTTPFaultInjection)(nil), // 23: istio.networking.v1alpha3.HTTPFaultInjection + (*HTTPMirrorPolicy)(nil), // 24: istio.networking.v1alpha3.HTTPMirrorPolicy + (*PortSelector)(nil), // 25: istio.networking.v1alpha3.PortSelector + (*Percent)(nil), // 26: istio.networking.v1alpha3.Percent + nil, // 27: istio.networking.v1alpha3.GatewayReference.SelectorEntry + (*Headers_HeaderOperations)(nil), // 28: istio.networking.v1alpha3.Headers.HeaderOperations + nil, // 29: istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry + nil, // 30: istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry + nil, // 31: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry + nil, // 32: istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry + nil, // 33: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry + nil, // 34: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry + nil, // 35: istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry + nil, // 36: istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry + (*HTTPFaultInjection_Delay)(nil), // 37: istio.networking.v1alpha3.HTTPFaultInjection.Delay + (*HTTPFaultInjection_Abort)(nil), // 38: istio.networking.v1alpha3.HTTPFaultInjection.Abort + (*duration.Duration)(nil), // 39: google.protobuf.Duration + (*wrappers.UInt32Value)(nil), // 40: google.protobuf.UInt32Value + (*wrappers.BoolValue)(nil), // 41: google.protobuf.BoolValue } var file_networking_v1alpha3_virtual_service_proto_depIdxs = []int32{ - 4, // 0: istio.networking.v1alpha3.VirtualService.http:type_name -> istio.networking.v1alpha3.HTTPRoute - 7, // 1: istio.networking.v1alpha3.VirtualService.tls:type_name -> istio.networking.v1alpha3.TLSRoute - 8, // 2: istio.networking.v1alpha3.VirtualService.tcp:type_name -> istio.networking.v1alpha3.TCPRoute - 24, // 3: istio.networking.v1alpha3.Destination.port:type_name -> istio.networking.v1alpha3.PortSelector - 9, // 4: istio.networking.v1alpha3.HTTPRoute.match:type_name -> istio.networking.v1alpha3.HTTPMatchRequest - 10, // 5: istio.networking.v1alpha3.HTTPRoute.route:type_name -> istio.networking.v1alpha3.HTTPRouteDestination - 14, // 6: istio.networking.v1alpha3.HTTPRoute.redirect:type_name -> istio.networking.v1alpha3.HTTPRedirect - 15, // 7: istio.networking.v1alpha3.HTTPRoute.direct_response:type_name -> istio.networking.v1alpha3.HTTPDirectResponse - 5, // 8: istio.networking.v1alpha3.HTTPRoute.delegate:type_name -> istio.networking.v1alpha3.Delegate - 17, // 9: istio.networking.v1alpha3.HTTPRoute.rewrite:type_name -> istio.networking.v1alpha3.HTTPRewrite - 37, // 10: istio.networking.v1alpha3.HTTPRoute.timeout:type_name -> google.protobuf.Duration - 20, // 11: istio.networking.v1alpha3.HTTPRoute.retries:type_name -> istio.networking.v1alpha3.HTTPRetry - 22, // 12: istio.networking.v1alpha3.HTTPRoute.fault:type_name -> istio.networking.v1alpha3.HTTPFaultInjection - 3, // 13: istio.networking.v1alpha3.HTTPRoute.mirror:type_name -> istio.networking.v1alpha3.Destination - 23, // 14: istio.networking.v1alpha3.HTTPRoute.mirrors:type_name -> istio.networking.v1alpha3.HTTPMirrorPolicy - 38, // 15: istio.networking.v1alpha3.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value - 25, // 16: istio.networking.v1alpha3.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1alpha3.Percent - 21, // 17: istio.networking.v1alpha3.HTTPRoute.cors_policy:type_name -> istio.networking.v1alpha3.CorsPolicy - 6, // 18: istio.networking.v1alpha3.HTTPRoute.headers:type_name -> istio.networking.v1alpha3.Headers - 26, // 19: istio.networking.v1alpha3.Headers.request:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations - 26, // 20: istio.networking.v1alpha3.Headers.response:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations - 13, // 21: istio.networking.v1alpha3.TLSRoute.match:type_name -> istio.networking.v1alpha3.TLSMatchAttributes - 11, // 22: istio.networking.v1alpha3.TLSRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination - 12, // 23: istio.networking.v1alpha3.TCPRoute.match:type_name -> istio.networking.v1alpha3.L4MatchAttributes - 11, // 24: istio.networking.v1alpha3.TCPRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination - 19, // 25: istio.networking.v1alpha3.HTTPMatchRequest.uri:type_name -> istio.networking.v1alpha3.StringMatch - 19, // 26: istio.networking.v1alpha3.HTTPMatchRequest.scheme:type_name -> istio.networking.v1alpha3.StringMatch - 19, // 27: istio.networking.v1alpha3.HTTPMatchRequest.method:type_name -> istio.networking.v1alpha3.StringMatch - 19, // 28: istio.networking.v1alpha3.HTTPMatchRequest.authority:type_name -> istio.networking.v1alpha3.StringMatch - 29, // 29: istio.networking.v1alpha3.HTTPMatchRequest.headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry - 30, // 30: istio.networking.v1alpha3.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry - 31, // 31: istio.networking.v1alpha3.HTTPMatchRequest.query_params:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry - 32, // 32: istio.networking.v1alpha3.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry - 3, // 33: istio.networking.v1alpha3.HTTPRouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination - 6, // 34: istio.networking.v1alpha3.HTTPRouteDestination.headers:type_name -> istio.networking.v1alpha3.Headers - 3, // 35: istio.networking.v1alpha3.RouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination - 33, // 36: istio.networking.v1alpha3.L4MatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry - 34, // 37: istio.networking.v1alpha3.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry - 0, // 38: istio.networking.v1alpha3.HTTPRedirect.derive_port:type_name -> istio.networking.v1alpha3.HTTPRedirect.RedirectPortSelection - 16, // 39: istio.networking.v1alpha3.HTTPDirectResponse.body:type_name -> istio.networking.v1alpha3.HTTPBody - 18, // 40: istio.networking.v1alpha3.HTTPRewrite.uri_regex_rewrite:type_name -> istio.networking.v1alpha3.RegexRewrite - 37, // 41: istio.networking.v1alpha3.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration - 39, // 42: istio.networking.v1alpha3.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue - 39, // 43: istio.networking.v1alpha3.HTTPRetry.retry_ignore_previous_hosts:type_name -> google.protobuf.BoolValue - 37, // 44: istio.networking.v1alpha3.HTTPRetry.backoff:type_name -> google.protobuf.Duration - 19, // 45: istio.networking.v1alpha3.CorsPolicy.allow_origins:type_name -> istio.networking.v1alpha3.StringMatch - 37, // 46: istio.networking.v1alpha3.CorsPolicy.max_age:type_name -> google.protobuf.Duration - 39, // 47: istio.networking.v1alpha3.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue - 1, // 48: istio.networking.v1alpha3.CorsPolicy.unmatched_preflights:type_name -> istio.networking.v1alpha3.CorsPolicy.UnmatchedPreflights - 35, // 49: istio.networking.v1alpha3.HTTPFaultInjection.delay:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Delay - 36, // 50: istio.networking.v1alpha3.HTTPFaultInjection.abort:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Abort - 3, // 51: istio.networking.v1alpha3.HTTPMirrorPolicy.destination:type_name -> istio.networking.v1alpha3.Destination - 25, // 52: istio.networking.v1alpha3.HTTPMirrorPolicy.percentage:type_name -> istio.networking.v1alpha3.Percent - 27, // 53: istio.networking.v1alpha3.Headers.HeaderOperations.set:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry - 28, // 54: istio.networking.v1alpha3.Headers.HeaderOperations.add:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry - 19, // 55: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch - 19, // 56: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1alpha3.StringMatch - 19, // 57: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch - 37, // 58: istio.networking.v1alpha3.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration - 37, // 59: istio.networking.v1alpha3.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration - 25, // 60: istio.networking.v1alpha3.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1alpha3.Percent - 25, // 61: istio.networking.v1alpha3.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1alpha3.Percent - 62, // [62:62] is the sub-list for method output_type - 62, // [62:62] is the sub-list for method input_type - 62, // [62:62] is the sub-list for extension type_name - 62, // [62:62] is the sub-list for extension extendee - 0, // [0:62] is the sub-list for field type_name + 3, // 0: istio.networking.v1alpha3.VirtualService.gateway_selector:type_name -> istio.networking.v1alpha3.GatewayReference + 5, // 1: istio.networking.v1alpha3.VirtualService.http:type_name -> istio.networking.v1alpha3.HTTPRoute + 8, // 2: istio.networking.v1alpha3.VirtualService.tls:type_name -> istio.networking.v1alpha3.TLSRoute + 9, // 3: istio.networking.v1alpha3.VirtualService.tcp:type_name -> istio.networking.v1alpha3.TCPRoute + 27, // 4: istio.networking.v1alpha3.GatewayReference.selector:type_name -> istio.networking.v1alpha3.GatewayReference.SelectorEntry + 25, // 5: istio.networking.v1alpha3.Destination.port:type_name -> istio.networking.v1alpha3.PortSelector + 10, // 6: istio.networking.v1alpha3.HTTPRoute.match:type_name -> istio.networking.v1alpha3.HTTPMatchRequest + 11, // 7: istio.networking.v1alpha3.HTTPRoute.route:type_name -> istio.networking.v1alpha3.HTTPRouteDestination + 15, // 8: istio.networking.v1alpha3.HTTPRoute.redirect:type_name -> istio.networking.v1alpha3.HTTPRedirect + 16, // 9: istio.networking.v1alpha3.HTTPRoute.direct_response:type_name -> istio.networking.v1alpha3.HTTPDirectResponse + 6, // 10: istio.networking.v1alpha3.HTTPRoute.delegate:type_name -> istio.networking.v1alpha3.Delegate + 18, // 11: istio.networking.v1alpha3.HTTPRoute.rewrite:type_name -> istio.networking.v1alpha3.HTTPRewrite + 39, // 12: istio.networking.v1alpha3.HTTPRoute.timeout:type_name -> google.protobuf.Duration + 21, // 13: istio.networking.v1alpha3.HTTPRoute.retries:type_name -> istio.networking.v1alpha3.HTTPRetry + 23, // 14: istio.networking.v1alpha3.HTTPRoute.fault:type_name -> istio.networking.v1alpha3.HTTPFaultInjection + 4, // 15: istio.networking.v1alpha3.HTTPRoute.mirror:type_name -> istio.networking.v1alpha3.Destination + 24, // 16: istio.networking.v1alpha3.HTTPRoute.mirrors:type_name -> istio.networking.v1alpha3.HTTPMirrorPolicy + 40, // 17: istio.networking.v1alpha3.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value + 26, // 18: istio.networking.v1alpha3.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1alpha3.Percent + 22, // 19: istio.networking.v1alpha3.HTTPRoute.cors_policy:type_name -> istio.networking.v1alpha3.CorsPolicy + 7, // 20: istio.networking.v1alpha3.HTTPRoute.headers:type_name -> istio.networking.v1alpha3.Headers + 28, // 21: istio.networking.v1alpha3.Headers.request:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations + 28, // 22: istio.networking.v1alpha3.Headers.response:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations + 14, // 23: istio.networking.v1alpha3.TLSRoute.match:type_name -> istio.networking.v1alpha3.TLSMatchAttributes + 12, // 24: istio.networking.v1alpha3.TLSRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination + 13, // 25: istio.networking.v1alpha3.TCPRoute.match:type_name -> istio.networking.v1alpha3.L4MatchAttributes + 12, // 26: istio.networking.v1alpha3.TCPRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination + 20, // 27: istio.networking.v1alpha3.HTTPMatchRequest.uri:type_name -> istio.networking.v1alpha3.StringMatch + 20, // 28: istio.networking.v1alpha3.HTTPMatchRequest.scheme:type_name -> istio.networking.v1alpha3.StringMatch + 20, // 29: istio.networking.v1alpha3.HTTPMatchRequest.method:type_name -> istio.networking.v1alpha3.StringMatch + 20, // 30: istio.networking.v1alpha3.HTTPMatchRequest.authority:type_name -> istio.networking.v1alpha3.StringMatch + 31, // 31: istio.networking.v1alpha3.HTTPMatchRequest.headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry + 32, // 32: istio.networking.v1alpha3.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry + 33, // 33: istio.networking.v1alpha3.HTTPMatchRequest.query_params:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry + 34, // 34: istio.networking.v1alpha3.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry + 4, // 35: istio.networking.v1alpha3.HTTPRouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination + 7, // 36: istio.networking.v1alpha3.HTTPRouteDestination.headers:type_name -> istio.networking.v1alpha3.Headers + 4, // 37: istio.networking.v1alpha3.RouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination + 35, // 38: istio.networking.v1alpha3.L4MatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry + 36, // 39: istio.networking.v1alpha3.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry + 0, // 40: istio.networking.v1alpha3.HTTPRedirect.derive_port:type_name -> istio.networking.v1alpha3.HTTPRedirect.RedirectPortSelection + 17, // 41: istio.networking.v1alpha3.HTTPDirectResponse.body:type_name -> istio.networking.v1alpha3.HTTPBody + 19, // 42: istio.networking.v1alpha3.HTTPRewrite.uri_regex_rewrite:type_name -> istio.networking.v1alpha3.RegexRewrite + 39, // 43: istio.networking.v1alpha3.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration + 41, // 44: istio.networking.v1alpha3.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue + 41, // 45: istio.networking.v1alpha3.HTTPRetry.retry_ignore_previous_hosts:type_name -> google.protobuf.BoolValue + 39, // 46: istio.networking.v1alpha3.HTTPRetry.backoff:type_name -> google.protobuf.Duration + 20, // 47: istio.networking.v1alpha3.CorsPolicy.allow_origins:type_name -> istio.networking.v1alpha3.StringMatch + 39, // 48: istio.networking.v1alpha3.CorsPolicy.max_age:type_name -> google.protobuf.Duration + 41, // 49: istio.networking.v1alpha3.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue + 1, // 50: istio.networking.v1alpha3.CorsPolicy.unmatched_preflights:type_name -> istio.networking.v1alpha3.CorsPolicy.UnmatchedPreflights + 37, // 51: istio.networking.v1alpha3.HTTPFaultInjection.delay:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Delay + 38, // 52: istio.networking.v1alpha3.HTTPFaultInjection.abort:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Abort + 4, // 53: istio.networking.v1alpha3.HTTPMirrorPolicy.destination:type_name -> istio.networking.v1alpha3.Destination + 26, // 54: istio.networking.v1alpha3.HTTPMirrorPolicy.percentage:type_name -> istio.networking.v1alpha3.Percent + 29, // 55: istio.networking.v1alpha3.Headers.HeaderOperations.set:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry + 30, // 56: istio.networking.v1alpha3.Headers.HeaderOperations.add:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry + 20, // 57: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch + 20, // 58: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1alpha3.StringMatch + 20, // 59: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch + 39, // 60: istio.networking.v1alpha3.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration + 39, // 61: istio.networking.v1alpha3.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration + 26, // 62: istio.networking.v1alpha3.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1alpha3.Percent + 26, // 63: istio.networking.v1alpha3.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1alpha3.Percent + 64, // [64:64] is the sub-list for method output_type + 64, // [64:64] is the sub-list for method input_type + 64, // [64:64] is the sub-list for extension type_name + 64, // [64:64] is the sub-list for extension extendee + 0, // [0:64] is the sub-list for field type_name } func init() { file_networking_v1alpha3_virtual_service_proto_init() } @@ -3842,24 +3986,24 @@ func file_networking_v1alpha3_virtual_service_proto_init() { if File_networking_v1alpha3_virtual_service_proto != nil { return } - file_networking_v1alpha3_virtual_service_proto_msgTypes[12].OneofWrappers = []any{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[13].OneofWrappers = []any{ (*HTTPRedirect_Port)(nil), (*HTTPRedirect_DerivePort)(nil), } - file_networking_v1alpha3_virtual_service_proto_msgTypes[14].OneofWrappers = []any{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[15].OneofWrappers = []any{ (*HTTPBody_String_)(nil), (*HTTPBody_Bytes)(nil), } - file_networking_v1alpha3_virtual_service_proto_msgTypes[17].OneofWrappers = []any{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[18].OneofWrappers = []any{ (*StringMatch_Exact)(nil), (*StringMatch_Prefix)(nil), (*StringMatch_Regex)(nil), } - file_networking_v1alpha3_virtual_service_proto_msgTypes[33].OneofWrappers = []any{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[35].OneofWrappers = []any{ (*HTTPFaultInjection_Delay_FixedDelay)(nil), (*HTTPFaultInjection_Delay_ExponentialDelay)(nil), } - file_networking_v1alpha3_virtual_service_proto_msgTypes[34].OneofWrappers = []any{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[36].OneofWrappers = []any{ (*HTTPFaultInjection_Abort_HttpStatus)(nil), (*HTTPFaultInjection_Abort_GrpcStatus)(nil), (*HTTPFaultInjection_Abort_Http2Error)(nil), @@ -3870,7 +4014,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_networking_v1alpha3_virtual_service_proto_rawDesc), len(file_networking_v1alpha3_virtual_service_proto_rawDesc)), NumEnums: 2, - NumMessages: 35, + NumMessages: 37, NumExtensions: 0, NumServices: 0, }, diff --git a/networking/v1alpha3/virtual_service.pb.html b/networking/v1alpha3/virtual_service.pb.html index 637a497cc1e..f1cee2fc3f3 100644 --- a/networking/v1alpha3/virtual_service.pb.html +++ b/networking/v1alpha3/virtual_service.pb.html @@ -6,7 +6,7 @@ generator: protoc-gen-docs schema: istio.networking.v1alpha3.VirtualService aliases: [/docs/reference/config/networking/v1alpha3/virtual-service] -number_of_entries: 30 +number_of_entries: 31 ---

Configuration affecting traffic routing. Here are a few terms useful to define in the context of traffic routing.

@@ -148,6 +148,30 @@

VirtualService

sidecars in the mesh. If a list of gateway names is provided, the rules will apply only to the gateways. To apply the rules to both gateways and sidecars, specify mesh as one of the gateway names.

+

Note: This field is mutually exclusive with gateway_selector. If both +are specified, gateway_selector takes precedence.

+ + + + +
+ +
+ +

Gateway selector allows selecting gateways using label selectors instead of +explicit names. This provides more flexibility for dynamic gateway selection. +Each entry can specify either a gateway name or a label selector.

+

Example:

+
gateway_selector:
+- name: "mesh"
+- selector:
+    env: "prod"
+    version: "v1"
+- selector:
+    region: "us-east"
+
+

Note: This field is mutually exclusive with gateways. If both are +specified, gateway_selector takes precedence.

@@ -208,6 +232,73 @@

VirtualService

the virtual service is declared in. Similarly the value “*” is reserved and defines an export to all namespaces.

+ + + + + +

GatewayReference

+
+

GatewayReference specifies a reference to a gateway either by name or by label selector. +This allows for flexible gateway selection in VirtualService configurations.

+

Example using name:

+
gateway_selector:
+- name: "my-gateway"
+- name: "istio-system/another-gateway"
+
+

Example using label selector (Kubernetes-style):

+
gateway_selector:
+- selector:
+    env: "prod"
+    version: "v1"
+- selector:
+    region: "us-east"
+
+

Example mixing both:

+
gateway_selector:
+- name: "mesh"
+- selector:
+    env: "prod"
+
+ + + + + + + + + + + + + + + + diff --git a/networking/v1alpha3/virtual_service.proto b/networking/v1alpha3/virtual_service.proto index d81ad2d72c9..5aa86b72a34 100644 --- a/networking/v1alpha3/virtual_service.proto +++ b/networking/v1alpha3/virtual_service.proto @@ -190,8 +190,30 @@ message VirtualService { // sidecars in the mesh. If a list of gateway names is provided, the // rules will apply only to the gateways. To apply the rules to both // gateways and sidecars, specify `mesh` as one of the gateway names. + // + // **Note:** This field is mutually exclusive with `gateway_selector`. If both + // are specified, `gateway_selector` takes precedence. repeated string gateways = 2; + // Gateway selector allows selecting gateways using label selectors instead of + // explicit names. This provides more flexibility for dynamic gateway selection. + // Each entry can specify either a gateway name or a label selector. + // + // Example: + // ```yaml + // gateway_selector: + // - name: "mesh" + // - selector: + // env: "prod" + // version: "v1" + // - selector: + // region: "us-east" + // ``` + // + // **Note:** This field is mutually exclusive with `gateways`. If both are + // specified, `gateway_selector` takes precedence. + repeated GatewayReference gateway_selector = 7; + // An ordered list of route rules for HTTP traffic. HTTP routes will be // applied to platform service ports using HTTP/HTTP2/GRPC protocols, gateway // ports with protocol HTTP/HTTP2/GRPC/TLS-terminated-HTTPS and service @@ -230,6 +252,60 @@ message VirtualService { repeated string export_to = 6; } +// GatewayReference specifies a reference to a gateway either by name or by label selector. +// This allows for flexible gateway selection in VirtualService configurations. +// +// Example using name: +// ```yaml +// gateway_selector: +// - name: "my-gateway" +// - name: "istio-system/another-gateway" +// ``` +// +// Example using label selector (Kubernetes-style): +// ```yaml +// gateway_selector: +// - selector: +// env: "prod" +// version: "v1" +// - selector: +// region: "us-east" +// ``` +// +// Example mixing both: +// ```yaml +// gateway_selector: +// - name: "mesh" +// - selector: +// env: "prod" +// ``` +message GatewayReference { + // Name specifies the gateway by name. This can be a simple name like "my-gateway" + // or a namespaced name like "istio-system/my-gateway". + // The reserved word "mesh" can be used to refer to all sidecars in the mesh. + // + // **Note:** This field is mutually exclusive with `selector`. If both are specified, + // `selector` takes precedence. + string name = 1; + + // Selector specifies a label selector to match gateways. All labels in the selector + // must be present on the gateway for it to match (subset matching). + // + // Example: + // ```yaml + // selector: + // env: "prod" + // version: "v1" + // region: "us-east" + // ``` + // + // This will match any gateway that has all three labels with the specified values. + // + // **Note:** This field is mutually exclusive with `name`. If both are specified, + // `selector` takes precedence. + map selector = 2; +} + // Destination indicates the network addressable service to which the // request/connection will be sent after processing a routing rule. The // destination.host should unambiguously refer to a service in the service diff --git a/networking/v1alpha3/virtual_service_deepcopy.gen.go b/networking/v1alpha3/virtual_service_deepcopy.gen.go index 4314564c0aa..ea86f0485ec 100644 --- a/networking/v1alpha3/virtual_service_deepcopy.gen.go +++ b/networking/v1alpha3/virtual_service_deepcopy.gen.go @@ -26,6 +26,27 @@ func (in *VirtualService) DeepCopyInterface() interface{} { return in.DeepCopy() } +// DeepCopyInto supports using GatewayReference within kubernetes types, where deepcopy-gen is used. +func (in *GatewayReference) DeepCopyInto(out *GatewayReference) { + p := proto.Clone(in).(*GatewayReference) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GatewayReference. Required by controller-gen. +func (in *GatewayReference) DeepCopy() *GatewayReference { + if in == nil { + return nil + } + out := new(GatewayReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new GatewayReference. Required by controller-gen. +func (in *GatewayReference) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + // DeepCopyInto supports using Destination within kubernetes types, where deepcopy-gen is used. func (in *Destination) DeepCopyInto(out *Destination) { p := proto.Clone(in).(*Destination) diff --git a/networking/v1alpha3/virtual_service_json.gen.go b/networking/v1alpha3/virtual_service_json.gen.go index 63189430c31..90d931d8854 100644 --- a/networking/v1alpha3/virtual_service_json.gen.go +++ b/networking/v1alpha3/virtual_service_json.gen.go @@ -17,6 +17,17 @@ func (this *VirtualService) UnmarshalJSON(b []byte) error { return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) } +// MarshalJSON is a custom marshaler for GatewayReference +func (this *GatewayReference) MarshalJSON() ([]byte, error) { + str, err := VirtualServiceMarshaler.MarshalToString(this) + return []byte(str), err +} + +// UnmarshalJSON is a custom unmarshaler for GatewayReference +func (this *GatewayReference) UnmarshalJSON(b []byte) error { + return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) +} + // MarshalJSON is a custom marshaler for Destination func (this *Destination) MarshalJSON() ([]byte, error) { str, err := VirtualServiceMarshaler.MarshalToString(this) diff --git a/networking/v1beta1/virtual_service_alias.gen.go b/networking/v1beta1/virtual_service_alias.gen.go index 530098b3e50..8762ccb2de4 100644 --- a/networking/v1beta1/virtual_service_alias.gen.go +++ b/networking/v1beta1/virtual_service_alias.gen.go @@ -31,6 +31,37 @@ import "istio.io/api/networking/v1alpha3" // --> type VirtualService = v1alpha3.VirtualService +// GatewayReference specifies a reference to a gateway either by name or by label selector. +// This allows for flexible gateway selection in VirtualService configurations. +// +// Example using name: +// ```yaml +// gateway_selector: +// - name: "my-gateway" +// - name: "istio-system/another-gateway" +// ``` +// +// Example using label selector (Kubernetes-style): +// ```yaml +// gateway_selector: +// - selector: +// env: "prod" +// version: "v1" +// - selector: +// region: "us-east" +// +// ``` +// +// Example mixing both: +// ```yaml +// gateway_selector: +// - name: "mesh" +// - selector: +// env: "prod" +// +// ``` +type GatewayReference = v1alpha3.GatewayReference + // Destination indicates the network addressable service to which the // request/connection will be sent after processing a routing rule. The // destination.host should unambiguously refer to a service in the service
FieldDescription
+
string
+
+

Name specifies the gateway by name. This can be a simple name like “my-gateway” +or a namespaced name like “istio-system/my-gateway”. +The reserved word “mesh” can be used to refer to all sidecars in the mesh.

+

Note: This field is mutually exclusive with selector. If both are specified, +selector takes precedence.

+ +
+
map<string, string>
+
+

Selector specifies a label selector to match gateways. All labels in the selector +must be present on the gateway for it to match (subset matching).

+

Example:

+
selector:
+  env: "prod"
+  version: "v1"
+  region: "us-east"
+
+

This will match any gateway that has all three labels with the specified values.

+

Note: This field is mutually exclusive with name. If both are specified, +selector takes precedence.

+