github.com/cilium/cilium@v1.16.2/operator/pkg/model/ingestion/gateway_fixture_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package ingestion 5 6 import ( 7 corev1 "k8s.io/api/core/v1" 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 "k8s.io/apimachinery/pkg/util/intstr" 10 gatewayv1beta1 "sigs.k8s.io/gateway-api/apis/v1" 11 gatewayv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2" 12 13 "github.com/cilium/cilium/operator/pkg/model" 14 ) 15 16 // Gateway API Conformance test resources 17 // https://github.com/kubernetes-sigs/gateway-api/tree/main/conformance/tests 18 19 // Base manifest 20 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/base/manifests.yaml 21 var sameNamespaceGateway = gatewayv1beta1.Gateway{ 22 ObjectMeta: metav1.ObjectMeta{ 23 Name: "same-namespace", 24 Namespace: "gateway-conformance-infra", 25 }, 26 Spec: gatewayv1beta1.GatewaySpec{ 27 GatewayClassName: "cilium", 28 Listeners: []gatewayv1beta1.Listener{ 29 { 30 Name: "http", 31 Port: 80, 32 Protocol: gatewayv1beta1.HTTPProtocolType, 33 TLS: nil, 34 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 35 Namespaces: &gatewayv1beta1.RouteNamespaces{ 36 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 37 }, 38 }, 39 }, 40 }, 41 }, 42 } 43 44 // Base manifest 45 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.1/conformance/base/tls-route-simple-same-namespace.yaml 46 var sameNamespaceTLSGateway = gatewayv1beta1.Gateway{ 47 TypeMeta: metav1.TypeMeta{ 48 Kind: "Gateway", 49 APIVersion: "gateway.networking.k8s.io/v1", 50 }, 51 ObjectMeta: metav1.ObjectMeta{ 52 Name: "gateway-tlsroute", 53 Namespace: "gateway-conformance-infra", 54 }, 55 Spec: gatewayv1beta1.GatewaySpec{ 56 GatewayClassName: "cilium", 57 Listeners: []gatewayv1beta1.Listener{ 58 { 59 Name: "https", 60 Port: 443, 61 Protocol: gatewayv1beta1.TLSProtocolType, 62 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 63 Namespaces: &gatewayv1beta1.RouteNamespaces{ 64 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 65 }, 66 }, 67 TLS: &gatewayv1beta1.GatewayTLSConfig{ 68 Mode: model.AddressOf(gatewayv1beta1.TLSModePassthrough), 69 }, 70 }, 71 }, 72 }, 73 } 74 75 // Base manifest 76 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.1/conformance/base/tls-route-simple-same-namespace.yaml 77 var sameNamespaceTLSRoute = gatewayv1alpha2.TLSRoute{ 78 ObjectMeta: metav1.ObjectMeta{ 79 Name: "gateway-conformance-infra-test", 80 Namespace: "gateway-conformance-infra", 81 }, 82 Spec: gatewayv1alpha2.TLSRouteSpec{ 83 CommonRouteSpec: gatewayv1alpha2.CommonRouteSpec{ 84 ParentRefs: []gatewayv1beta1.ParentReference{ 85 { 86 Name: "gateway-tlsroute", 87 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 88 }, 89 }, 90 }, 91 Hostnames: []gatewayv1beta1.Hostname{ 92 "abc.example.com", 93 }, 94 Rules: []gatewayv1alpha2.TLSRouteRule{ 95 { 96 BackendRefs: []gatewayv1alpha2.BackendRef{ 97 { 98 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 99 Name: "tls-backend", 100 Port: model.AddressOf[gatewayv1beta1.PortNumber](443), 101 }, 102 }, 103 }, 104 }, 105 }, 106 }, 107 } 108 109 //var allNamespacesGateway = gatewayv1beta1.Gateway{ 110 // ObjectMeta: metav1.ObjectMeta{ 111 // Name: "all-namespaces", 112 // Namespace: "gateway-conformance-infra", 113 // }, 114 // Spec: gatewayv1beta1.GatewaySpec{ 115 // GatewayClassName: "cilium", 116 // Listeners: []gatewayv1beta1.Listener{ 117 // { 118 // Name: "http", 119 // Port: 80, 120 // Protocol: gatewayv1beta1.HTTPProtocolType, 121 // TLS: nil, 122 // AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 123 // Namespaces: &gatewayv1beta1.RouteNamespaces{ 124 // From: model.AddressOf(gatewayv1beta1.NamespacesFromAll), 125 // }, 126 // }, 127 // }, 128 // }, 129 // }, 130 //} 131 132 var backendNamespaceGateway = gatewayv1beta1.Gateway{ 133 ObjectMeta: metav1.ObjectMeta{ 134 Name: "backend-namespaces", 135 Namespace: "gateway-conformance-infra", 136 }, 137 Spec: gatewayv1beta1.GatewaySpec{ 138 GatewayClassName: "cilium", 139 Listeners: []gatewayv1beta1.Listener{ 140 { 141 Name: "http", 142 Port: 80, 143 Protocol: gatewayv1beta1.HTTPProtocolType, 144 TLS: nil, 145 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 146 Namespaces: &gatewayv1beta1.RouteNamespaces{ 147 Selector: &metav1.LabelSelector{ 148 MatchLabels: map[string]string{ 149 "gateway-conformance": "backend", 150 }, 151 }, 152 }, 153 }, 154 }, 155 }, 156 }, 157 } 158 159 var allServices = []corev1.Service{ 160 infraBackEndV1Service, 161 infraBackEndV2Service, 162 infraBackEndV3Service, 163 appBackEndV1Service, 164 appBackEndV2Service, 165 webBackendService, 166 tlsBackendService, 167 } 168 169 var infraBackEndV1Service = corev1.Service{ 170 ObjectMeta: metav1.ObjectMeta{ 171 Name: "infra-backend-v1", 172 Namespace: "gateway-conformance-infra", 173 }, 174 Spec: corev1.ServiceSpec{ 175 Ports: []corev1.ServicePort{ 176 { 177 Protocol: "tcp", 178 Port: 8080, 179 TargetPort: intstr.FromInt(3000), 180 }, 181 }, 182 Selector: map[string]string{ 183 "app": "infra-backend-v1", 184 }, 185 }, 186 } 187 188 var infraBackEndV2Service = corev1.Service{ 189 ObjectMeta: metav1.ObjectMeta{ 190 Name: "infra-backend-v2", 191 Namespace: "gateway-conformance-infra", 192 }, 193 Spec: corev1.ServiceSpec{ 194 Ports: []corev1.ServicePort{ 195 { 196 Protocol: "tcp", 197 Port: 8080, 198 TargetPort: intstr.FromInt(3000), 199 }, 200 }, 201 Selector: map[string]string{ 202 "app": "infra-backend-v2", 203 }, 204 }, 205 } 206 207 var infraBackEndV3Service = corev1.Service{ 208 ObjectMeta: metav1.ObjectMeta{ 209 Name: "infra-backend-v3", 210 Namespace: "gateway-conformance-infra", 211 }, 212 Spec: corev1.ServiceSpec{ 213 Ports: []corev1.ServicePort{ 214 { 215 Protocol: "tcp", 216 Port: 8080, 217 TargetPort: intstr.FromInt(3000), 218 }, 219 }, 220 Selector: map[string]string{ 221 "app": "infra-backend-v3", 222 }, 223 }, 224 } 225 226 var appBackEndV1Service = corev1.Service{ 227 ObjectMeta: metav1.ObjectMeta{ 228 Name: "app-backend-v1", 229 Namespace: "gateway-conformance-app-backend", 230 }, 231 Spec: corev1.ServiceSpec{ 232 Ports: []corev1.ServicePort{ 233 { 234 Protocol: "tcp", 235 Port: 8080, 236 TargetPort: intstr.FromInt(3000), 237 }, 238 }, 239 Selector: map[string]string{ 240 "app": "app-backend-v1", 241 }, 242 }, 243 } 244 245 var appBackEndV2Service = corev1.Service{ 246 ObjectMeta: metav1.ObjectMeta{ 247 Name: "app-backend-v2", 248 Namespace: "gateway-conformance-app-backend", 249 }, 250 Spec: corev1.ServiceSpec{ 251 Ports: []corev1.ServicePort{ 252 { 253 Protocol: "tcp", 254 Port: 8080, 255 TargetPort: intstr.FromInt(3000), 256 }, 257 }, 258 Selector: map[string]string{ 259 "app": "app-backend-v2", 260 }, 261 }, 262 } 263 264 var webBackendService = corev1.Service{ 265 ObjectMeta: metav1.ObjectMeta{ 266 Name: "web-backend", 267 Namespace: "gateway-conformance-web-backend", 268 }, 269 Spec: corev1.ServiceSpec{ 270 Ports: []corev1.ServicePort{ 271 { 272 Protocol: "tcp", 273 Port: 8080, 274 TargetPort: intstr.FromInt(3000), 275 }, 276 }, 277 Selector: map[string]string{ 278 "app": "web-backend", 279 }, 280 }, 281 } 282 283 var tlsBackendService = corev1.Service{ 284 ObjectMeta: metav1.ObjectMeta{ 285 Name: "tls-backend", 286 Namespace: "gateway-conformance-infra", 287 }, 288 Spec: corev1.ServiceSpec{ 289 Ports: []corev1.ServicePort{ 290 { 291 Protocol: "tcp", 292 Port: 443, 293 TargetPort: intstr.FromInt(8443), 294 }, 295 }, 296 Selector: map[string]string{ 297 "app": "tls-backend", 298 }, 299 }, 300 } 301 302 // HTTPRoute cross namespace 303 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-cross-namespace.yaml 304 var crossNamespaceHTTPRoute = gatewayv1beta1.HTTPRoute{ 305 ObjectMeta: metav1.ObjectMeta{ 306 Name: "cross-namespace", 307 Namespace: "gateway-conformance-web-backend", 308 }, 309 Spec: gatewayv1beta1.HTTPRouteSpec{ 310 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 311 ParentRefs: []gatewayv1beta1.ParentReference{ 312 { 313 Name: "backend-namespaces", 314 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 315 }, 316 }, 317 }, 318 Rules: []gatewayv1beta1.HTTPRouteRule{ 319 { 320 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 321 { 322 BackendRef: gatewayv1beta1.BackendRef{ 323 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 324 Name: "web-backend", 325 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 326 }, 327 }, 328 }, 329 }, 330 }, 331 }, 332 }, 333 } 334 335 // HTTPRoute exact matching 336 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-exact-path-matching.yaml 337 var exactPathMatchingHTTPRoute = gatewayv1beta1.HTTPRoute{ 338 ObjectMeta: metav1.ObjectMeta{ 339 Name: "exact-matching", 340 Namespace: "gateway-conformance-infra", 341 }, 342 Spec: gatewayv1beta1.HTTPRouteSpec{ 343 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 344 ParentRefs: []gatewayv1beta1.ParentReference{ 345 { 346 Name: "same-namespace", 347 }, 348 }, 349 }, 350 Rules: []gatewayv1beta1.HTTPRouteRule{ 351 { 352 Matches: []gatewayv1beta1.HTTPRouteMatch{ 353 { 354 Path: &gatewayv1beta1.HTTPPathMatch{ 355 Type: model.AddressOf(gatewayv1beta1.PathMatchExact), 356 Value: model.AddressOf("/one"), 357 }, 358 }, 359 }, 360 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 361 { 362 BackendRef: gatewayv1beta1.BackendRef{ 363 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 364 Name: "infra-backend-v1", 365 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 366 }, 367 }, 368 }, 369 }, 370 }, 371 { 372 Matches: []gatewayv1beta1.HTTPRouteMatch{ 373 { 374 Path: &gatewayv1beta1.HTTPPathMatch{ 375 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 376 Value: model.AddressOf("/two"), 377 }, 378 }, 379 }, 380 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 381 { 382 BackendRef: gatewayv1beta1.BackendRef{ 383 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 384 Name: "infra-backend-v2", 385 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 386 }, 387 }, 388 }, 389 }, 390 }, 391 }, 392 }, 393 } 394 395 // HTTRRoute header matching 396 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-header-matching.yaml 397 var headerMatchingHTTPRoute = gatewayv1beta1.HTTPRoute{ 398 ObjectMeta: metav1.ObjectMeta{ 399 Name: "header-matching", 400 Namespace: "gateway-conformance-infra", 401 }, 402 Spec: gatewayv1beta1.HTTPRouteSpec{ 403 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 404 ParentRefs: []gatewayv1beta1.ParentReference{ 405 { 406 Name: "same-namespace", 407 }, 408 }, 409 }, 410 Rules: []gatewayv1beta1.HTTPRouteRule{ 411 { 412 Matches: []gatewayv1beta1.HTTPRouteMatch{ 413 { 414 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 415 { 416 Name: "version", 417 Value: "one", 418 }, 419 }, 420 }, 421 }, 422 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 423 { 424 BackendRef: gatewayv1beta1.BackendRef{ 425 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 426 Name: "infra-backend-v1", 427 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 428 }, 429 }, 430 }, 431 }, 432 }, 433 { 434 Matches: []gatewayv1beta1.HTTPRouteMatch{ 435 { 436 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 437 { 438 Name: "version", 439 Value: "two", 440 }, 441 }, 442 }, 443 }, 444 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 445 { 446 BackendRef: gatewayv1beta1.BackendRef{ 447 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 448 Name: "infra-backend-v2", 449 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 450 }, 451 }, 452 }, 453 }, 454 }, 455 { 456 Matches: []gatewayv1beta1.HTTPRouteMatch{ 457 { 458 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 459 { 460 Name: "version", 461 Value: "two", 462 }, 463 { 464 Name: "color", 465 Value: "orange", 466 }, 467 }, 468 }, 469 }, 470 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 471 { 472 BackendRef: gatewayv1beta1.BackendRef{ 473 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 474 Name: "infra-backend-v1", 475 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 476 }, 477 }, 478 }, 479 }, 480 }, 481 { 482 Matches: []gatewayv1beta1.HTTPRouteMatch{ 483 { 484 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 485 { 486 Name: "color", 487 Value: "blue", 488 }, 489 }, 490 }, 491 { 492 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 493 { 494 Name: "color", 495 Value: "blue", 496 }, 497 }, 498 }, 499 }, 500 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 501 { 502 BackendRef: gatewayv1beta1.BackendRef{ 503 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 504 Name: "infra-backend-v1", 505 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 506 }, 507 }, 508 }, 509 }, 510 }, 511 { 512 Matches: []gatewayv1beta1.HTTPRouteMatch{ 513 { 514 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 515 { 516 Name: "color", 517 Value: "red", 518 }, 519 }, 520 }, 521 { 522 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 523 { 524 Name: "color", 525 Value: "yellow", 526 }, 527 }, 528 }, 529 }, 530 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 531 { 532 BackendRef: gatewayv1beta1.BackendRef{ 533 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 534 Name: "infra-backend-v2", 535 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 536 }, 537 }, 538 }, 539 }, 540 }, 541 }, 542 }, 543 } 544 545 // HTTPRoute hostname intersection 546 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-hostname-intersection.yaml 547 var hostnameIntersectionGateway = &gatewayv1beta1.Gateway{ 548 ObjectMeta: metav1.ObjectMeta{ 549 Name: "httproute-hostname-intersection", 550 Namespace: "gateway-conformance-infra", 551 }, 552 Spec: gatewayv1beta1.GatewaySpec{ 553 GatewayClassName: "cilium", 554 Listeners: []gatewayv1beta1.Listener{ 555 { 556 Name: "listener-1", 557 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("very.specific.com"), 558 Port: 80, 559 Protocol: "HTTP", 560 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 561 Namespaces: &gatewayv1beta1.RouteNamespaces{ 562 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 563 }, 564 }, 565 }, 566 { 567 Name: "listener-2", 568 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.wildcard.io"), 569 Port: 80, 570 Protocol: "HTTP", 571 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 572 Namespaces: &gatewayv1beta1.RouteNamespaces{ 573 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 574 }, 575 }, 576 }, 577 { 578 Name: "listener-3", 579 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.anotherwildcard.io"), 580 Port: 80, 581 Protocol: "HTTP", 582 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 583 Namespaces: &gatewayv1beta1.RouteNamespaces{ 584 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 585 }, 586 }, 587 }, 588 }, 589 }, 590 } 591 592 var hostnameIntersectionHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 593 { 594 ObjectMeta: metav1.ObjectMeta{ 595 Name: "specific-host-matches-listener-specific-host", 596 Namespace: "gateway-conformance-infra", 597 }, 598 Spec: gatewayv1beta1.HTTPRouteSpec{ 599 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 600 ParentRefs: []gatewayv1beta1.ParentReference{ 601 { 602 Name: "httproute-hostname-intersection", 603 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 604 }, 605 }, 606 }, 607 Hostnames: []gatewayv1beta1.Hostname{ 608 "non.matching.com", 609 "*.nonmatchingwildcard.io", // matches listener-1's specific host 610 "very.specific.com", // # matches listener-1's specific host 611 }, 612 Rules: []gatewayv1beta1.HTTPRouteRule{ 613 { 614 Matches: []gatewayv1beta1.HTTPRouteMatch{ 615 { 616 Path: &gatewayv1beta1.HTTPPathMatch{ 617 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 618 Value: model.AddressOf("/s1"), 619 }, 620 }, 621 }, 622 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 623 { 624 BackendRef: gatewayv1beta1.BackendRef{ 625 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 626 Name: "infra-backend-v1", 627 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 628 }, 629 }, 630 }, 631 }, 632 }, 633 }, 634 }, 635 }, 636 { 637 ObjectMeta: metav1.ObjectMeta{ 638 Name: "specific-host-matches-listener-wildcard-host", 639 Namespace: "gateway-conformance-infra", 640 }, 641 Spec: gatewayv1beta1.HTTPRouteSpec{ 642 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 643 ParentRefs: []gatewayv1beta1.ParentReference{ 644 { 645 Name: "httproute-hostname-intersection", 646 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 647 }, 648 }, 649 }, 650 Hostnames: []gatewayv1beta1.Hostname{ 651 "non.matching.com", 652 "wildcard.io", 653 "foo.wildcard.io", // matches listener-2's wildcard host 654 "bar.wildcard.io", // matches listener-2's wildcard host 655 "foo.bar.wildcard.io", // matches listener-2's wildcard host 656 }, 657 Rules: []gatewayv1beta1.HTTPRouteRule{ 658 { 659 Matches: []gatewayv1beta1.HTTPRouteMatch{ 660 { 661 Path: &gatewayv1beta1.HTTPPathMatch{ 662 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 663 Value: model.AddressOf("/s2"), 664 }, 665 }, 666 }, 667 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 668 { 669 BackendRef: gatewayv1beta1.BackendRef{ 670 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 671 Name: "infra-backend-v2", 672 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 673 }, 674 }, 675 }, 676 }, 677 }, 678 }, 679 }, 680 }, 681 { 682 ObjectMeta: metav1.ObjectMeta{ 683 Name: "wildcard-host-matches-listener-specific-host", 684 Namespace: "gateway-conformance-infra", 685 }, 686 Spec: gatewayv1beta1.HTTPRouteSpec{ 687 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 688 ParentRefs: []gatewayv1beta1.ParentReference{ 689 { 690 Name: "httproute-hostname-intersection", 691 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 692 }, 693 }, 694 }, 695 Hostnames: []gatewayv1beta1.Hostname{ 696 "non.matching.com", 697 "*.specific.com", // matches listener-1's wildcard host 698 }, 699 Rules: []gatewayv1beta1.HTTPRouteRule{ 700 { 701 Matches: []gatewayv1beta1.HTTPRouteMatch{ 702 { 703 Path: &gatewayv1beta1.HTTPPathMatch{ 704 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 705 Value: model.AddressOf("/s3"), 706 }, 707 }, 708 }, 709 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 710 { 711 BackendRef: gatewayv1beta1.BackendRef{ 712 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 713 Name: "infra-backend-v3", 714 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 715 }, 716 }, 717 }, 718 }, 719 }, 720 }, 721 }, 722 }, 723 { 724 ObjectMeta: metav1.ObjectMeta{ 725 Name: "wildcard-host-matches-listener-wildcard-host", 726 Namespace: "gateway-conformance-infra", 727 }, 728 Spec: gatewayv1beta1.HTTPRouteSpec{ 729 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 730 ParentRefs: []gatewayv1beta1.ParentReference{ 731 { 732 Name: "httproute-hostname-intersection", 733 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 734 }, 735 }, 736 }, 737 Hostnames: []gatewayv1beta1.Hostname{ 738 "*.anotherwildcard.io", // matches listener-3's wildcard host 739 }, 740 Rules: []gatewayv1beta1.HTTPRouteRule{ 741 { 742 Matches: []gatewayv1beta1.HTTPRouteMatch{ 743 { 744 Path: &gatewayv1beta1.HTTPPathMatch{ 745 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 746 Value: model.AddressOf("/s4"), 747 }, 748 }, 749 }, 750 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 751 { 752 BackendRef: gatewayv1beta1.BackendRef{ 753 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 754 Name: "infra-backend-v1", 755 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 756 }, 757 }, 758 }, 759 }, 760 }, 761 }, 762 }, 763 }, 764 { 765 ObjectMeta: metav1.ObjectMeta{ 766 Name: "no-intersecting-hosts", 767 Namespace: "gateway-conformance-infra", 768 }, 769 Spec: gatewayv1beta1.HTTPRouteSpec{ 770 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 771 ParentRefs: []gatewayv1beta1.ParentReference{ 772 { 773 Name: "httproute-hostname-intersection", 774 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 775 }, 776 }, 777 }, 778 Hostnames: []gatewayv1beta1.Hostname{ 779 "specific.but.wrong.com", 780 "wildcard.io", 781 }, 782 Rules: []gatewayv1beta1.HTTPRouteRule{ 783 { 784 Matches: []gatewayv1beta1.HTTPRouteMatch{ 785 { 786 Path: &gatewayv1beta1.HTTPPathMatch{ 787 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 788 Value: model.AddressOf("/s5"), 789 }, 790 }, 791 }, 792 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 793 { 794 BackendRef: gatewayv1beta1.BackendRef{ 795 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 796 Name: "infra-backend-v2", 797 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 798 }, 799 }, 800 }, 801 }, 802 }, 803 }, 804 }, 805 }, 806 } 807 808 // HTTPRoute listener hostname matching 809 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-listener-hostname-matching.yaml 810 var listenerHostnameMatchingGateway = &gatewayv1beta1.Gateway{ 811 ObjectMeta: metav1.ObjectMeta{ 812 Name: "httproute-listener-hostname-matching", 813 Namespace: "gateway-conformance-infra", 814 }, 815 Spec: gatewayv1beta1.GatewaySpec{ 816 GatewayClassName: "cilium", 817 Listeners: []gatewayv1beta1.Listener{ 818 { 819 Name: "listener-1", 820 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("bar.com"), 821 Port: 80, 822 Protocol: "HTTP", 823 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 824 Namespaces: &gatewayv1beta1.RouteNamespaces{ 825 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 826 }, 827 }, 828 }, 829 { 830 Name: "listener-2", 831 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("foo.bar.com"), 832 Port: 80, 833 Protocol: "HTTP", 834 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 835 Namespaces: &gatewayv1beta1.RouteNamespaces{ 836 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 837 }, 838 }, 839 }, 840 { 841 Name: "listener-3", 842 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.bar.com"), 843 Port: 80, 844 Protocol: "HTTP", 845 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 846 Namespaces: &gatewayv1beta1.RouteNamespaces{ 847 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 848 }, 849 }, 850 }, 851 { 852 Name: "listener-4", 853 Hostname: model.AddressOf[gatewayv1beta1.Hostname]("*.foo.com"), 854 Port: 80, 855 Protocol: "HTTP", 856 AllowedRoutes: &gatewayv1beta1.AllowedRoutes{ 857 Namespaces: &gatewayv1beta1.RouteNamespaces{ 858 From: model.AddressOf(gatewayv1beta1.NamespacesFromSame), 859 }, 860 }, 861 }, 862 }, 863 }, 864 } 865 866 var listenerHostnameMatchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 867 { 868 ObjectMeta: metav1.ObjectMeta{ 869 Name: "backend-v1", 870 Namespace: "gateway-conformance-infra", 871 }, 872 Spec: gatewayv1beta1.HTTPRouteSpec{ 873 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 874 ParentRefs: []gatewayv1beta1.ParentReference{ 875 { 876 Name: "httproute-listener-hostname-matching", 877 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 878 SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-1"), 879 }, 880 }, 881 }, 882 Rules: []gatewayv1beta1.HTTPRouteRule{ 883 { 884 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 885 { 886 BackendRef: gatewayv1beta1.BackendRef{ 887 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 888 Name: "infra-backend-v1", 889 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 890 }, 891 }, 892 }, 893 }, 894 }, 895 }, 896 }, 897 }, 898 { 899 ObjectMeta: metav1.ObjectMeta{ 900 Name: "backend-v2", 901 Namespace: "gateway-conformance-infra", 902 }, 903 Spec: gatewayv1beta1.HTTPRouteSpec{ 904 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 905 ParentRefs: []gatewayv1beta1.ParentReference{ 906 { 907 Name: "httproute-listener-hostname-matching", 908 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 909 SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-2"), 910 }, 911 }, 912 }, 913 Rules: []gatewayv1beta1.HTTPRouteRule{ 914 { 915 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 916 { 917 BackendRef: gatewayv1beta1.BackendRef{ 918 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 919 Name: "infra-backend-v2", 920 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 921 }, 922 }, 923 }, 924 }, 925 }, 926 }, 927 }, 928 }, 929 { 930 ObjectMeta: metav1.ObjectMeta{ 931 Name: "backend-v3", 932 Namespace: "gateway-conformance-infra", 933 }, 934 Spec: gatewayv1beta1.HTTPRouteSpec{ 935 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 936 ParentRefs: []gatewayv1beta1.ParentReference{ 937 { 938 Name: "httproute-listener-hostname-matching", 939 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 940 SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-3"), 941 }, 942 { 943 Name: "httproute-listener-hostname-matching", 944 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 945 SectionName: model.AddressOf[gatewayv1beta1.SectionName]("listener-4"), 946 }, 947 }, 948 }, 949 Rules: []gatewayv1beta1.HTTPRouteRule{ 950 { 951 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 952 { 953 BackendRef: gatewayv1beta1.BackendRef{ 954 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 955 Name: "infra-backend-v3", 956 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 957 }, 958 }, 959 }, 960 }, 961 }, 962 }, 963 }, 964 }, 965 } 966 967 // HTTPRoute matching across routes 968 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-matching-across-routes.yaml 969 var matchingAcrossHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 970 { 971 ObjectMeta: metav1.ObjectMeta{ 972 Name: "matching-part1", 973 Namespace: "gateway-conformance-infra", 974 }, 975 Spec: gatewayv1beta1.HTTPRouteSpec{ 976 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 977 ParentRefs: []gatewayv1beta1.ParentReference{ 978 { 979 Name: "same-namespace", 980 }, 981 }, 982 }, 983 Hostnames: []gatewayv1beta1.Hostname{ 984 "example.com", 985 "example.net", 986 }, 987 Rules: []gatewayv1beta1.HTTPRouteRule{ 988 { 989 Matches: []gatewayv1beta1.HTTPRouteMatch{ 990 { 991 Path: &gatewayv1beta1.HTTPPathMatch{ 992 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 993 Value: model.AddressOf("/"), 994 }, 995 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 996 { 997 Name: "version", 998 Value: "one", 999 }, 1000 }, 1001 }, 1002 }, 1003 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1004 { 1005 BackendRef: gatewayv1beta1.BackendRef{ 1006 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1007 Name: "infra-backend-v1", 1008 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1009 }, 1010 }, 1011 }, 1012 }, 1013 }, 1014 }, 1015 }, 1016 }, 1017 { 1018 ObjectMeta: metav1.ObjectMeta{ 1019 Name: "matching-part2", 1020 Namespace: "gateway-conformance-infra", 1021 }, 1022 Spec: gatewayv1beta1.HTTPRouteSpec{ 1023 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1024 ParentRefs: []gatewayv1beta1.ParentReference{ 1025 { 1026 Name: "same-namespace", 1027 }, 1028 }, 1029 }, 1030 Hostnames: []gatewayv1beta1.Hostname{ 1031 "example.com", 1032 }, 1033 Rules: []gatewayv1beta1.HTTPRouteRule{ 1034 { 1035 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1036 { 1037 Path: &gatewayv1beta1.HTTPPathMatch{ 1038 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1039 Value: model.AddressOf("/v2"), 1040 }, 1041 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 1042 { 1043 Name: "version", 1044 Value: "two", 1045 }, 1046 }, 1047 }, 1048 }, 1049 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1050 { 1051 BackendRef: gatewayv1beta1.BackendRef{ 1052 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1053 Name: "infra-backend-v2", 1054 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1055 }, 1056 }, 1057 }, 1058 }, 1059 }, 1060 }, 1061 }, 1062 }, 1063 } 1064 1065 // HTTPRoute matching 1066 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-matching.yaml 1067 var matchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1068 { 1069 ObjectMeta: metav1.ObjectMeta{ 1070 Name: "matching", 1071 Namespace: "gateway-conformance-infra", 1072 }, 1073 Spec: gatewayv1beta1.HTTPRouteSpec{ 1074 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1075 ParentRefs: []gatewayv1beta1.ParentReference{ 1076 { 1077 Name: "same-namespace", 1078 }, 1079 }, 1080 }, 1081 Rules: []gatewayv1beta1.HTTPRouteRule{ 1082 { 1083 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1084 { 1085 Path: &gatewayv1beta1.HTTPPathMatch{ 1086 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1087 Value: model.AddressOf("/"), 1088 }, 1089 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 1090 { 1091 Name: "version", 1092 Value: "one", 1093 }, 1094 }, 1095 }, 1096 }, 1097 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1098 { 1099 BackendRef: gatewayv1beta1.BackendRef{ 1100 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1101 Name: "infra-backend-v1", 1102 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1103 }, 1104 }, 1105 }, 1106 }, 1107 }, 1108 { 1109 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1110 { 1111 Path: &gatewayv1beta1.HTTPPathMatch{ 1112 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1113 Value: model.AddressOf("/v2"), 1114 }, 1115 Headers: []gatewayv1beta1.HTTPHeaderMatch{ 1116 { 1117 Name: "version", 1118 Value: "two", 1119 }, 1120 }, 1121 }, 1122 }, 1123 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1124 { 1125 BackendRef: gatewayv1beta1.BackendRef{ 1126 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1127 Name: "infra-backend-v2", 1128 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1129 }, 1130 }, 1131 }, 1132 }, 1133 }, 1134 }, 1135 }, 1136 }, 1137 } 1138 1139 // HTTPRoute query param matching 1140 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-query-param-matching.yaml 1141 var queryParamMatchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1142 { 1143 ObjectMeta: metav1.ObjectMeta{ 1144 Name: "query-param-matching", 1145 Namespace: "gateway-conformance-infra", 1146 }, 1147 Spec: gatewayv1beta1.HTTPRouteSpec{ 1148 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1149 ParentRefs: []gatewayv1beta1.ParentReference{ 1150 { 1151 Name: "same-namespace", 1152 }, 1153 }, 1154 }, 1155 Rules: []gatewayv1beta1.HTTPRouteRule{ 1156 { 1157 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1158 { 1159 QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{ 1160 { 1161 Name: "animal", 1162 Value: "whale", 1163 }, 1164 }, 1165 }, 1166 }, 1167 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1168 { 1169 BackendRef: gatewayv1beta1.BackendRef{ 1170 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1171 Name: "infra-backend-v1", 1172 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1173 }, 1174 }, 1175 }, 1176 }, 1177 }, 1178 { 1179 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1180 { 1181 QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{ 1182 { 1183 Name: "animal", 1184 Value: "dolphin", 1185 }, 1186 }, 1187 }, 1188 }, 1189 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1190 { 1191 BackendRef: gatewayv1beta1.BackendRef{ 1192 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1193 Name: "infra-backend-v2", 1194 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1195 }, 1196 }, 1197 }, 1198 }, 1199 }, 1200 { 1201 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1202 { 1203 QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{ 1204 { 1205 Name: "animal", 1206 Value: "dolphin", 1207 }, 1208 { 1209 Name: "color", 1210 Value: "blue", 1211 }, 1212 }, 1213 }, 1214 { 1215 QueryParams: []gatewayv1beta1.HTTPQueryParamMatch{ 1216 { 1217 Name: "ANIMAL", 1218 Value: "Whale", 1219 }, 1220 }, 1221 }, 1222 }, 1223 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1224 { 1225 BackendRef: gatewayv1beta1.BackendRef{ 1226 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1227 Name: "infra-backend-v3", 1228 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1229 }, 1230 }, 1231 }, 1232 }, 1233 }, 1234 }, 1235 }, 1236 }, 1237 } 1238 1239 // HTTPRoute request header modifier 1240 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-request-header-modifier.yaml 1241 var requestHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1242 { 1243 ObjectMeta: metav1.ObjectMeta{ 1244 Name: "request-header-modifier", 1245 Namespace: "gateway-conformance-infra", 1246 }, 1247 Spec: gatewayv1beta1.HTTPRouteSpec{ 1248 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1249 ParentRefs: []gatewayv1beta1.ParentReference{ 1250 { 1251 Name: "same-namespace", 1252 }, 1253 }, 1254 }, 1255 Rules: []gatewayv1beta1.HTTPRouteRule{ 1256 { 1257 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1258 { 1259 Path: &gatewayv1beta1.HTTPPathMatch{ 1260 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1261 Value: model.AddressOf("/set"), 1262 }, 1263 }, 1264 }, 1265 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1266 { 1267 Type: "RequestHeaderModifier", 1268 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1269 Set: []gatewayv1beta1.HTTPHeader{ 1270 { 1271 Name: "X-Header-Set", 1272 Value: "set-overwrites-values", 1273 }, 1274 }, 1275 }, 1276 }, 1277 }, 1278 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1279 { 1280 BackendRef: gatewayv1beta1.BackendRef{ 1281 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1282 Name: "infra-backend-v1", 1283 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1284 }, 1285 }, 1286 }, 1287 }, 1288 }, 1289 { 1290 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1291 { 1292 Path: &gatewayv1beta1.HTTPPathMatch{ 1293 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1294 Value: model.AddressOf("/add"), 1295 }, 1296 }, 1297 }, 1298 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1299 { 1300 Type: "RequestHeaderModifier", 1301 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1302 Add: []gatewayv1beta1.HTTPHeader{ 1303 { 1304 Name: "X-Header-Add", 1305 Value: "add-appends-values", 1306 }, 1307 }, 1308 }, 1309 }, 1310 }, 1311 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1312 { 1313 BackendRef: gatewayv1beta1.BackendRef{ 1314 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1315 Name: "infra-backend-v1", 1316 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1317 }, 1318 }, 1319 }, 1320 }, 1321 }, 1322 { 1323 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1324 { 1325 Path: &gatewayv1beta1.HTTPPathMatch{ 1326 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1327 Value: model.AddressOf("/remove"), 1328 }, 1329 }, 1330 }, 1331 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1332 { 1333 Type: "RequestHeaderModifier", 1334 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1335 Remove: []string{ 1336 "X-Header-Remove", 1337 }, 1338 }, 1339 }, 1340 }, 1341 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1342 { 1343 BackendRef: gatewayv1beta1.BackendRef{ 1344 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1345 Name: "infra-backend-v1", 1346 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1347 }, 1348 }, 1349 }, 1350 }, 1351 }, 1352 { 1353 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1354 { 1355 Path: &gatewayv1beta1.HTTPPathMatch{ 1356 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1357 Value: model.AddressOf("/multiple"), 1358 }, 1359 }, 1360 }, 1361 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1362 { 1363 Type: "RequestHeaderModifier", 1364 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1365 Set: []gatewayv1beta1.HTTPHeader{ 1366 { 1367 Name: "X-Header-Set-1", 1368 Value: "header-set-1", 1369 }, 1370 { 1371 Name: "X-Header-Set-2", 1372 Value: "header-set-2", 1373 }, 1374 }, 1375 Add: []gatewayv1beta1.HTTPHeader{ 1376 { 1377 Name: "X-Header-Add-1", 1378 Value: "header-add-1", 1379 }, 1380 { 1381 Name: "X-Header-Add-2", 1382 Value: "header-add-2", 1383 }, 1384 { 1385 Name: "X-Header-Add-3", 1386 Value: "header-add-3", 1387 }, 1388 }, 1389 Remove: []string{ 1390 "X-Header-Remove-1", 1391 "X-Header-Remove-2", 1392 }, 1393 }, 1394 }, 1395 }, 1396 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1397 { 1398 BackendRef: gatewayv1beta1.BackendRef{ 1399 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1400 Name: "infra-backend-v1", 1401 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1402 }, 1403 }, 1404 }, 1405 }, 1406 }, 1407 { 1408 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1409 { 1410 Path: &gatewayv1beta1.HTTPPathMatch{ 1411 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1412 Value: model.AddressOf("/case-insensitivity"), 1413 }, 1414 }, 1415 }, 1416 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1417 { 1418 Type: "RequestHeaderModifier", 1419 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1420 Set: []gatewayv1beta1.HTTPHeader{ 1421 { 1422 Name: "X-Header-Set", 1423 Value: "header-set", 1424 }, 1425 }, 1426 Add: []gatewayv1beta1.HTTPHeader{ 1427 { 1428 Name: "X-Header-Add", 1429 Value: "header-add", 1430 }, 1431 }, 1432 Remove: []string{ 1433 "X-Header-Remove", 1434 }, 1435 }, 1436 }, 1437 }, 1438 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1439 { 1440 BackendRef: gatewayv1beta1.BackendRef{ 1441 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1442 Name: "infra-backend-v1", 1443 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1444 }, 1445 }, 1446 }, 1447 }, 1448 }, 1449 }, 1450 }, 1451 }, 1452 } 1453 1454 // HTTPRouteBackendRefs request header modifier 1455 var backendRefsRequestHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1456 { 1457 ObjectMeta: metav1.ObjectMeta{ 1458 Name: "request-header-modifier", 1459 Namespace: "gateway-conformance-infra", 1460 }, 1461 Spec: gatewayv1beta1.HTTPRouteSpec{ 1462 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1463 ParentRefs: []gatewayv1beta1.ParentReference{ 1464 { 1465 Name: "same-namespace", 1466 }, 1467 }, 1468 }, 1469 Rules: []gatewayv1beta1.HTTPRouteRule{ 1470 { 1471 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1472 { 1473 Path: &gatewayv1beta1.HTTPPathMatch{ 1474 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1475 Value: model.AddressOf("/set"), 1476 }, 1477 }, 1478 }, 1479 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1480 { 1481 BackendRef: gatewayv1beta1.BackendRef{ 1482 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1483 Name: "infra-backend-v1", 1484 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1485 }, 1486 }, 1487 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1488 { 1489 Type: "RequestHeaderModifier", 1490 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1491 Set: []gatewayv1beta1.HTTPHeader{ 1492 { 1493 Name: "X-Header-Set", 1494 Value: "set-overwrites-values", 1495 }, 1496 }, 1497 }, 1498 }, 1499 }, 1500 }, 1501 }, 1502 }, 1503 { 1504 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1505 { 1506 Path: &gatewayv1beta1.HTTPPathMatch{ 1507 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1508 Value: model.AddressOf("/add"), 1509 }, 1510 }, 1511 }, 1512 1513 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1514 { 1515 BackendRef: gatewayv1beta1.BackendRef{ 1516 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1517 Name: "infra-backend-v1", 1518 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1519 }, 1520 }, 1521 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1522 { 1523 Type: "RequestHeaderModifier", 1524 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1525 Add: []gatewayv1beta1.HTTPHeader{ 1526 { 1527 Name: "X-Header-Add", 1528 Value: "add-appends-values", 1529 }, 1530 }, 1531 }, 1532 }, 1533 }, 1534 }, 1535 }, 1536 }, 1537 { 1538 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1539 { 1540 Path: &gatewayv1beta1.HTTPPathMatch{ 1541 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1542 Value: model.AddressOf("/remove"), 1543 }, 1544 }, 1545 }, 1546 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1547 { 1548 BackendRef: gatewayv1beta1.BackendRef{ 1549 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1550 Name: "infra-backend-v1", 1551 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1552 }, 1553 }, 1554 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1555 { 1556 Type: "RequestHeaderModifier", 1557 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1558 Remove: []string{ 1559 "X-Header-Remove", 1560 }, 1561 }, 1562 }, 1563 }, 1564 }, 1565 }, 1566 }, 1567 { 1568 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1569 { 1570 Path: &gatewayv1beta1.HTTPPathMatch{ 1571 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1572 Value: model.AddressOf("/multiple-backends"), 1573 }, 1574 }, 1575 }, 1576 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1577 { 1578 BackendRef: gatewayv1beta1.BackendRef{ 1579 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1580 Name: "infra-backend-v1", 1581 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1582 }, 1583 }, 1584 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1585 { 1586 Type: "RequestHeaderModifier", 1587 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1588 Add: []gatewayv1beta1.HTTPHeader{ 1589 { 1590 Name: "X-Header-Add-1", 1591 Value: "header-add-1", 1592 }, 1593 { 1594 Name: "X-Header-Add-2", 1595 Value: "header-add-2", 1596 }, 1597 }, 1598 }, 1599 }, 1600 }, 1601 }, 1602 { 1603 BackendRef: gatewayv1beta1.BackendRef{ 1604 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1605 Name: "infra-backend-v2", 1606 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1607 }, 1608 }, 1609 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1610 { 1611 Type: "RequestHeaderModifier", 1612 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1613 Add: []gatewayv1beta1.HTTPHeader{ 1614 { 1615 Name: "X-Header-Add-3", 1616 Value: "header-add-3", 1617 }, 1618 }, 1619 }, 1620 }, 1621 }, 1622 }, 1623 }, 1624 }, 1625 { 1626 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1627 { 1628 Path: &gatewayv1beta1.HTTPPathMatch{ 1629 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchExact), 1630 Value: model.AddressOf("/multiple-backends-with-some-not"), 1631 }, 1632 }, 1633 }, 1634 1635 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1636 { 1637 BackendRef: gatewayv1beta1.BackendRef{ 1638 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1639 Name: "infra-backend-v1", 1640 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1641 }, 1642 }, 1643 }, 1644 { 1645 BackendRef: gatewayv1beta1.BackendRef{ 1646 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1647 Name: "infra-backend-v2", 1648 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1649 }, 1650 }, 1651 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1652 { 1653 Type: "RequestHeaderModifier", 1654 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1655 Set: []gatewayv1beta1.HTTPHeader{ 1656 { 1657 Name: "X-Header-Set", 1658 Value: "header-set", 1659 }, 1660 }, 1661 Add: []gatewayv1beta1.HTTPHeader{ 1662 { 1663 Name: "X-Header-Add", 1664 Value: "header-add", 1665 }, 1666 }, 1667 Remove: []string{ 1668 "X-Header-Remove", 1669 }, 1670 }, 1671 }, 1672 }, 1673 }, 1674 }, 1675 }, 1676 }, 1677 }, 1678 }, 1679 } 1680 1681 // HTTPRoute simple same namespace 1682 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.5.1/conformance/tests/httproute-simple-same-namespace.yaml 1683 var simpleSameNamespaceHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1684 { 1685 ObjectMeta: metav1.ObjectMeta{ 1686 Name: "gateway-conformance-infra-test", 1687 Namespace: "gateway-conformance-infra", 1688 }, 1689 Spec: gatewayv1beta1.HTTPRouteSpec{ 1690 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1691 ParentRefs: []gatewayv1beta1.ParentReference{ 1692 { 1693 Name: "same-namespace", 1694 }, 1695 }, 1696 }, 1697 Rules: []gatewayv1beta1.HTTPRouteRule{ 1698 { 1699 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1700 { 1701 BackendRef: gatewayv1beta1.BackendRef{ 1702 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1703 Name: "infra-backend-v1", 1704 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1705 }, 1706 }, 1707 }, 1708 }, 1709 }, 1710 }, 1711 }, 1712 }, 1713 } 1714 1715 // HTTPRoute method matching 1716 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.0/conformance/tests/httproute-method-matching.yaml 1717 var methodMatchingHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1718 { 1719 ObjectMeta: metav1.ObjectMeta{ 1720 Name: "method-matching", 1721 Namespace: "gateway-conformance-infra", 1722 }, 1723 Spec: gatewayv1beta1.HTTPRouteSpec{ 1724 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1725 ParentRefs: []gatewayv1beta1.ParentReference{ 1726 { 1727 Name: "same-namespace", 1728 }, 1729 }, 1730 }, 1731 Rules: []gatewayv1beta1.HTTPRouteRule{ 1732 { 1733 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1734 { 1735 Method: model.AddressOf[gatewayv1beta1.HTTPMethod]("POST"), 1736 }, 1737 }, 1738 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1739 { 1740 BackendRef: gatewayv1beta1.BackendRef{ 1741 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1742 Name: "infra-backend-v1", 1743 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1744 }, 1745 }, 1746 }, 1747 }, 1748 }, 1749 { 1750 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1751 { 1752 Method: model.AddressOf[gatewayv1beta1.HTTPMethod]("GET"), 1753 }, 1754 }, 1755 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1756 { 1757 BackendRef: gatewayv1beta1.BackendRef{ 1758 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1759 Name: "infra-backend-v2", 1760 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1761 }, 1762 }, 1763 }, 1764 }, 1765 }, 1766 }, 1767 }, 1768 }, 1769 } 1770 1771 // HTTPRoute request redirect 1772 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.0/conformance/tests/httproute-request-redirect.yaml 1773 var requestRedirectHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1774 { 1775 ObjectMeta: metav1.ObjectMeta{ 1776 Name: "request-redirect", 1777 Namespace: "gateway-conformance-infra", 1778 }, 1779 Spec: gatewayv1beta1.HTTPRouteSpec{ 1780 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1781 ParentRefs: []gatewayv1beta1.ParentReference{ 1782 { 1783 Name: "same-namespace", 1784 }, 1785 }, 1786 }, 1787 Rules: []gatewayv1beta1.HTTPRouteRule{ 1788 { 1789 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1790 { 1791 Path: &gatewayv1beta1.HTTPPathMatch{ 1792 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1793 Value: model.AddressOf("/hostname-redirect"), 1794 }, 1795 }, 1796 }, 1797 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1798 { 1799 Type: gatewayv1beta1.HTTPRouteFilterRequestRedirect, 1800 RequestRedirect: &gatewayv1beta1.HTTPRequestRedirectFilter{ 1801 Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("example.com"), 1802 }, 1803 }, 1804 }, 1805 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1806 { 1807 BackendRef: gatewayv1beta1.BackendRef{ 1808 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1809 Name: "infra-backend-v1", 1810 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1811 }, 1812 }, 1813 }, 1814 }, 1815 }, 1816 { 1817 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1818 { 1819 Path: &gatewayv1beta1.HTTPPathMatch{ 1820 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1821 Value: model.AddressOf("/status-code-301"), 1822 }, 1823 }, 1824 }, 1825 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1826 { 1827 Type: gatewayv1beta1.HTTPRouteFilterRequestRedirect, 1828 RequestRedirect: &gatewayv1beta1.HTTPRequestRedirectFilter{ 1829 StatusCode: model.AddressOf(301), 1830 }, 1831 }, 1832 }, 1833 }, 1834 { 1835 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1836 { 1837 Path: &gatewayv1beta1.HTTPPathMatch{ 1838 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1839 Value: model.AddressOf("/host-and-status"), 1840 }, 1841 }, 1842 }, 1843 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1844 { 1845 Type: gatewayv1beta1.HTTPRouteFilterRequestRedirect, 1846 RequestRedirect: &gatewayv1beta1.HTTPRequestRedirectFilter{ 1847 Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("example.com"), 1848 StatusCode: model.AddressOf(301), 1849 }, 1850 }, 1851 }, 1852 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1853 { 1854 BackendRef: gatewayv1beta1.BackendRef{ 1855 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1856 Name: "infra-backend-v1", 1857 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1858 }, 1859 }, 1860 }, 1861 }, 1862 }, 1863 }, 1864 }, 1865 }, 1866 } 1867 1868 // HTTPRoute response header modifier 1869 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.6.0/conformance/tests/httproute-response-header-modifier.yaml 1870 var responseHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 1871 { 1872 ObjectMeta: metav1.ObjectMeta{ 1873 Name: "response-header-modifier", 1874 Namespace: "gateway-conformance-infra", 1875 }, 1876 Spec: gatewayv1beta1.HTTPRouteSpec{ 1877 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 1878 ParentRefs: []gatewayv1beta1.ParentReference{ 1879 { 1880 Name: "same-namespace", 1881 }, 1882 }, 1883 }, 1884 Rules: []gatewayv1beta1.HTTPRouteRule{ 1885 { 1886 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1887 { 1888 Path: &gatewayv1beta1.HTTPPathMatch{ 1889 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1890 Value: model.AddressOf("/set"), 1891 }, 1892 }, 1893 }, 1894 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1895 { 1896 Type: "ResponseHeaderModifier", 1897 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1898 Set: []gatewayv1beta1.HTTPHeader{ 1899 { 1900 Name: "X-Header-Set", 1901 Value: "set-overwrites-values", 1902 }, 1903 }, 1904 }, 1905 }, 1906 }, 1907 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1908 { 1909 BackendRef: gatewayv1beta1.BackendRef{ 1910 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1911 Name: "infra-backend-v1", 1912 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1913 }, 1914 }, 1915 }, 1916 }, 1917 }, 1918 { 1919 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1920 { 1921 Path: &gatewayv1beta1.HTTPPathMatch{ 1922 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1923 Value: model.AddressOf("/add"), 1924 }, 1925 }, 1926 }, 1927 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1928 { 1929 Type: "ResponseHeaderModifier", 1930 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1931 Add: []gatewayv1beta1.HTTPHeader{ 1932 { 1933 Name: "X-Header-Add", 1934 Value: "add-appends-values", 1935 }, 1936 }, 1937 }, 1938 }, 1939 }, 1940 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1941 { 1942 BackendRef: gatewayv1beta1.BackendRef{ 1943 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1944 Name: "infra-backend-v1", 1945 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1946 }, 1947 }, 1948 }, 1949 }, 1950 }, 1951 { 1952 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1953 { 1954 Path: &gatewayv1beta1.HTTPPathMatch{ 1955 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1956 Value: model.AddressOf("/remove"), 1957 }, 1958 }, 1959 }, 1960 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1961 { 1962 Type: "ResponseHeaderModifier", 1963 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1964 Remove: []string{ 1965 "X-Header-Remove", 1966 }, 1967 }, 1968 }, 1969 }, 1970 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 1971 { 1972 BackendRef: gatewayv1beta1.BackendRef{ 1973 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 1974 Name: "infra-backend-v1", 1975 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 1976 }, 1977 }, 1978 }, 1979 }, 1980 }, 1981 { 1982 Matches: []gatewayv1beta1.HTTPRouteMatch{ 1983 { 1984 Path: &gatewayv1beta1.HTTPPathMatch{ 1985 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 1986 Value: model.AddressOf("/multiple"), 1987 }, 1988 }, 1989 }, 1990 Filters: []gatewayv1beta1.HTTPRouteFilter{ 1991 { 1992 Type: "ResponseHeaderModifier", 1993 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 1994 Set: []gatewayv1beta1.HTTPHeader{ 1995 { 1996 Name: "X-Header-Set-1", 1997 Value: "header-set-1", 1998 }, 1999 { 2000 Name: "X-Header-Set-2", 2001 Value: "header-set-2", 2002 }, 2003 }, 2004 Add: []gatewayv1beta1.HTTPHeader{ 2005 { 2006 Name: "X-Header-Add-1", 2007 Value: "header-add-1", 2008 }, 2009 { 2010 Name: "X-Header-Add-2", 2011 Value: "header-add-2", 2012 }, 2013 { 2014 Name: "X-Header-Add-3", 2015 Value: "header-add-3", 2016 }, 2017 }, 2018 Remove: []string{ 2019 "X-Header-Remove-1", 2020 "X-Header-Remove-2", 2021 }, 2022 }, 2023 }, 2024 }, 2025 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2026 { 2027 BackendRef: gatewayv1beta1.BackendRef{ 2028 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2029 Name: "infra-backend-v1", 2030 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2031 }, 2032 }, 2033 }, 2034 }, 2035 }, 2036 { 2037 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2038 { 2039 Path: &gatewayv1beta1.HTTPPathMatch{ 2040 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2041 Value: model.AddressOf("/case-insensitivity"), 2042 }, 2043 }, 2044 }, 2045 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2046 { 2047 Type: "ResponseHeaderModifier", 2048 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2049 Set: []gatewayv1beta1.HTTPHeader{ 2050 { 2051 Name: "X-Header-Set", 2052 Value: "header-set", 2053 }, 2054 }, 2055 Add: []gatewayv1beta1.HTTPHeader{ 2056 { 2057 Name: "X-Header-Add", 2058 Value: "header-add", 2059 }, 2060 { 2061 Name: "x-lowercase-add", 2062 Value: "lowercase-add", 2063 }, 2064 { 2065 Name: "x-Mixedcase-ADD-1", 2066 Value: "mixedcase-add-1", 2067 }, 2068 { 2069 Name: "X-mixeDcase-add-2", 2070 Value: "mixedcase-add-2", 2071 }, 2072 { 2073 Name: "X-UPPERCASE-ADD", 2074 Value: "uppercase-add", 2075 }, 2076 }, 2077 Remove: []string{ 2078 "X-Header-Remove", 2079 }, 2080 }, 2081 }, 2082 }, 2083 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2084 { 2085 BackendRef: gatewayv1beta1.BackendRef{ 2086 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2087 Name: "infra-backend-v1", 2088 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2089 }, 2090 }, 2091 }, 2092 }, 2093 }, 2094 }, 2095 }, 2096 }, 2097 } 2098 2099 // HTTPRouteBackendRefs response header modifier 2100 var backendRefsResponseHeaderModifierHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 2101 { 2102 ObjectMeta: metav1.ObjectMeta{ 2103 Name: "response-header-modifier", 2104 Namespace: "gateway-conformance-infra", 2105 }, 2106 Spec: gatewayv1beta1.HTTPRouteSpec{ 2107 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 2108 ParentRefs: []gatewayv1beta1.ParentReference{ 2109 { 2110 Name: "same-namespace", 2111 }, 2112 }, 2113 }, 2114 Rules: []gatewayv1beta1.HTTPRouteRule{ 2115 { 2116 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2117 { 2118 Path: &gatewayv1beta1.HTTPPathMatch{ 2119 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2120 Value: model.AddressOf("/set"), 2121 }, 2122 }, 2123 }, 2124 2125 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2126 { 2127 BackendRef: gatewayv1beta1.BackendRef{ 2128 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2129 Name: "infra-backend-v1", 2130 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2131 }, 2132 }, 2133 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2134 { 2135 Type: "ResponseHeaderModifier", 2136 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2137 Set: []gatewayv1beta1.HTTPHeader{ 2138 { 2139 Name: "X-Header-Set", 2140 Value: "set-overwrites-values", 2141 }, 2142 }, 2143 }, 2144 }, 2145 }, 2146 }, 2147 }, 2148 }, 2149 { 2150 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2151 { 2152 Path: &gatewayv1beta1.HTTPPathMatch{ 2153 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2154 Value: model.AddressOf("/add"), 2155 }, 2156 }, 2157 }, 2158 2159 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2160 { 2161 BackendRef: gatewayv1beta1.BackendRef{ 2162 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2163 Name: "infra-backend-v1", 2164 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2165 }, 2166 }, 2167 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2168 { 2169 Type: "ResponseHeaderModifier", 2170 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2171 Add: []gatewayv1beta1.HTTPHeader{ 2172 { 2173 Name: "X-Header-Add", 2174 Value: "add-appends-values", 2175 }, 2176 }, 2177 }, 2178 }, 2179 }, 2180 }, 2181 }, 2182 }, 2183 { 2184 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2185 { 2186 Path: &gatewayv1beta1.HTTPPathMatch{ 2187 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2188 Value: model.AddressOf("/remove"), 2189 }, 2190 }, 2191 }, 2192 2193 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2194 { 2195 BackendRef: gatewayv1beta1.BackendRef{ 2196 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2197 Name: "infra-backend-v1", 2198 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2199 }, 2200 }, 2201 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2202 { 2203 Type: "ResponseHeaderModifier", 2204 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2205 Remove: []string{ 2206 "X-Header-Remove", 2207 }, 2208 }, 2209 }, 2210 }, 2211 }, 2212 }, 2213 }, 2214 { 2215 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2216 { 2217 Path: &gatewayv1beta1.HTTPPathMatch{ 2218 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2219 Value: model.AddressOf("/multiple"), 2220 }, 2221 }, 2222 }, 2223 2224 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2225 { 2226 BackendRef: gatewayv1beta1.BackendRef{ 2227 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2228 Name: "infra-backend-v1", 2229 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2230 }, 2231 }, 2232 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2233 { 2234 Type: "ResponseHeaderModifier", 2235 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2236 Set: []gatewayv1beta1.HTTPHeader{ 2237 { 2238 Name: "X-Header-Set-1", 2239 Value: "header-set-1", 2240 }, 2241 { 2242 Name: "X-Header-Set-2", 2243 Value: "header-set-2", 2244 }, 2245 }, 2246 Add: []gatewayv1beta1.HTTPHeader{ 2247 { 2248 Name: "X-Header-Add-1", 2249 Value: "header-add-1", 2250 }, 2251 { 2252 Name: "X-Header-Add-2", 2253 Value: "header-add-2", 2254 }, 2255 { 2256 Name: "X-Header-Add-3", 2257 Value: "header-add-3", 2258 }, 2259 }, 2260 Remove: []string{ 2261 "X-Header-Remove-1", 2262 "X-Header-Remove-2", 2263 }, 2264 }, 2265 }, 2266 }, 2267 }, 2268 }, 2269 }, 2270 { 2271 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2272 { 2273 Path: &gatewayv1beta1.HTTPPathMatch{ 2274 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2275 Value: model.AddressOf("/multiple-backends"), 2276 }, 2277 }, 2278 }, 2279 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2280 { 2281 BackendRef: gatewayv1beta1.BackendRef{ 2282 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2283 Name: "infra-backend-v1", 2284 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2285 }, 2286 }, 2287 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2288 { 2289 Type: "ResponseHeaderModifier", 2290 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2291 Set: []gatewayv1beta1.HTTPHeader{ 2292 { 2293 Name: "X-Header-Set-1", 2294 Value: "header-set-1", 2295 }, 2296 }, 2297 Add: []gatewayv1beta1.HTTPHeader{ 2298 { 2299 Name: "X-Header-Add-1", 2300 Value: "header-add-1", 2301 }, 2302 }, 2303 Remove: []string{ 2304 "X-Header-Remove-1", 2305 }, 2306 }, 2307 }, 2308 }, 2309 }, 2310 { 2311 BackendRef: gatewayv1beta1.BackendRef{ 2312 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2313 Name: "infra-backend-v2", 2314 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2315 }, 2316 }, 2317 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2318 { 2319 Type: "ResponseHeaderModifier", 2320 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2321 Set: []gatewayv1beta1.HTTPHeader{ 2322 { 2323 Name: "X-Header-Set-2", 2324 Value: "header-set-2", 2325 }, 2326 }, 2327 Add: []gatewayv1beta1.HTTPHeader{ 2328 { 2329 Name: "X-Header-Add-2", 2330 Value: "header-add-2", 2331 }, 2332 }, 2333 Remove: []string{ 2334 "X-Header-Remove-2", 2335 }, 2336 }, 2337 }, 2338 }, 2339 }, 2340 { 2341 BackendRef: gatewayv1beta1.BackendRef{ 2342 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2343 Name: "infra-backend-v3", 2344 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2345 }, 2346 }, 2347 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2348 { 2349 Type: "ResponseHeaderModifier", 2350 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2351 Set: []gatewayv1beta1.HTTPHeader{ 2352 { 2353 Name: "X-Header-Set-3", 2354 Value: "header-set-3", 2355 }, 2356 }, 2357 Add: []gatewayv1beta1.HTTPHeader{ 2358 { 2359 Name: "X-Header-Add-3", 2360 Value: "header-add-3", 2361 }, 2362 }, 2363 Remove: []string{ 2364 "X-Header-Remove-3", 2365 }, 2366 }, 2367 }, 2368 }, 2369 }, 2370 }, 2371 }, 2372 { 2373 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2374 { 2375 Path: &gatewayv1beta1.HTTPPathMatch{ 2376 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2377 Value: model.AddressOf("/case-insensitivity"), 2378 }, 2379 }, 2380 }, 2381 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2382 { 2383 BackendRef: gatewayv1beta1.BackendRef{ 2384 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2385 Name: "infra-backend-v1", 2386 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2387 }, 2388 }, 2389 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2390 { 2391 Type: "ResponseHeaderModifier", 2392 ResponseHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2393 Set: []gatewayv1beta1.HTTPHeader{ 2394 { 2395 Name: "X-Header-Set", 2396 Value: "header-set", 2397 }, 2398 }, 2399 Add: []gatewayv1beta1.HTTPHeader{ 2400 { 2401 Name: "X-Header-Add", 2402 Value: "header-add", 2403 }, 2404 { 2405 Name: "x-lowercase-add", 2406 Value: "lowercase-add", 2407 }, 2408 { 2409 Name: "x-Mixedcase-ADD-1", 2410 Value: "mixedcase-add-1", 2411 }, 2412 { 2413 Name: "X-mixeDcase-add-2", 2414 Value: "mixedcase-add-2", 2415 }, 2416 { 2417 Name: "X-UPPERCASE-ADD", 2418 Value: "uppercase-add", 2419 }, 2420 }, 2421 Remove: []string{ 2422 "X-Header-Remove", 2423 }, 2424 }, 2425 }, 2426 }, 2427 }, 2428 }, 2429 }, 2430 }, 2431 }, 2432 }, 2433 } 2434 2435 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.7.1/conformance/tests/httproute-rewrite-host.yaml 2436 var rewriteHostHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 2437 { 2438 ObjectMeta: metav1.ObjectMeta{ 2439 Name: "rewrite-host", 2440 Namespace: "gateway-conformance-infra", 2441 }, 2442 Spec: gatewayv1beta1.HTTPRouteSpec{ 2443 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 2444 ParentRefs: []gatewayv1beta1.ParentReference{ 2445 { 2446 Name: "same-namespace", 2447 }, 2448 }, 2449 }, 2450 Hostnames: []gatewayv1beta1.Hostname{ 2451 "rewrite.example", 2452 }, 2453 Rules: []gatewayv1beta1.HTTPRouteRule{ 2454 { 2455 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2456 { 2457 Path: &gatewayv1beta1.HTTPPathMatch{ 2458 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2459 Value: model.AddressOf("/one"), 2460 }, 2461 }, 2462 }, 2463 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2464 { 2465 Type: "URLRewrite", 2466 URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{ 2467 Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("one.example.org"), 2468 }, 2469 }, 2470 }, 2471 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2472 { 2473 BackendRef: gatewayv1beta1.BackendRef{ 2474 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2475 Name: "infra-backend-v1", 2476 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2477 }, 2478 }, 2479 }, 2480 }, 2481 }, 2482 { 2483 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2484 { 2485 Type: "URLRewrite", 2486 URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{ 2487 Hostname: model.AddressOf[gatewayv1beta1.PreciseHostname]("example.org"), 2488 }, 2489 }, 2490 }, 2491 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2492 { 2493 BackendRef: gatewayv1beta1.BackendRef{ 2494 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2495 Name: "infra-backend-v2", 2496 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2497 }, 2498 }, 2499 }, 2500 }, 2501 }, 2502 }, 2503 }, 2504 }, 2505 } 2506 2507 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.7.1/conformance/tests/httproute-rewrite-path.yaml 2508 var rewritePathHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 2509 { 2510 ObjectMeta: metav1.ObjectMeta{ 2511 Name: "rewrite-path", 2512 Namespace: "gateway-conformance-infra", 2513 }, 2514 Spec: gatewayv1beta1.HTTPRouteSpec{ 2515 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 2516 ParentRefs: []gatewayv1beta1.ParentReference{ 2517 { 2518 Name: "same-namespace", 2519 }, 2520 }, 2521 }, 2522 Rules: []gatewayv1beta1.HTTPRouteRule{ 2523 { 2524 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2525 { 2526 Path: &gatewayv1beta1.HTTPPathMatch{ 2527 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2528 Value: model.AddressOf("/prefix/one"), 2529 }, 2530 }, 2531 }, 2532 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2533 { 2534 Type: "URLRewrite", 2535 URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{ 2536 Path: &gatewayv1beta1.HTTPPathModifier{ 2537 Type: "ReplacePrefixMatch", 2538 ReplacePrefixMatch: model.AddressOf("/one"), 2539 }, 2540 }, 2541 }, 2542 }, 2543 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2544 { 2545 BackendRef: gatewayv1beta1.BackendRef{ 2546 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2547 Name: "infra-backend-v1", 2548 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2549 }, 2550 }, 2551 }, 2552 }, 2553 }, 2554 { 2555 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2556 { 2557 Path: &gatewayv1beta1.HTTPPathMatch{ 2558 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2559 Value: model.AddressOf("/full/one"), 2560 }, 2561 }, 2562 }, 2563 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2564 { 2565 Type: "URLRewrite", 2566 URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{ 2567 Path: &gatewayv1beta1.HTTPPathModifier{ 2568 Type: "ReplaceFullPath", 2569 ReplaceFullPath: model.AddressOf("/one"), 2570 }, 2571 }, 2572 }, 2573 }, 2574 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2575 { 2576 BackendRef: gatewayv1beta1.BackendRef{ 2577 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2578 Name: "infra-backend-v1", 2579 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2580 }, 2581 }, 2582 }, 2583 }, 2584 }, 2585 { 2586 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2587 { 2588 Path: &gatewayv1beta1.HTTPPathMatch{ 2589 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2590 Value: model.AddressOf("/full/rewrite-path-and-modify-headers"), 2591 }, 2592 }, 2593 }, 2594 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2595 { 2596 Type: "URLRewrite", 2597 URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{ 2598 Path: &gatewayv1beta1.HTTPPathModifier{ 2599 Type: "ReplaceFullPath", 2600 ReplaceFullPath: model.AddressOf("/test"), 2601 }, 2602 }, 2603 }, 2604 { 2605 Type: "RequestHeaderModifier", 2606 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2607 Set: []gatewayv1beta1.HTTPHeader{ 2608 { 2609 Name: "X-Header-Set", 2610 Value: "set-overwrites-values", 2611 }, 2612 }, 2613 Add: []gatewayv1beta1.HTTPHeader{ 2614 { 2615 Name: "X-Header-Add", 2616 Value: "header-val-1", 2617 }, 2618 { 2619 Name: "X-Header-Add-Append", 2620 Value: "header-val-2", 2621 }, 2622 }, 2623 Remove: []string{"X-Header-Remove"}, 2624 }, 2625 }, 2626 }, 2627 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2628 { 2629 BackendRef: gatewayv1beta1.BackendRef{ 2630 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2631 Name: "infra-backend-v1", 2632 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2633 }, 2634 }, 2635 }, 2636 }, 2637 }, 2638 { 2639 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2640 { 2641 Path: &gatewayv1beta1.HTTPPathMatch{ 2642 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2643 Value: model.AddressOf("/prefix/rewrite-path-and-modify-headers"), 2644 }, 2645 }, 2646 }, 2647 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2648 { 2649 Type: "URLRewrite", 2650 URLRewrite: &gatewayv1beta1.HTTPURLRewriteFilter{ 2651 Path: &gatewayv1beta1.HTTPPathModifier{ 2652 Type: "ReplacePrefixMatch", 2653 ReplacePrefixMatch: model.AddressOf("/prefix"), 2654 }, 2655 }, 2656 }, 2657 { 2658 Type: "RequestHeaderModifier", 2659 RequestHeaderModifier: &gatewayv1beta1.HTTPHeaderFilter{ 2660 Set: []gatewayv1beta1.HTTPHeader{ 2661 { 2662 Name: "X-Header-Set", 2663 Value: "set-overwrites-values", 2664 }, 2665 }, 2666 Add: []gatewayv1beta1.HTTPHeader{ 2667 { 2668 Name: "X-Header-Add", 2669 Value: "header-val-1", 2670 }, 2671 { 2672 Name: "X-Header-Add-Append", 2673 Value: "header-val-2", 2674 }, 2675 }, 2676 Remove: []string{"X-Header-Remove"}, 2677 }, 2678 }, 2679 }, 2680 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2681 { 2682 BackendRef: gatewayv1beta1.BackendRef{ 2683 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2684 Name: "infra-backend-v1", 2685 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2686 }, 2687 }, 2688 }, 2689 }, 2690 }, 2691 }, 2692 }, 2693 }, 2694 } 2695 2696 // https://github.com/kubernetes-sigs/gateway-api/blob/v0.7.1/conformance/tests/httproute-request-mirror.yaml 2697 var mirrorPathHTTPRoutes = []gatewayv1beta1.HTTPRoute{ 2698 { 2699 ObjectMeta: metav1.ObjectMeta{ 2700 Name: "request-mirror", 2701 Namespace: "gateway-conformance-infra", 2702 }, 2703 Spec: gatewayv1beta1.HTTPRouteSpec{ 2704 CommonRouteSpec: gatewayv1beta1.CommonRouteSpec{ 2705 ParentRefs: []gatewayv1beta1.ParentReference{ 2706 { 2707 Name: "same-namespace", 2708 }, 2709 }, 2710 }, 2711 Rules: []gatewayv1beta1.HTTPRouteRule{ 2712 { 2713 Matches: []gatewayv1beta1.HTTPRouteMatch{ 2714 { 2715 Path: &gatewayv1beta1.HTTPPathMatch{ 2716 Type: model.AddressOf[gatewayv1beta1.PathMatchType](gatewayv1beta1.PathMatchPathPrefix), 2717 Value: model.AddressOf("/mirror"), 2718 }, 2719 }, 2720 }, 2721 Filters: []gatewayv1beta1.HTTPRouteFilter{ 2722 { 2723 Type: "RequestMirror", 2724 RequestMirror: &gatewayv1beta1.HTTPRequestMirrorFilter{ 2725 BackendRef: gatewayv1beta1.BackendObjectReference{ 2726 Name: "infra-backend-v2", 2727 Namespace: model.AddressOf[gatewayv1beta1.Namespace]("gateway-conformance-infra"), 2728 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2729 }, 2730 }, 2731 }, 2732 }, 2733 BackendRefs: []gatewayv1beta1.HTTPBackendRef{ 2734 { 2735 BackendRef: gatewayv1beta1.BackendRef{ 2736 BackendObjectReference: gatewayv1beta1.BackendObjectReference{ 2737 Name: "infra-backend-v1", 2738 Port: model.AddressOf[gatewayv1beta1.PortNumber](8080), 2739 }, 2740 }, 2741 }, 2742 }, 2743 }, 2744 }, 2745 }, 2746 }, 2747 }