Skip to content

Commit fbc6b19

Browse files
authored
Merge pull request #4250 from zac-nixon/znixon/more-integration
[gw api] add TLS and UDP listener tests. Fix bugs that were found from the tests
2 parents 4d44974 + cf4bcb5 commit fbc6b19

24 files changed

+670
-307
lines changed

pkg/gateway/model/model_build_target_group.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ func (t *targetGroupBuilderImpl) buildTargetGroup(stack core.Stack,
100100
gw *gwv1.Gateway, lbConfig elbv2gw.LoadBalancerConfiguration, lbIPType elbv2model.IPAddressType, routeDescriptor routeutils.RouteDescriptor, backend routeutils.Backend, backendSGIDToken core.StringToken) (*elbv2model.TargetGroup, error) {
101101

102102
targetGroupProps := backend.ELBV2TargetGroupProps
103-
tgResID := t.buildTargetGroupResourceID(k8s.NamespacedName(gw), k8s.NamespacedName(backend.Service), routeDescriptor.GetRouteNamespacedName(), backend.ServicePort.TargetPort)
103+
tgResID := t.buildTargetGroupResourceID(k8s.NamespacedName(gw), k8s.NamespacedName(backend.Service), routeDescriptor.GetRouteNamespacedName(), routeDescriptor.GetRouteKind(), backend.ServicePort.TargetPort)
104104
if tg, exists := t.tgByResID[tgResID]; exists {
105105
return tg, nil
106106
}
@@ -129,7 +129,7 @@ func (builder *targetGroupBuilderImpl) buildTargetGroupBindingSpec(gw *gwv1.Gate
129129
if targetType == elbv2api.TargetTypeInstance {
130130
targetPort = intstr.FromInt32(backend.ServicePort.NodePort)
131131
}
132-
tgbNetworking := builder.buildTargetGroupBindingNetworking(targetPort, *tgSpec.HealthCheckConfig.Port, *backend.ServicePort, backendSGIDToken)
132+
tgbNetworking := builder.buildTargetGroupBindingNetworking(targetPort, *tgSpec.HealthCheckConfig.Port, tgSpec.Protocol, backendSGIDToken)
133133

134134
multiClusterEnabled := builder.buildTargetGroupBindingMultiClusterFlag(tgProps)
135135

@@ -175,14 +175,14 @@ func (builder *targetGroupBuilderImpl) buildTargetGroupBindingSpec(gw *gwv1.Gate
175175
}
176176
}
177177

178-
func (builder *targetGroupBuilderImpl) buildTargetGroupBindingNetworking(targetPort intstr.IntOrString, healthCheckPort intstr.IntOrString, svcPort corev1.ServicePort, backendSGIDToken core.StringToken) *elbv2model.TargetGroupBindingNetworking {
178+
func (builder *targetGroupBuilderImpl) buildTargetGroupBindingNetworking(targetPort intstr.IntOrString, healthCheckPort intstr.IntOrString, tgProtocol elbv2model.Protocol, backendSGIDToken core.StringToken) *elbv2model.TargetGroupBindingNetworking {
179179
if backendSGIDToken == nil {
180180
return nil
181181
}
182182
protocolTCP := elbv2api.NetworkingProtocolTCP
183183
protocolUDP := elbv2api.NetworkingProtocolUDP
184184

185-
udpSupported := svcPort.Protocol == corev1.ProtocolUDP
185+
udpSupported := tgProtocol == elbv2model.ProtocolUDP || tgProtocol == elbv2model.ProtocolTCP_UDP
186186

187187
if builder.disableRestrictedSGRules {
188188
ports := []elbv2api.NetworkingPort{
@@ -282,15 +282,14 @@ func (builder *targetGroupBuilderImpl) buildTargetGroupSpec(gw *gwv1.Gateway, ro
282282
return elbv2model.TargetGroupSpec{}, err
283283
}
284284
tgPort := builder.buildTargetGroupPort(targetType, *backend.ServicePort)
285-
name := builder.buildTargetGroupName(targetGroupProps, k8s.NamespacedName(gw), route.GetRouteNamespacedName(), k8s.NamespacedName(backend.Service), tgPort, targetType, tgProtocol, tgProtocolVersion)
285+
name := builder.buildTargetGroupName(targetGroupProps, k8s.NamespacedName(gw), route.GetRouteNamespacedName(), route.GetRouteKind(), k8s.NamespacedName(backend.Service), tgPort, targetType, tgProtocol, tgProtocolVersion)
286286

287287
if tgPort == 0 {
288288
if targetType == elbv2model.TargetTypeIP {
289289
return elbv2model.TargetGroupSpec{}, errors.Errorf("TargetGroup port is empty. Are you using the correct service type?")
290290
}
291291
return elbv2model.TargetGroupSpec{}, errors.Errorf("TargetGroup port is empty. When using Instance targets, your service be must of type 'NodePort' or 'LoadBalancer'")
292292
}
293-
294293
return elbv2model.TargetGroupSpec{
295294
Name: name,
296295
TargetType: targetType,
@@ -308,7 +307,7 @@ var invalidTargetGroupNamePattern = regexp.MustCompile("[[:^alnum:]]")
308307

309308
// buildTargetGroupName will calculate the targetGroup's name.
310309
func (builder *targetGroupBuilderImpl) buildTargetGroupName(targetGroupProps *elbv2gw.TargetGroupProps,
311-
gwKey types.NamespacedName, routeKey types.NamespacedName, svcKey types.NamespacedName, tgPort int32,
310+
gwKey types.NamespacedName, routeKey types.NamespacedName, routeKind routeutils.RouteKind, svcKey types.NamespacedName, tgPort int32,
312311
targetType elbv2model.TargetType, tgProtocol elbv2model.Protocol, tgProtocolVersion *elbv2model.ProtocolVersion) string {
313312

314313
if targetGroupProps != nil && targetGroupProps.TargetGroupName != nil {
@@ -321,6 +320,7 @@ func (builder *targetGroupBuilderImpl) buildTargetGroupName(targetGroupProps *el
321320
_, _ = uuidHash.Write([]byte(gwKey.Name))
322321
_, _ = uuidHash.Write([]byte(routeKey.Namespace))
323322
_, _ = uuidHash.Write([]byte(routeKey.Name))
323+
_, _ = uuidHash.Write([]byte(routeKind))
324324
_, _ = uuidHash.Write([]byte(svcKey.Namespace))
325325
_, _ = uuidHash.Write([]byte(svcKey.Name))
326326
_, _ = uuidHash.Write([]byte(strconv.Itoa(int(tgPort))))
@@ -664,8 +664,8 @@ func (builder *targetGroupBuilderImpl) convertMapToAttributes(attributeMap map[s
664664
return convertedAttributes
665665
}
666666

667-
func (builder *targetGroupBuilderImpl) buildTargetGroupResourceID(gwKey types.NamespacedName, svcKey types.NamespacedName, routeKey types.NamespacedName, port intstr.IntOrString) string {
668-
return fmt.Sprintf("%s/%s:%s-%s:%s-%s:%s", gwKey.Namespace, gwKey.Name, routeKey.Namespace, routeKey.Name, svcKey.Namespace, svcKey.Name, port.String())
667+
func (builder *targetGroupBuilderImpl) buildTargetGroupResourceID(gwKey types.NamespacedName, svcKey types.NamespacedName, routeKey types.NamespacedName, routeKind routeutils.RouteKind, port intstr.IntOrString) string {
668+
return fmt.Sprintf("%s/%s:%s-%s:%s-%s-%s:%s", gwKey.Namespace, gwKey.Name, routeKey.Namespace, routeKey.Name, routeKind, svcKey.Namespace, svcKey.Name, port.String())
669669
}
670670

671671
func (builder *targetGroupBuilderImpl) buildTargetGroupBindingNodeSelector(tgProps *elbv2gw.TargetGroupProps, targetType elbv2model.TargetType) *metav1.LabelSelector {

pkg/gateway/model/model_build_target_group_test.go

Lines changed: 37 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func Test_buildTargetGroupSpec(t *testing.T) {
6868
},
6969
},
7070
expectedTgSpec: elbv2model.TargetGroupSpec{
71-
Name: "k8s-myrouten-myroute-d02da2803b",
71+
Name: "k8s-myrouten-myroute-8d8111f6ac",
7272
TargetType: elbv2model.TargetTypeInstance,
7373
Port: awssdk.Int32(8080),
7474
Protocol: elbv2model.ProtocolTCP,
@@ -123,7 +123,7 @@ func Test_buildTargetGroupSpec(t *testing.T) {
123123
},
124124
},
125125
expectedTgSpec: elbv2model.TargetGroupSpec{
126-
Name: "k8s-myrouten-myroute-d146029dfb",
126+
Name: "k8s-myrouten-myroute-224f4b6ea6",
127127
TargetType: elbv2model.TargetTypeInstance,
128128
Port: awssdk.Int32(8080),
129129
Protocol: elbv2model.ProtocolHTTP,
@@ -183,7 +183,7 @@ func Test_buildTargetGroupSpec(t *testing.T) {
183183
},
184184
},
185185
expectedTgSpec: elbv2model.TargetGroupSpec{
186-
Name: "k8s-myrouten-myroute-d9d6c4e6eb",
186+
Name: "k8s-myrouten-myroute-3bce8b0f70",
187187
TargetType: elbv2model.TargetTypeIP,
188188
Port: awssdk.Int32(80),
189189
Protocol: elbv2model.ProtocolTCP,
@@ -238,7 +238,7 @@ func Test_buildTargetGroupSpec(t *testing.T) {
238238
},
239239
},
240240
expectedTgSpec: elbv2model.TargetGroupSpec{
241-
Name: "k8s-myrouten-myroute-400113e816",
241+
Name: "k8s-myrouten-myroute-a44a20bcbf",
242242
TargetType: elbv2model.TargetTypeIP,
243243
Port: awssdk.Int32(80),
244244
Protocol: elbv2model.ProtocolHTTP,
@@ -448,7 +448,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
448448
},
449449
},
450450
expectedTgSpec: elbv2model.TargetGroupSpec{
451-
Name: "k8s-myrouten-myroute-d146029dfb",
451+
Name: "k8s-myrouten-myroute-224f4b6ea6",
452452
TargetType: elbv2model.TargetTypeInstance,
453453
Port: awssdk.Int32(8080),
454454
Protocol: elbv2model.ProtocolHTTP,
@@ -476,7 +476,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
476476
Template: elbv2model.TargetGroupBindingTemplate{
477477
ObjectMeta: metav1.ObjectMeta{
478478
Namespace: "my-svc-ns",
479-
Name: "k8s-myrouten-myroute-d146029dfb",
479+
Name: "k8s-myrouten-myroute-224f4b6ea6",
480480
Annotations: make(map[string]string),
481481
Labels: make(map[string]string),
482482
},
@@ -527,7 +527,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
527527
},
528528
},
529529
expectedTgSpec: elbv2model.TargetGroupSpec{
530-
Name: "k8s-myrouten-myroute-d9d6c4e6eb",
530+
Name: "k8s-myrouten-myroute-3bce8b0f70",
531531
TargetType: elbv2model.TargetTypeIP,
532532
Port: awssdk.Int32(80),
533533
Protocol: elbv2model.ProtocolTCP,
@@ -550,7 +550,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
550550
Template: elbv2model.TargetGroupBindingTemplate{
551551
ObjectMeta: metav1.ObjectMeta{
552552
Namespace: "my-svc-ns",
553-
Name: "k8s-myrouten-myroute-d9d6c4e6eb",
553+
Name: "k8s-myrouten-myroute-3bce8b0f70",
554554
Annotations: make(map[string]string),
555555
Labels: make(map[string]string),
556556
},
@@ -601,7 +601,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
601601
},
602602
},
603603
expectedTgSpec: elbv2model.TargetGroupSpec{
604-
Name: "k8s-myrouten-myroute-400113e816",
604+
Name: "k8s-myrouten-myroute-a44a20bcbf",
605605
TargetType: elbv2model.TargetTypeIP,
606606
Port: awssdk.Int32(80),
607607
Protocol: elbv2model.ProtocolHTTP,
@@ -629,7 +629,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
629629
Template: elbv2model.TargetGroupBindingTemplate{
630630
ObjectMeta: metav1.ObjectMeta{
631631
Namespace: "my-svc-ns",
632-
Name: "k8s-myrouten-myroute-400113e816",
632+
Name: "k8s-myrouten-myroute-a44a20bcbf",
633633
Annotations: make(map[string]string),
634634
Labels: make(map[string]string),
635635
},
@@ -690,7 +690,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
690690
},
691691
},
692692
expectedTgSpec: elbv2model.TargetGroupSpec{
693-
Name: "k8s-myrouten-myroute-400113e816",
693+
Name: "k8s-myrouten-myroute-a44a20bcbf",
694694
TargetType: elbv2model.TargetTypeIP,
695695
Port: awssdk.Int32(80),
696696
Protocol: elbv2model.ProtocolHTTP,
@@ -718,7 +718,7 @@ func Test_buildTargetGroupBindingSpec(t *testing.T) {
718718
Template: elbv2model.TargetGroupBindingTemplate{
719719
ObjectMeta: metav1.ObjectMeta{
720720
Namespace: "my-svc-ns",
721-
Name: "k8s-myrouten-myroute-400113e816",
721+
Name: "k8s-myrouten-myroute-a44a20bcbf",
722722
Annotations: map[string]string{
723723
"foo": "bar",
724724
},
@@ -771,7 +771,7 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
771771

772772
targetPort intstr.IntOrString
773773
healthCheckPort intstr.IntOrString
774-
svcPort corev1.ServicePort
774+
tgProtocol elbv2model.Protocol
775775
backendSGIDToken core.StringToken
776776

777777
expected *elbv2model.TargetGroupBindingNetworking
@@ -804,9 +804,7 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
804804
name: "disable restricted sg rules - with udp",
805805
disableRestrictedSGRules: true,
806806
backendSGIDToken: core.LiteralStringToken("foo"),
807-
svcPort: corev1.ServicePort{
808-
Protocol: corev1.ProtocolUDP,
809-
},
807+
tgProtocol: elbv2model.ProtocolUDP,
810808
expected: &elbv2model.TargetGroupBindingNetworking{
811809
Ingress: []elbv2model.NetworkingIngressRule{
812810
{
@@ -834,11 +832,9 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
834832
{
835833
name: "use restricted sg rules - int hc port",
836834
backendSGIDToken: core.LiteralStringToken("foo"),
837-
svcPort: corev1.ServicePort{
838-
Protocol: corev1.ProtocolTCP,
839-
},
840-
targetPort: intstr80,
841-
healthCheckPort: intstr80,
835+
tgProtocol: elbv2model.ProtocolTCP,
836+
targetPort: intstr80,
837+
healthCheckPort: intstr80,
842838
expected: &elbv2model.TargetGroupBindingNetworking{
843839
Ingress: []elbv2model.NetworkingIngressRule{
844840
{
@@ -862,11 +858,9 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
862858
{
863859
name: "use restricted sg rules - int hc port - udp traffic",
864860
backendSGIDToken: core.LiteralStringToken("foo"),
865-
svcPort: corev1.ServicePort{
866-
Protocol: corev1.ProtocolUDP,
867-
},
868-
targetPort: intstr80,
869-
healthCheckPort: intstr80,
861+
tgProtocol: elbv2model.ProtocolUDP,
862+
targetPort: intstr80,
863+
healthCheckPort: intstr80,
870864
expected: &elbv2model.TargetGroupBindingNetworking{
871865
Ingress: []elbv2model.NetworkingIngressRule{
872866
{
@@ -905,11 +899,9 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
905899
{
906900
name: "use restricted sg rules - str hc port",
907901
backendSGIDToken: core.LiteralStringToken("foo"),
908-
svcPort: corev1.ServicePort{
909-
Protocol: corev1.ProtocolTCP,
910-
},
911-
targetPort: intstr80,
912-
healthCheckPort: intstrTrafficPort,
902+
tgProtocol: elbv2model.ProtocolHTTP,
903+
targetPort: intstr80,
904+
healthCheckPort: intstrTrafficPort,
913905
expected: &elbv2model.TargetGroupBindingNetworking{
914906
Ingress: []elbv2model.NetworkingIngressRule{
915907
{
@@ -933,11 +925,9 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
933925
{
934926
name: "use restricted sg rules - str hc port - udp",
935927
backendSGIDToken: core.LiteralStringToken("foo"),
936-
svcPort: corev1.ServicePort{
937-
Protocol: corev1.ProtocolUDP,
938-
},
939-
targetPort: intstr80,
940-
healthCheckPort: intstrTrafficPort,
928+
tgProtocol: elbv2model.ProtocolUDP,
929+
targetPort: intstr80,
930+
healthCheckPort: intstrTrafficPort,
941931
expected: &elbv2model.TargetGroupBindingNetworking{
942932
Ingress: []elbv2model.NetworkingIngressRule{
943933
{
@@ -976,11 +966,9 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
976966
{
977967
name: "use restricted sg rules - diff hc port",
978968
backendSGIDToken: core.LiteralStringToken("foo"),
979-
svcPort: corev1.ServicePort{
980-
Protocol: corev1.ProtocolTCP,
981-
},
982-
targetPort: intstr80,
983-
healthCheckPort: intstr85,
969+
tgProtocol: elbv2model.ProtocolHTTP,
970+
targetPort: intstr80,
971+
healthCheckPort: intstr85,
984972
expected: &elbv2model.TargetGroupBindingNetworking{
985973
Ingress: []elbv2model.NetworkingIngressRule{
986974
{
@@ -1019,11 +1007,9 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
10191007
{
10201008
name: "use restricted sg rules - str hc port - udp",
10211009
backendSGIDToken: core.LiteralStringToken("foo"),
1022-
svcPort: corev1.ServicePort{
1023-
Protocol: corev1.ProtocolUDP,
1024-
},
1025-
targetPort: intstr80,
1026-
healthCheckPort: intstr85,
1010+
tgProtocol: elbv2model.ProtocolUDP,
1011+
targetPort: intstr80,
1012+
healthCheckPort: intstr85,
10271013
expected: &elbv2model.TargetGroupBindingNetworking{
10281014
Ingress: []elbv2model.NetworkingIngressRule{
10291015
{
@@ -1066,7 +1052,7 @@ func Test_buildTargetGroupBindingNetworking(t *testing.T) {
10661052
disableRestrictedSGRules: tc.disableRestrictedSGRules,
10671053
}
10681054

1069-
result := builder.buildTargetGroupBindingNetworking(tc.targetPort, tc.healthCheckPort, tc.svcPort, tc.backendSGIDToken)
1055+
result := builder.buildTargetGroupBindingNetworking(tc.targetPort, tc.healthCheckPort, tc.tgProtocol, tc.backendSGIDToken)
10701056
assert.Equal(t, tc.expected, result)
10711057
})
10721058
}
@@ -1101,16 +1087,16 @@ func Test_buildTargetGroupName(t *testing.T) {
11011087
{
11021088
name: "no name in props",
11031089
targetGroupProps: &elbv2gw.TargetGroupProps{},
1104-
expected: "k8s-myns-myroute-719950e570",
1090+
expected: "k8s-myns-myroute-27d98b9190",
11051091
},
11061092
{
11071093
name: "no props",
1108-
expected: "k8s-myns-myroute-719950e570",
1094+
expected: "k8s-myns-myroute-27d98b9190",
11091095
},
11101096
{
11111097
name: "protocol specified props",
11121098
protocolVersion: &http2,
1113-
expected: "k8s-myns-myroute-ce262fa9fe",
1099+
expected: "k8s-myns-myroute-d2bd5deaa7",
11141100
},
11151101
}
11161102

@@ -1120,7 +1106,7 @@ func Test_buildTargetGroupName(t *testing.T) {
11201106
clusterName: clusterName,
11211107
}
11221108

1123-
result := builder.buildTargetGroupName(tc.targetGroupProps, gwKey, routeKey, svcKey, 80, elbv2model.TargetTypeIP, elbv2model.ProtocolTCP, tc.protocolVersion)
1109+
result := builder.buildTargetGroupName(tc.targetGroupProps, gwKey, routeKey, routeutils.HTTPRouteKind, svcKey, 80, elbv2model.TargetTypeIP, elbv2model.ProtocolTCP, tc.protocolVersion)
11241110
assert.Equal(t, tc.expected, result)
11251111
})
11261112
}

pkg/gateway/routeutils/backend.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ func commonBackendLoader(ctx context.Context, k8sClient client.Client, typeSpeci
9898
// Otherwise, general error. No need for status update.
9999
return nil, errors.Wrap(err, fmt.Sprintf("Unable to fetch svc object %+v", svcIdentifier))
100100
}
101+
102+
// TODO -- This should be updated, to handle UDP and TCP on the same service port.
103+
// Currently, it will just arbitrarily take one.
104+
101105
var servicePort *corev1.ServicePort
102106

103107
for _, svcPort := range svc.Spec.Ports {
@@ -107,19 +111,19 @@ func commonBackendLoader(ctx context.Context, k8sClient client.Client, typeSpeci
107111
}
108112
}
109113

114+
if servicePort == nil {
115+
initialErrorMessage := fmt.Sprintf("Unable to find service port for port %d", *backendRef.Port)
116+
wrappedGatewayErrorMessage := generateInvalidMessageWithRouteDetails(initialErrorMessage, routeKind, routeIdentifier)
117+
return nil, wrapError(errors.Errorf("%s", initialErrorMessage), gwv1.GatewayReasonListenersNotValid, gwv1.RouteReasonBackendNotFound, &wrappedGatewayErrorMessage, nil)
118+
}
119+
110120
tgConfig, err := LookUpTargetGroupConfiguration(ctx, k8sClient, k8s.NamespacedName(svc))
111121

112122
if err != nil {
113123
// As of right now, this error can only be thrown because of a k8s api error hence no status update.
114124
return nil, errors.Wrap(err, fmt.Sprintf("Unable to fetch tg config object"))
115125
}
116126

117-
if servicePort == nil {
118-
initialErrorMessage := fmt.Sprintf("Unable to find service port for port %d", *backendRef.Port)
119-
wrappedGatewayErrorMessage := generateInvalidMessageWithRouteDetails(initialErrorMessage, routeKind, routeIdentifier)
120-
return nil, wrapError(errors.Errorf("%s", initialErrorMessage), gwv1.GatewayReasonListenersNotValid, gwv1.RouteReasonBackendNotFound, &wrappedGatewayErrorMessage, nil)
121-
}
122-
123127
var tgProps *elbv2gw.TargetGroupProps
124128

125129
if tgConfig != nil {

pkg/gateway/routeutils/constants.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ var allRoutes = map[RouteKind]func(context context.Context, client client.Client
2727
}
2828

2929
// Default protocol map used to infer accepted route kinds when a listener doesn't specify the `allowedRoutes` field.
30-
var defaultProtocolToRouteKindMap = map[gwv1.ProtocolType]RouteKind{
31-
gwv1.TCPProtocolType: TCPRouteKind,
32-
gwv1.UDPProtocolType: UDPRouteKind,
33-
gwv1.TLSProtocolType: TLSRouteKind,
34-
gwv1.HTTPProtocolType: HTTPRouteKind,
35-
gwv1.HTTPSProtocolType: HTTPRouteKind,
30+
var defaultProtocolToRouteKindMap = map[gwv1.ProtocolType][]RouteKind{
31+
gwv1.TCPProtocolType: {TCPRouteKind},
32+
gwv1.UDPProtocolType: {UDPRouteKind},
33+
gwv1.TLSProtocolType: {TLSRouteKind, TCPRouteKind},
34+
gwv1.HTTPProtocolType: {HTTPRouteKind},
35+
gwv1.HTTPSProtocolType: {HTTPRouteKind},
3636
}

0 commit comments

Comments
 (0)