sigs.k8s.io/gateway-api@v1.0.0/CHANGELOG.md (about)

     1  # Changelog
     2  
     3  ## Table of Contents
     4  
     5  - [v1.0.0][#v100]
     6  - [v1.0.0-rc2][#v100-rc2]
     7  - [v1.0.0-rc1][#v100-rc1]
     8  - [v0.8.1](#v081)
     9  - [v0.8.0](#v080)
    10  - [v0.8.0-rc2](#v080-rc2)
    11  - [v0.8.0-rc1](#v080-rc1)
    12  - [v0.7.1](#v071)
    13  - [v0.7.0](#v070)
    14  - [v0.7.0-rc2](#v070-rc2)
    15  - [v0.7.0-rc1](#v070-rc1)
    16  - [v0.6.2](#v062)
    17  - [v0.6.1](#v061)
    18  - [v0.6.0](#v060)
    19  - [v0.6.0-rc2](#v060-rc2)
    20  - [v0.6.0-rc1](#v060-rc1)
    21  - [v0.5.1](#v051)
    22  - [v0.5.0](#v050)
    23  - [v0.5.0-rc2](#v050-rc2)
    24  - [v0.5.0-rc1](#v050-rc1)
    25  - [v0.4.3](#v043)
    26  - [v0.4.2](#v042)
    27  - [v0.4.1](#v041)
    28  - [v0.4.0](#v040)
    29  - [v0.4.0-rc2](#v040-rc2)
    30  - [v0.4.0-rc1](#v040-rc1)
    31  - [v0.3.0](#v030)
    32  - [v0.2.0](#v020)
    33  - [v0.1.0](#v010)
    34  - [v0.1.0-rc2](#v010-rc2)
    35  - [v0.1.0-rc1](#v010-rc1)
    36  
    37  # v1.0.0
    38  
    39  On behalf of Kubernetes SIG Network, we are pleased to announce the v1.0 release!
    40  This release marks a huge milestone for this project. Several key APIs are
    41  graduating to GA (generally available), while other significant features have
    42  been added to the Experimental channel.
    43  
    44  It's been four years since this project began, and we would never have gotten
    45  here without the support of a dedicated and active community. The maintainers
    46  would like to thanks _everyone_ who's contributed to Gateway API, whether in the
    47  form of commits to the repo, discussion, ideas, or general support. We literally
    48  couldn't have gotten this far without you.
    49  
    50  This project is nowhere near finished, as you can see from the large amount of
    51  features being added into the Experimental Channel. With such a big set of
    52  things still to do, contributors and contributions are more vital than ever.
    53  Please feel welcome to join our
    54  [community!](https://gateway-api.sigs.k8s.io/contributing/)!
    55  
    56  ## Gateway, GatewayClass, and HTTPRoute are GA 🎉
    57  
    58  Gateway, GatewayClass, and HTTPRoute have all graduated to GA with a `v1` API
    59  version. Although these APIs will continue to grow with future additions, the
    60  versions of these resources available via the Standard Channel are stable and
    61  recommended for use in production. Many implementations are fully passing
    62  conformance tests that cover the functionality of each of these resources. These
    63  APIs are graduating to GA with only minor spec clarifications since the v0.8.0
    64  release.
    65  
    66  ## CEL Migration
    67  
    68  Starting in v0.8.0, Gateway API CRDs now include CEL validation. In this release
    69  the validating webhook is no longer bundled with CRD installation. Instead we
    70  include a separate `webhook-install.yaml` file as part of the release artifacts.
    71  
    72  If you're running Kubernetes 1.25+, we do not recommend installing the webhook
    73  and additionally suggest that you uninstall any previously installed versions of
    74  the webhook.
    75  
    76  If you're still running Kubernetes 1.23 or 1.24, we recommend installing the
    77  webhook until you can upgrade to Kubernetes 1.25 or newer.
    78  
    79  ## New Experimental Features
    80  
    81  There are several exciting new experimental features in this release:
    82  
    83  ### BackendTLSPolicy
    84  A new `BackendTLSPolicy` resource has been introduced for configuring TLS
    85  connections from Gateways to Backends. This allows you to configure the Gateway
    86  to validate the certificates served by Backends. For more information, refer to
    87  [GEP 1897](https://gateway-api.sigs.k8s.io/geps/gep-1897/).
    88  
    89  Primary Author: @candita
    90  
    91  ### HTTPRoute Timeouts
    92  HTTPRoute has a new `Timeouts` field on Route Rules. This allows you to
    93  configure overall Request Timeouts as well as Backend Request Timeouts. For more
    94  information, refer to [GEP 1742](https://gateway-api.sigs.k8s.io/geps/gep-1742/).
    95  
    96  Primary Authors: @frankbu, @SRodi
    97  
    98  ### Gateway Infrastructure Labels
    99  Gateway has a new `Infrastructure` field that allows you to specify `Labels` or
   100  `Annotations` that you'd like to be propagated to each resource generated for a
   101  Gateway. For example, these labels and annotations may be copied to Services and
   102  Deployments provisioned for in-cluster Gateways, or to other
   103  implementation-specific resources, such as Cloud Load Balancers. For more
   104  information, refer to [GEP
   105  1762](https://gateway-api.sigs.k8s.io/geps/gep-1762/).
   106  
   107  Primary Author: @howardjohn
   108  
   109  ### WebSockets, HTTP/2, and More
   110  Some coordinated work across both Gateway API and upstream Kubernetes has
   111  defined 3 new values for the AppProtocol field on Service Ports:
   112  
   113  * `kubernetes.io/h2c` - HTTP/2 over cleartext as described in
   114    [RFC7540](https://www.rfc-editor.org/rfc/rfc7540)
   115  * `kubernetes.io/ws` - WebSocket over cleartext as described in
   116    [RFC6445](https://www.rfc-editor.org/rfc/rfc6455)
   117  * `kubernetes.io/wss` - WebSocket over TLS as described in
   118    [RFC6455](https://www.rfc-editor.org/rfc/rfc6455)
   119  
   120  These can now be used with Gateway API to describe the protocol to use for
   121  connections to Kubernetes Services. For more information, refer to [GEP
   122  1911](https://gateway-api.sigs.k8s.io/geps/gep-1911/).
   123  
   124  ### A new CLI tool: gwctl
   125  An experimental new CLI tool and kubectl plugin, gwctl aims to improve the UX
   126  when interacting with Gateway API. Initially it is focused on Policy Attachment,
   127  making it easier to understand which policies are available in a cluster, and
   128  which have been applied. In future releases, we hope to expand the scope of this
   129  tool to provide more detailed responses when getting and describing Gateway API
   130  resources. Note that this tool is still in very early stages and it's very
   131  likely that future releases will include breaking changes for gwctl. For more
   132  information, refer to the [gwctl
   133  Readme](https://github.com/kubernetes-sigs/gateway-api/tree/main/gwctl).
   134  
   135  Primary Author: @gauravkghildiyal
   136  
   137  ## Everything Else
   138  
   139  Of course there's a lot more in this release:
   140  
   141  ### Spec Clarifications
   142  - Clarify that the Gateway Listener status AttachedRoutes field is a count of
   143    the number of Routes associated with a Listener regardless of Gateway or Route
   144    status. (#2396, @sunjayBhatia)
   145  - Gateway: A new concept called "Listener Isolation" has been introduced to
   146    describe the recommendation that at most one Listener matches a request, and
   147    only Routes attached to that Listener are used for routing. (#2465, @robscott)
   148  - Experimental Channel: For ParentRefs to be considered distinct, they either
   149    both need to specify a distinct SectionName, both need to specify a distinct
   150    Port, or both. (#2433, @robscott)
   151  - Updated rules about Listener uniqueness to use the term `distinct` (#2436,
   152    @youngnick)
   153  
   154  ### Status
   155  - GatewayClass Status: A new experimental `supportedFeatures` field has been
   156    added. Implementations should populate this with the features they support.
   157    (#2461, @Liorlieberman, @robscott)
   158  - GatewayClass Status: A new SupportedVersion condition has been added that MUST
   159    be set when a GatewayClass is accepted. (#2384, @robscott)
   160  - Route Status: A new "PartiallyInvalid" condition has been added for all Route
   161    types. This condition also includes guidance for how partially invalid states
   162    should be handled with Gateway API. (#2429, @robscott)
   163  - The condition reason `GatewayReasonUnsupportedAddress` for `Accepted` now ONLY
   164    applies when an address type is provided for a `Gateway` which it does not
   165    support.
   166    (#2412 @shaneutt)
   167  - The condition reason `GatewayReasonAddressNotAssigned` for `Programmed` now
   168    ONLY applies to problems with dynamic address allocation.
   169    (#2412 @shaneutt)
   170  - The condition reason `GatewayReasonAddressNotUsable` for `Programmed` has been
   171    added to deal with situations where a static address has been provided for a
   172    Gateway which is of a supported type, and is syntactically valid, but for some
   173    reason it can not be used for this Gateway (e.g. the address is already in use
   174    on the network).
   175    (#2412 @shaneutt)
   176  
   177  ### Documentation
   178  - A guide for Gateway API implementers is now included in the specification.
   179    (#2454, @youngnick)
   180  - Gateway API versioning will continue to rely on two release channels -
   181    Standard and Experimental. New resources will start in the Experimental
   182    Channel with an alpha API Version and then graduate to the Standard Channel
   183    with a GA API version. Resources that already have Beta API versions will
   184    continue to have them, but no additional Gateway API resources will get a Beta
   185    API version. (#2446, @robscott)
   186  
   187  ### Cleanup
   188  - Validating Webhook logs now use `Errorf` instead of `Fatalf`. (#2361, @yylt)
   189  
   190  ### Bug Fixes
   191  * CEL validation for BackendTLSPolicy was fixed with corresponding tests added
   192    (#2491, @ygnas)
   193  * Fixes the API version for `ReferenceGrant` from `v1` to `v1beta1` in the
   194    `GatewaySecretInvalidReferenceGrant` conformance test YAML (#2494, @arkodg)
   195  * Gateway infrastructure field is now a pointer (#2508, @danehans)
   196  
   197  ## Conformance Tests
   198  * h2c Backend Protocol conformance tests were added (#2456, @dprotaso)
   199  * WebSocket Backend Protocol conformance tests were added (#2495, @dprotaso)
   200  * New conformance test for Gateway Status AttachedRoutes (#2477, @danehans)
   201  * Implemented the `ExemptFeatures` field for Experimental Conformance Profiles
   202    (#2515, @arkodg)
   203  
   204  ### Other (Cleanup or Flake)
   205  - Resources related to the validating webhook such as the `gateway-system`
   206    namespace and the `gateway-api-admission-server` deployment have been removed
   207    from the installation manifests, in favor of CEL based Validations that are
   208    built into the CRD definition. These are still available in
   209    `webhook-install.yaml` in case you would like to optionally install them.
   210    (#2401, @arkodg)
   211  
   212  # v1.0.0-rc2
   213  
   214  The working group expects that this release candidate is quite close to the
   215  final v0.8.0 release. However, breaking API changes are still possible.
   216  
   217  This release candidate is suitable for implementors, but the working group does
   218  not recommend shipping products based on a release candidate API due to the
   219  possibility of incompatible changes prior to the final release. The following
   220  represents the changes since v1.0.0-rc1:
   221  
   222  ## Bug Fixes
   223  * CEL validation for BackendTLSPolicy was fixed with corresponding tests added
   224    (#2491, @ygnas)
   225  * Fixes the API version for `ReferenceGrant` from `v1` to `v1beta1` in the
   226    `GatewaySecretInvalidReferenceGrant` conformance test YAML (#2494, @arkodg)
   227  * Gateway infrastructure field is now a pointer (#2508, @danehans)
   228  
   229  ## Conformance Tests
   230  * h2c Backend Protocol conformance tests were added (#2456, @dprotaso)
   231  * WebSocket Backend Protocol conformance tests were added (#2495, @dprotaso)
   232  * New conformance test for Gateway Status AttachedRoutes (#2477, @danehans)
   233  * Implemented the `ExemptFeatures` field for Experimental Conformance Profiles
   234    (#2515, @arkodg)
   235  
   236  # v1.0.0-rc1
   237  
   238  The working group expects that this release candidate is quite close to the
   239  final v0.8.0 release. However, breaking API changes are still possible.
   240  
   241  This release candidate is suitable for implementors, but the working group does
   242  not recommend shipping products based on a release candidate API due to the
   243  possibility of incompatible changes prior to the final release. The following
   244  represents the changes since v0.8.0-rc1:
   245  
   246  ## Gateway, GatewayClass, and HTTPRoute are GA 🎉
   247  
   248  Gateway, GatewayClass, and HTTPRoute have all graduated to GA with a `v1` API
   249  version. Although these APIs will continue to grow with future additions, the
   250  versions of these resources available via the Standard Channel are stable and
   251  recommended for use in production. Many implementations are fully passing
   252  conformance tests that cover the functionality of each of these resources. These
   253  APIs are graduating to GA with only minor spec clarifications since the v0.8.0
   254  release.
   255  
   256  ## CEL Migration
   257  
   258  Starting in v0.8.0, Gateway API CRDs now include CEL validation. In this release
   259  the validating webhook is no longer bundled with CRD installation. Instead we
   260  include a separate `webhook-install.yaml` file as part of the release artifacts.
   261  
   262  If you're running Kubernetes 1.25+, we do not recommend installing the webhook
   263  and additionally suggest that you uninstall any previously installed versions of
   264  the webhook.
   265  
   266  If you're still running Kubernetes 1.23 or 1.24, we recommend installing the
   267  webhook until you can upgrade to Kubernetes 1.25 or newer.
   268  
   269  ## New Experimental Features
   270  
   271  There are several exciting new experimental features in this release:
   272  
   273  ### BackendTLSPolicy
   274  A new `BackendTLSPolicy` resource has been introduced for configuring TLS
   275  connections from Gateways to Backends. This allows you to configure the Gateway
   276  to validate the certificates served by Backends. For more information, refer to
   277  [GEP 1897](https://gateway-api.sigs.k8s.io/geps/gep-1897/).
   278  
   279  Primary Author: @candita
   280  
   281  ### HTTPRoute Timeouts
   282  HTTPRoute has a new `Timeouts` field on Route Rules. This allows you to
   283  configure overall Request Timeouts as well as Backend Request Timeouts. For more
   284  information, refer to [GEP 1742](https://gateway-api.sigs.k8s.io/geps/gep-1742/).
   285  
   286  Primary Authors: @frankbu, @SRodi
   287  
   288  ### Gateway Infrastructure Labels
   289  Gateway has a new `Infrastructure` field that allows you to specify `Labels` or
   290  `Annotations` that you'd like to be propagated to each resource generated for a
   291  Gateway. For example, these labels and annotations may be copied to Services and
   292  Deployments provisioned for in-cluster Gateways, or to other
   293  implementation-specific resources, such as Cloud Load Balancers. For more
   294  information, refer to [GEP
   295  1762](https://gateway-api.sigs.k8s.io/geps/gep-1762/).
   296  
   297  Primary Author: @howardjohn
   298  
   299  ### WebSockets, HTTP/2, and More
   300  Some coordinated work across both Gateway API and upstream Kubernetes has
   301  defined 3 new values for the AppProtocol field on Service Ports:
   302  
   303  * `kubernetes.io/h2c` - HTTP/2 over cleartext as described in
   304    [RFC7540](https://www.rfc-editor.org/rfc/rfc7540)
   305  * `kubernetes.io/ws` - WebSocket over cleartext as described in
   306    [RFC6445](https://www.rfc-editor.org/rfc/rfc6455)
   307  * `kubernetes.io/wss` - WebSocket over TLS as described in
   308    [RFC6455](https://www.rfc-editor.org/rfc/rfc6455)
   309  
   310  These can now be used with Gateway API to describe the protocol to use for
   311  connections to Kubernetes Services. For more information, refer to [GEP
   312  1911](https://gateway-api.sigs.k8s.io/geps/gep-1911/).
   313  
   314  ### A new CLI tool: gwctl
   315  An experimental new CLI tool and kubectl plugin, gwctl aims to improve the UX
   316  when interacting with Gateway API. Initially it is focused on Policy Attachment,
   317  making it easier to understand which policies are available in a cluster, and
   318  which have been applied. In future releases, we hope to expand the scope of this
   319  tool to provide more detailed responses when getting and describing Gateway API
   320  resources. Note that this tool is still in very early stages and it's very
   321  likely that future releases will include breaking changes for gwctl. For more
   322  information, refer to the [gwctl
   323  Readme](https://github.com/kubernetes-sigs/gateway-api/tree/main/gwctl).
   324  
   325  Primary Author: @gauravkghildiyal
   326  
   327  ## Everything Else
   328  
   329  Of course there's a lot more in this release:
   330  
   331  ### Spec Clarifications
   332  - Clarify that the Gateway Listener status AttachedRoutes field is a count of
   333    the number of Routes associated with a Listener regardless of Gateway or Route
   334    status. (#2396, @sunjayBhatia)
   335  - Gateway: A new concept called "Listener Isolation" has been introduced to
   336    describe the recommendation that at most one Listener matches a request, and
   337    only Routes attached to that Listener are used for routing. (#2465, @robscott)
   338  - Experimental Channel: For ParentRefs to be considered distinct, they either
   339    both need to specify a distinct SectionName, both need to specify a distinct
   340    Port, or both. (#2433, @robscott)
   341  - Updated rules about Listener uniqueness to use the term `distinct` (#2436,
   342    @youngnick)
   343  
   344  ### Status
   345  - GatewayClass Status: A new experimental `supportedFeatures` field has been
   346    added. Implementations should populate this with the features they support.
   347    (#2461, @Liorlieberman, @robscott)
   348  - GatewayClass Status: A new SupportedVersion condition has been added that MUST
   349    be set when a GatewayClass is accepted. (#2384, @robscott)
   350  - Route Status: A new "PartiallyInvalid" condition has been added for all Route
   351    types. This condition also includes guidance for how partially invalid states
   352    should be handled with Gateway API. (#2429, @robscott)
   353  - The condition reason `GatewayReasonUnsupportedAddress` for `Accepted` now ONLY
   354    applies when an address type is provided for a `Gateway` which it does not
   355    support.
   356    (#2412 @shaneutt)
   357  - The condition reason `GatewayReasonAddressNotAssigned` for `Programmed` now
   358    ONLY applies to problems with dynamic address allocation.
   359    (#2412 @shaneutt)
   360  - The condition reason `GatewayReasonAddressNotUsable` for `Programmed` has been
   361    added to deal with situations where a static address has been provided for a
   362    Gateway which is of a supported type, and is syntactically valid, but for some
   363    reason it can not be used for this Gateway (e.g. the address is already in use
   364    on the network).
   365    (#2412 @shaneutt)
   366  
   367  ### Documentation
   368  - A guide for Gateway API implementers is now included in the specification.
   369    (#2454, @youngnick)
   370  - Gateway API versioning will continue to rely on two release channels -
   371    Standard and Experimental. New resources will start in the Experimental
   372    Channel with an alpha API Version and then graduate to the Standard Channel
   373    with a GA API version. Resources that already have Beta API versions will
   374    continue to have them, but no additional Gateway API resources will get a Beta
   375    API version. (#2446, @robscott)
   376  
   377  ### Cleanup
   378  - Validating Webhook logs now use `Errorf` instead of `Fatalf`. (#2361, @yylt)
   379  
   380  ### Other (Cleanup or Flake)
   381  - Resources related to the validating webhook such as the `gateway-system`
   382    namespace and the `gateway-api-admission-server` deployment have been removed
   383    from the installation manifests, in favor of CEL based Validations that are
   384    built into the CRD definition. These are still available in
   385    `webhook-install.yaml` in case you would like to optionally install them.
   386    (#2401, @arkodg)
   387  
   388  
   389  # v0.8.1
   390  
   391  This is a patch release that includes small bug fixes and a new conformance test
   392  as a follow up to the v0.8.0 release.
   393  
   394  ## Changes by Kind
   395  
   396  ### Bug Fixes
   397  
   398  - Fix CEL validation not handling missing listener hostname correctly. (#2370,
   399    @frankbu)
   400  - Fix IPv6 parsing in conformance tests (#2375, @keithmattix)
   401  
   402  ### Conformance Tests
   403  
   404  - Add conformance test for multiple mirror filters. (#2359, @levikobi)
   405  
   406  # v0.8.0
   407  
   408  ## Major Themes
   409  
   410  ### GAMMA (Service Mesh)
   411  Service mesh support per the GAMMA initiative has moved to **experimental** in
   412  `v0.8.0`. As an experimental API, **it is still possible that this will
   413  change**; the working group does not recommend shipping products based on any
   414  experimental API.
   415  
   416  When using the Gateway API to configure a service mesh, the Gateway and
   417  GatewayClass resources are not used (as there will typically only be one mesh
   418  in the cluster) and, instead, individual route resources are associated
   419  directly with Service resources. This permits configuring mesh routing while
   420  preserving the Gateway API's overall semantics.
   421  
   422  We encourage service mesh implementers and users to try this new support and
   423  we welcome feedback! Once again, though, the working group does not recommend
   424  shipping products based on this or any other experimental API. due to the
   425  possibility of incompatible changes prior to the final release.
   426  
   427  ### CEL Validation
   428  This release marks the beginning of a transition from webhook validation to CEL
   429  validation that is built into the CRDs. That will mean different things
   430  depending on the version of Kubernetes you're using:
   431  
   432  #### Kubernetes 1.25+
   433  CEL validation is fully supported. Most validation is now covered by the
   434  validating webhook, but unfortunately not quite everything.
   435  
   436  All but one validation has been translated from the
   437  webhook to CEL. Currently the CRDs only have a case-sensitive uniqueness check
   438  for header names in header modifier filters. The webhook validation is more
   439  thorough, ensuring that the uniqueness is case-insensitive. Unfortunately that
   440  is not possible to represent with CEL today. There is more information in
   441  [#2277](https://github.com/kubernetes-sigs/gateway-api/issues/2277).
   442  
   443  Installing the validating webhook is still recommended for this release to allow
   444  controllers to catch up to cover this gap in CEL validation. We expect this is
   445  the last release we will make this recommendation for, for more information,
   446  refer to [#2319](https://github.com/kubernetes-sigs/gateway-api/issues/2319).
   447  
   448  #### Kubernetes 1.23 and 1.24
   449  CEL validation is not supported, but Gateway API v0.8.0 CRDs can still be
   450  installed. When you upgrade to Kubernetes 1.25+, the validation included in
   451  these CRDs will automatically take effect. We recommend continuing to install
   452  the validating webhook on these Kubernetes versions.
   453  
   454  #### Kubernetes 1.22 and older
   455  Unfortunately Gateway API v0.8.0 is not supported on these Kubernetes versions.
   456  Gateway API v0.8.0 CRDs include CEL validation and cannot be installed on these
   457  versions of Kubernetes. Note that Gateway API only commits to providing support
   458  for the [5 most recent versions of
   459  Kubernetes](https://gateway-api.sigs.k8s.io/concepts/versioning/#supported-versions),
   460  and thus these versions are no longer supported by Gateway API.
   461  
   462  ### API Version Changes
   463  As we prepare for a v1.0 release that will graduate Gateway, GatewayClass, and
   464  HTTPRoute to the `v1` API Version from `v1beta1`, we are continuing the process
   465  of moving away from `v1alpha2` for resources that have graduated to `v1beta1`.
   466  The following changes are included in this release:
   467  
   468  - `v1alpha2` of Gateway, GatewayClass, and HTTPRoute is no longer served
   469  - `v1alpha2` of ReferenceGrant is deprecated
   470  - `v1beta1` is now the storage version for ReferenceGrant
   471  
   472  Those changes mean that:
   473  
   474  - Users and implementations that were reading or writing from `v1alpha2` of
   475    Gateway, GatewayClass, or HTTPRoute MUST upgrade to use `v1beta1`.
   476  - Users and implementations that were reading or writing from `v1alpha2` of
   477    ReferenceGrant SHOULD upgrade to use `v1beta1`.
   478  
   479  For more information, refer to
   480  [#2069](https://github.com/kubernetes-sigs/gateway-api/pull/2069).
   481  
   482  ### Multiple RequestMirror filters in the same HTTPRoute or GRPCRoute Rule
   483  Gateway API now supports multiple RequestMirror filters within the same rule.
   484  This enables implementations to mirror a request to multiple backends which
   485  was not supported before. (#2199, #2256, @Liorlieberman)
   486  
   487  ### Supported Features and Conformance Levels
   488  Gateway API conformance tests have a concept of "Supported Features".
   489  Implementations state which features they support, and then all the tests
   490  covering that set of features are run.
   491  
   492  Prior to v0.8.0, we had a concept of "StandardCoreFeatures" that represented the
   493  set of features we expected every implementation to implement. Support for the
   494  Gateway and HTTPRoute resources was included in that list.
   495  
   496  Alongside that, Gateway API also has a concept of "Support Levels" such as
   497  "Core", "Extended", and "Implementation-Specific". The API had labeled 2
   498  resources as having support levels, but these didn't really make sense with
   499  the modular API model of Gateway API.
   500  
   501  In this release, we've simplified the concepts here. Individual resources no
   502  longer have assigned support levels, instead these are represented as "Supported
   503  Features." Implementations can separately claim to support Gateway,
   504  ReferenceGrant, or any other resource. This change helps accommodate incoming
   505  Mesh implementations, many of which do not support one or both of these
   506  resources.
   507  
   508  For more information refer to
   509  [#2323](https://github.com/kubernetes-sigs/gateway-api/pull/2323).
   510  
   511  
   512  ## Other Changes
   513  
   514  ### Status
   515  - Add IncompatibleFilters reason for implementations to specify when a route is
   516    invalid due to an invalid combination of route filters. (#2150, @sunjayBhatia)
   517  
   518  ### Validation
   519  
   520  - Add CEL validation for GRPCRoute. (#2305, @gnossen)
   521  - HTTPRoute and GRPCRoute CRDs now provide built-in validation that ensures the
   522    uniqueness of names in Header Modifier "Remove" lists. (#2306, @robscott)
   523  
   524  ### Spec Clarifications
   525  
   526  - RequestMirrorFilter: Enhanced the doc string to be explicit about sending the
   527    mirrored request to a single destination endpoint within the backendRef
   528    specified. (#2317, @arkodg)
   529  - HTTPRoute Method matching precedence has been clarified (#2054,
   530    @gauravkghildiyal)
   531  - Clarify that implementations must not modify HTTP Host header. Adds
   532    specificity alongside spec that port in Host header must be ignored when
   533    matching on host. (#2092, @sunjayBhatia)
   534  - Fix typo: rename GatewaReasonUnsupportedAddress ->
   535    GatewayReasonUnsupportedAddress (#2149, @panslava)
   536  - HTTPRoute: Clarified that exact path matches are truly exact, both trailing
   537    slashes and capitalization are meaningful. (#2055, @robscott)
   538  - Implementations MUST ignore any port value specified in the HTTP Host header
   539    while performing a match against HTTPRoute.Hostnames (#1980,
   540    @gauravkghildiyal)
   541  - Clarify support for using the same filter multiple times within the same HTTP or GRPC rule (#2199, #2256, @Liorlieberman)
   542  
   543  ### Conformance
   544  
   545  - Add conformance tests against accepting invalid ReferenceGrants in HTTPRoute
   546    and TLSRoute (#2076, @meyskens)
   547  - Fixed an issues causing conformance tests to fail when using IPv6 addresses
   548    (#2024, @howardjohn)
   549  - HTTPRoute connectivity is in now enforced in conformance tests if a relevant
   550    ReferenceGrant gets deleted. (#1853, @pmalek)
   551  - The `--skip-tests` flag has been added to the conformance CLI to enable tests
   552    opt-out when using it. (#2170, @mlavacca)
   553  - The experimental conformance profile suite can now be added as a stand-alone
   554    cli and by means of `go test`. (#2066, @mlavacca)
   555  - GEPs now must have a Conformance Details section that specifies the feature's
   556    name for conformance purposes. (#2115, @youngnick)
   557  - Better support mesh-only conformance testing (#2312, @kflynn)
   558  - SupportedFeatures have been restructured to be per-resource (#2323, @robscott)
   559  - Add SupportedFeature for port 8080 on Gateway (#2184, @xtineskim)
   560  - Fixes for IPv6 in Mesh (#2340, @keithmattix)
   561  - Fix leaking TCP connections which can lead to conformance test failures
   562    (#2358, @gauravkghildiyal)
   563  
   564  ### Webhook
   565  
   566  - Changed default imagePullPolicy for gateway-api-admission-server to
   567    IfNotPresent. (#2215, @networkhermit)
   568  - Webhook config works with PodAdmission restricted (#2016, @jcpunk)
   569  
   570  ### Documentation
   571  
   572  - Adds support for ParentRef targeting a Kubernetes Service resource for mesh
   573    implementations. (#2146, @mikemorris)
   574  - Clarify wording on website around Gateway API vs API Gateway (#2191,
   575    @david-martin)
   576  - GEP-1282, Backend Properties, has been declined. (#2132, @youngnick)
   577  - Added missing GEPs. (#2114, @levikobi)
   578  
   579  ### Bug Fixes
   580  
   581  - Added the missing ReferenceGrant resource the kustomization.yaml for the
   582    standard channel (#2084, @howardjohn)
   583  - Webhook validation now ensures that BackendRefs can not be specified in the
   584    same HTTPRoute rule as a Redirect filter (#2161, @slayer321)
   585  - GRPCRoute: The default match has been removed as it was invalid (it only
   586    specified a type of "Exact" without a corresponding Service or Method). Note
   587    that the match type still defaults to "Exact". (#2311, @gauravkghildiyal)
   588  
   589  
   590  # v0.8.0-rc2
   591  
   592  The working group expects that this release candidate is quite close to the final
   593  v0.8.0 release. However, breaking API changes are still possible.
   594  
   595  This release candidate is suitable for implementors, but the working group does
   596  not recommend shipping products based on a release candidate API due to the
   597  possibility of incompatible changes prior to the final release. The following
   598  represents the changes since v0.8.0-rc1:
   599  
   600  ## Changes by Kind
   601  
   602  ### Validation
   603  
   604  - Add CEL validation for GRPCRoute. (#2305, @gnossen)
   605  - HTTPRoute and GRPCRoute CRDs now provide built-in validation that ensures the
   606    uniqueness of names in Header Modifier "Remove" lists. (#2306, @robscott)
   607  
   608  ### Bug Fixes
   609  
   610  - GRPCRoute: The default match has been removed as it was invalid (it only
   611    specified a type of "Exact" without a corresponding Service or Method). Note
   612    that the match type still defaults to "Exact". (#2311, @gauravkghildiyal)
   613  
   614  ### Spec Clarifications
   615  
   616  - RequestMirrorFilter: Enhanced the doc string to be explicit about sending the
   617    mirrored request to a single destination endpoint within the backendRef
   618    specified. (#2317, @arkodg)
   619  - Resources no longer have support levels, implementations can choose to support
   620    whichever set of resources they want (#2323, @robscott)
   621  
   622  ### Conformance
   623  
   624  - Better support mesh-only conformance testing (#2312, @kflynn)
   625  - SupportedFeatures have been restructured to be per-resource (#2323, @robscott)
   626  
   627  # v0.8.0-rc1
   628  
   629  The working group expects that this release candidate is quite close to the final
   630  v0.8.0 release. However, breaking API changes are still possible.
   631  
   632  This release candidate is suitable for implementors, but the working group does
   633  not recommend shipping products based on a release candidate API due to the
   634  possibility of incompatible changes prior to the final release.
   635  
   636  ## Major Themes
   637  
   638  ### GAMMA (Service Mesh)
   639  Service mesh support per the GAMMA initiative has moved to **experimental** in
   640  `v0.8.0`. As an experimental API, **it is still possible that this will
   641  change**; the working group does not recommend shipping products based on any
   642  experimental API.
   643  
   644  When using the Gateway API to configure a service mesh, the Gateway and
   645  GatewayClass resources are not used (as there will typically only be one mesh
   646  in the cluster) and, instead, individual route resources are associated
   647  directly with Service resources. This permits configuring mesh routing while
   648  preserving the Gateway API's overall semantics.
   649  
   650  We encourage service mesh implementers and users to try this new support and
   651  we welcome feedback! Once again, though, the working group does not recommend
   652  shipping products based on this or any other experimental API. due to the
   653  possibility of incompatible changes prior to the final release.
   654  
   655  ### CEL Validation
   656  This release marks the beginning of a transition from webhook validation to CEL
   657  validation that is built into the CRDs. That will mean different things
   658  depending on the version of Kubernetes you're using:
   659  
   660  #### Kubernetes 1.25+
   661  CEL validation is fully supported. Most validation is now covered by the
   662  validating webhook, but unfortunately not quite everything.
   663  
   664  **Standard Channel:** All but one validation has been translated from the
   665  webhook to CEL. Currently the CRDs only have a case-sensitive uniqueness check
   666  for header names in header modifier filters. The webhook validation is more
   667  thorough, ensuring that the uniqueness is case-insensitive. Unfortunately that
   668  is not possible to represent with CEL today. There is more information in
   669  [#2277](https://github.com/kubernetes-sigs/gateway-api/issues/2277).
   670  
   671  **Experimental Channel:** TCPRoute, TLSRoute, and UDPRoute are fully covered by
   672  CEL validation. GRPCRoute still has some significant gaps in CEL validation that
   673  will be covered in a future release.
   674  
   675  #### Kubernetes 1.23 and 1.24
   676  CEL validation is not supported, but Gateway API v0.8.0 CRDs can still be
   677  installed. When you upgrade to Kubernetes 1.25+, the validation included in
   678  these CRDs will automatically take effect. We recommend continuing to install
   679  the validating webhook on these Kubernetes versions.
   680  
   681  #### Kubernetes 1.22 and older
   682  Unfortunately Gateway API v0.8.0 is not supported on these Kubernetes versions.
   683  Gateway API v0.8.0 CRDs include CEL validation and cannot be installed on these
   684  versions of Kubernetes. Note that Gateway API only commits to providing support
   685  for the [5 most recent versions of
   686  Kubernetes](https://gateway-api.sigs.k8s.io/concepts/versioning/#supported-versions),
   687  and thus these versions are no longer supported by Gateway API.
   688  
   689  ### API Version Changes
   690  As we prepare for a v1.0 release that will graduate Gateway, GatewayClass, and
   691  HTTPRoute to the `v1` API Version from `v1beta1`, we are continuing the process
   692  of moving away from `v1alpha2` for resources that have graduated to `v1beta1`.
   693  The following changes are included in this release:
   694  
   695  - `v1alpha2` of Gateway, GatewayClass, and HTTPRoute is no longer served
   696  - `v1alpha2` of ReferenceGrant is deprecated
   697  - `v1beta1` is now the storage version for ReferenceGrant
   698  
   699  Those changes mean that:
   700  
   701  - Users and implementations that were reading or writing from `v1alpha2` of
   702    Gateway, GatewayClass, or HTTPRoute MUST upgrade to use `v1beta1`.
   703  - Users and implementations that were reading or writing from `v1alpha2` of
   704    ReferenceGrant SHOULD upgrade to use `v1beta1`.
   705  
   706  For more information, refer to
   707  [#2069](https://github.com/kubernetes-sigs/gateway-api/pull/2069).
   708  
   709  ## Other Changes
   710  
   711  ### Status
   712  - Add IncompatibleFilters reason for implementations to specify when a route is
   713    invalid due to an invalid combination of route filters. (#2150, @sunjayBhatia)
   714  
   715  ### Spec Clarifications
   716  
   717  - HTTPRoute Method matching precedence has been clarified (#2054,
   718    @gauravkghildiyal)
   719  - Clarify that implementations must not modify HTTP Host header. Adds
   720    specificity alongside spec that port in Host header must be ignored when
   721    matching on host. (#2092, @sunjayBhatia)
   722  - Fix typo: rename GatewaReasonUnsupportedAddress ->
   723    GatewayReasonUnsupportedAddress (#2149, @panslava)
   724  - HTTPRoute: Clarified that exact path matches are truly exact, both trailing
   725    slashes and capitalization are meaningful. (#2055, @robscott)
   726  - Implementations MUST ignore any port value specified in the HTTP Host header
   727    while performing a match against HTTPRoute.Hostnames (#1980,
   728    @gauravkghildiyal)
   729  
   730  ### Conformance
   731  
   732  - Add conformance tests against accepting invalid ReferenceGrants in HTTPRoute
   733    and TLSRoute (#2076, @meyskens)
   734  - Fixed an issues causing conformance tests to fail when using IPv6 addresses
   735    (#2024, @howardjohn)
   736  - HTTPRoute connectivity is in now enforced in conformance tests if a relevant
   737    ReferenceGrant gets deleted. (#1853, @pmalek)
   738  - The `--skip-tests` flag has been added to the conformance CLI to enable tests
   739    opt-out when using it. (#2170, @mlavacca)
   740  - The experimental conformance profile suite can now be added as a stand-alone
   741    cli and by means of `go test`. (#2066, @mlavacca)
   742  - GEPs now must have a Conformance Details section that specifies the feature's
   743    name for conformance purposes. (#2115, @youngnick)
   744  
   745  ### Webhook
   746  
   747  - Changed default imagePullPolicy for gateway-api-admission-server to
   748    IfNotPresent. (#2215, @networkhermit)
   749  - Webhook config works with PodAdmission restricted (#2016, @jcpunk)
   750  
   751  ### Documentation
   752  
   753  - Adds support for ParentRef targeting a Kubernetes Service resource for mesh
   754    implementations. (#2146, @mikemorris)
   755  - Clarify wording on website around Gateway API vs API Gateway (#2191,
   756    @david-martin)
   757  - GEP-1282, Backend Properties, has been declined. (#2132, @youngnick)
   758  - Added missing GEPs. (#2114, @levikobi)
   759  
   760  ### Bug Fixes
   761  
   762  - Added the missing ReferenceGrant resource the kustomization.yaml for the
   763    standard channel (#2084, @howardjohn)
   764  - Webhook validation now ensures that BackendRefs can not be specified in the
   765    same HTTPRoute rule as a Redirect filter (#2161, @slayer321)
   766  
   767  # v0.7.1
   768  
   769  This is a patch release that includes small fixes, clarifications, and
   770  conformance tests as a follow up to the v0.7.0 release.
   771  
   772  ## Changes by Kind
   773  
   774  ### Conformance Tests
   775  
   776  - Fixed an issues causing conformance tests to fail when using IPv6 addresses.
   777    (#2024, @howardjohn)
   778  - HTTPRoute connectivity is in now enforced in conformance tests if a relevant
   779    ReferenceGrant gets deleted. (#1853, @pmalek)
   780  - New: Conformance tests for HTTP request mirroring. (#1912, @liorlieberman)
   781  - Fixes to port and scheme redirect tests: Tests now send HTTPS requests with
   782    consistent SNI and Host, Gateway now has the correct SANs. (#2039, @sunjaybhatia)
   783  - TLSRoute test now waits for namespaces to be ready. (#2067, @skriss)
   784  
   785  ### Validating Webhook
   786  
   787  - Webhook config works with "restricted" Pod Security level. (#2016, @jcpunk)
   788  
   789  ### Clarifications
   790  
   791  - HTTPRoute Method matching precedence has been clarified. (#2054,
   792    @gauravkghildiyal)
   793  - Implementations MUST ignore any port value specified in the HTTP Host header
   794    while performing a match against HTTPRoute.Hostnames. (#1980,
   795    @gauravkghildiyal)
   796  - HTTPRoute: Clarified that exact path matches are truly exact, both trailing
   797    slashes and capitalization are meaningful. (#2055, @robscott)
   798  - Gateway: Clarified that AttachedRoutes should only consider Routes that have
   799    been accepted. (#2050, @mlavacca)
   800  
   801  # v0.7.0
   802  
   803  The v0.7.0 release focuses on refining and stabilizing existing APIs. This
   804  included a focus on both conformance tests and clarifying ambiguous parts of the
   805  API spec.
   806  
   807  ## Features Graduating to Standard
   808  In addition to those broad focuses, 2 features are graduating to the
   809  standard channel:
   810  
   811  * GEP-1323: Response Header Modifiers (#1905, @robscott)
   812  * GEP-726: Path Redirects and Rewrites (#1905, @robscott)
   813  
   814  ## GEPs
   815  There are a lot of interesting GEPs in the pipeline right now, but only some of
   816  these GEPs have made it to experimental status in time for v0.7.0. The GEPs
   817  highlighted below are both in an experimental state and are either entirely new
   818  (GEP-1748) or had significant new concepts introduced (GEP-713):
   819  
   820  ### GEP-713: Policy Attachment
   821  This GEP received a major update, splitting policy attachment into two
   822  categories "Direct" and "Inherited". The new "Direct" mode enables a simplified
   823  form of policy attachment for targeting a single resource (#1565, @youngnick).
   824  
   825  ### GEP-1748: Gateway API Interaction with Multi-Cluster Services
   826  A new GEP was introduced to define how Gateway API interacts with Multi-Cluster
   827  Services. At a high level, this states that ServiceImports have "Extended"
   828  support and can be used anywhere Services can throughout the API. There's a lot
   829  more nuance here, so for the full details, refer to the GEP. (#1843, @robscott)
   830  
   831  ## Other Changes by Kind
   832  
   833  ### Status Changes
   834  
   835  - The "Ready" Gateway and Listener condition has been reserved for future use.
   836    (#1888, @howardjohn)
   837  - The UnsupportedAddress Listener condition reason has been moved to a Gateway
   838    condition reason.  (#1888, @howardjohn)
   839  - The AddressNotAssigned Gateway condition reasons has moved from Accepted to
   840    Programmed. (#1888, @howardjohn)
   841  - The NoResources Gateway condition reasons has moved from Ready to Programmed.
   842    (#1888, @howardjohn)
   843  
   844  ### Spec Cleanup
   845  
   846  - Clarification that port redirects should not add port number to Location
   847    header for HTTP and HTTPS requests on 80 and 443. (#1908, @robscott)
   848  - Port redirect when empty will depend on the configured Redirect scheme (#1880,
   849    @gauravkghildiyal)
   850  - Updated spec to clarify that Exact matches have precedence over Prefix matches
   851    and RegularExpression matches have implementation specific precedence. (#1855,
   852    @Xunzhuo)
   853  - The `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer is no
   854    longer required and is now just recommended. (#1917, @howardjohn)
   855  
   856  ### Validation Fixes
   857  
   858  - Removes GRPCRoute method match defaulting to allow for matching all requests,
   859    or matching only by header. (#1753, @skriss)
   860  - Update route validation to comply with RFC-3986 "p-char" characters. (#1644,
   861    @jackstine)
   862  - Illegal names like " " will be not allowed for query param name in
   863    HTTPQueryParamMatch. (#1796, @gyohuangxin)
   864  * Webhook: Port is now considered when validating that ParentRefs are unique
   865    (#1995, @howardjohn)
   866  
   867  ### Conformance
   868  
   869  - No conformance tests run by default anymore, including tests for GatewayClass
   870    and Gateway. A new SupportGateway feature must be opted into in order to run
   871    those tests (similar to what we've done previously for ReferenceGrant and
   872    HTTPRoute). Also with this release, `EnableAllSupportedFeatures` enables all
   873    Gateway AND Mesh features (where previously that was just Gateway). (#1894,
   874    @shaneutt)
   875  - Gateways must publish the "Programmed" condition. (#1732, @robscott)
   876  - Add `all-features` flag to enable all supported feature conformance tests.
   877    (#1642, @gyohuangxin)
   878  - A new SkipTests field has been added to the conformance test options to
   879    opt-out of specific tests. (#1578, @mlavacca)
   880  - Added: conformance tests for http rewrite host and path filters. (#1622,
   881    @LiorLieberman)
   882  - In Conformance tests, when a Route references a gateway having no listener
   883    whose allowedRoutes criteria permit the route, the reason
   884    NotAllowedByListeners should be used for the accepted condition. (#1669,
   885    @mlavacca)
   886  - Support configurable timeout for GatewayObservedGenerationBump (#1887,
   887    @Xunzhuo)
   888  - The conformance test HTTPRouteInvalidCrossNamespaceParentRef now requires the
   889    HTTPRoute accepted condition to be failing with the ParentRefNotPermitted
   890    reason. (#1694, @mlavacca)
   891  - The conformance tests always check that the HTTPRoute ResolvedRefs condition
   892    is enforced, even when the status is true. (#1668, @mlavacca)
   893  - Checks for the NotAllowedByListeners reason on the HTTPRoute's Accepted: false
   894    condition in the HTTPRouteInvalidCrossNamespaceParentRef conformance test.
   895    (#1714, @skriss)
   896  - Added conformance test to verify that path matching precedence is
   897    implemented correctly. (#1855, @Xunzhuo)
   898  - Remove a test that only covered redirect status without any other changes.
   899    (#2007, @robscott)
   900  - Port redirect when empty will depend on the configured Redirect scheme (#1880,
   901    @gauravkghildiyal)
   902  - Fixes for mesh conformance tests (#2017, @keithmattix)
   903  
   904  ### Documentation
   905  
   906  - Updated outdated content on list of resources in installation guide page.
   907    (#1857, @randmonkey)
   908  - Fix description of ReferenceGrant example in documentation by making it use
   909    the correct resources. (#1864, @matteoolivi)
   910  - Fix grammar mistake in ReferenceGrant implementation guidelines. (#1865,
   911    @matteoolivi)
   912  
   913  # v0.7.0-rc2
   914  
   915  We expect this to be our final release candidate before launching v0.7.0. This
   916  release candidate includes a variety of clarifications and conformance updates.
   917  The changelog below represents the changes since v0.7.0-rc1.
   918  
   919  ## Changes by Kind
   920  
   921  ### Spec Clarification
   922  
   923  - Port redirect when empty will depend on the configured Redirect scheme (#1880,
   924    @gauravkghildiyal)
   925  
   926  ### Conformance
   927  
   928  - Remove a test that only covered redirect status without any other changes.
   929    (#2007, @robscott)
   930  - Port redirect when empty will depend on the configured Redirect scheme (#1880,
   931    @gauravkghildiyal)
   932  
   933  ### Validation Fixes
   934  
   935  * Webhook: Port is now considered when validating that ParentRefs are unique
   936    (#1995, @howardjohn)
   937  
   938  # v0.7.0-rc1
   939  
   940  ## Changes by Kind
   941  
   942  ### Graduating to Standard
   943  
   944  - GEP-1323: Response Header Modifier has graduated to standard (#1905,
   945    @robscott)
   946  - GEP-726: Path Redirects and Rewrites has graduated to the standard channel.
   947    (#1874, @robscott)
   948  
   949  ### Experimental GEPs
   950  
   951  - The Policy Attachment GEP received a major update, splitting policy attachment
   952    into two categories "Direct" and "Inherited". The new "Direct" mode enables a
   953    simplified form of policy attachment for targeting a single resource (#1565,
   954    @youngnick)
   955  - A new GEP was introduced to define how Gateway API interacts with
   956    Multi-Cluster Services (#1843, @robscott)
   957  
   958  ### Status Changes
   959  
   960  - The "Ready" Gateway and Listener condition has been reserved for future use.
   961    (#1888, @howardjohn)
   962  - The UnsupportedAddress Listener condition reason has been moved to a Gateway
   963    condition reason.  (#1888, @howardjohn)
   964  - The AddressNotAssigned Gateway condition reasons has moved from Accepted to
   965    Programmed. (#1888, @howardjohn)
   966  - The NoResources Gateway condition reasons has moved from Ready to Programmed.
   967    (#1888, @howardjohn)
   968  
   969  ### Spec Cleanup
   970  
   971  - Clarification that port redirects should not add port number to Location
   972    header for HTTP and HTTPS requests on 80 and 443. (#1908, @robscott)
   973  - Updated spec to clarify that Exact matches have precedence over Prefix matches
   974    and RegularExpression matches have implementation specific precedence. (#1855,
   975    @Xunzhuo)
   976  - The `gateway-exists-finalizer.gateway.networking.k8s.io` finalizer is no
   977    longer required and is now just recommended. (#1917, @howardjohn)
   978  
   979  ### Validation Fixes
   980  
   981  - Removes GRPCRoute method match defaulting to allow for matching all requests,
   982    or matching only by header. (#1753, @skriss)
   983  - Update route validation to comply with RFC-3986 "p-char" characters. (#1644,
   984    @jackstine)
   985  - Illegal names like " " will be not allowed for query param name in
   986    HTTPQueryParamMatch. (#1796, @gyohuangxin)
   987  
   988  ### Conformance
   989  
   990  - No conformance tests run by default anymore, including tests for GatewayClass
   991    and Gateway. A new SupportGateway feature must be opted into in order to run
   992    those tests (similar to what we've done previously for ReferenceGrant and
   993    HTTPRoute). Also with this release, `EnableAllSupportedFeatures` enables all
   994    Gateway AND Mesh features (where previously that was just Gateway). (#1894,
   995    @shaneutt)
   996  - Gateways must publish the "Programmed" condition. (#1732, @robscott)
   997  - Add `all-features` flag to enable all supported feature conformance tests.
   998    (#1642, @gyohuangxin)
   999  - A new SkipTests field has been added to the conformance test options to
  1000    opt-out of specific tests. (#1578, @mlavacca)
  1001  - Added: conformance tests for http rewrite host and path filters. (#1622,
  1002    @LiorLieberman)
  1003  - In Conformance tests, when a Route references a gateway having no listener
  1004    whose allowedRoutes criteria permit the route, the reason
  1005    NotAllowedByListeners should be used for the accepted condition. (#1669,
  1006    @mlavacca)
  1007  - Support configurable timeout for GatewayObservedGenerationBump (#1887,
  1008    @Xunzhuo)
  1009  - The conformance test HTTPRouteInvalidCrossNamespaceParentRef now requires the
  1010    HTTPRoute accepted condition to be failing with the ParentRefNotPermitted
  1011    reason. (#1694, @mlavacca)
  1012  - The conformance tests always check that the HTTPRoute ResolvedRefs condition
  1013    is enforced, even when the status is true. (#1668, @mlavacca)
  1014  - Checks for the NotAllowedByListeners reason on the HTTPRoute's Accepted: false
  1015    condition in the HTTPRouteInvalidCrossNamespaceParentRef conformance test.
  1016    (#1714, @skriss)
  1017  - Added conformance test to verify that path matching precedence is
  1018    implemented correctly. (#1855, @Xunzhuo)
  1019  
  1020  ### Documentation
  1021  
  1022  - Updated outdated content on list of resources in installation guide page.
  1023    (#1857, @randmonkey)
  1024  - Fix description of ReferenceGrant example in documentation by making it use
  1025    the correct resources. (#1864, @matteoolivi)
  1026  - Fix grammar mistake in ReferenceGrant implementation guidelines. (#1865,
  1027    @matteoolivi)
  1028  
  1029  # v0.6.2
  1030  
  1031  This is a patch release that predominantly includes updated conformance tests
  1032  for implementations to implement.
  1033  
  1034  For all major changes since the `v0.5.x` release series, please see the
  1035  [v0.6.0](/#v060) release notes.
  1036  
  1037  ## Maintenance
  1038  
  1039  - As per [changes in upstream to container image registries] we replaced all
  1040    usage of the k8s.gcr.io registry with registry.k8s.io.
  1041    (#1736, @shaneutt)
  1042  
  1043  [changes in upstream to container image registries]:https://github.com/kubernetes/k8s.io/issues/4738
  1044  
  1045  ## Bug Fixes
  1046  
  1047  - Fix invalid HTTP redirect/rewrite examples.
  1048    (#1787, @Xunzhuo)
  1049  
  1050  ## Conformance Test Updates
  1051  
  1052  - The `HTTPRouteInvalidCrossNamespaceParentRef` conformance test now checks for
  1053    the `NotAllowedByListeners` reason on the `HTTPRoute`'s `Accepted: false`
  1054    condition to better indicate why the route was note accepted.
  1055    (#1714, @skriss)
  1056  - A conformance test was added for `HTTPRoute` to cover the behavior of a
  1057    non-matching `SectionName` similar to what was already present for
  1058    `ListenerPort`.
  1059    (#1719, @zaunist)
  1060  - Fixed an issue where tests may fail erroneously on the removal of resources
  1061    that are already removed.
  1062    (#1745, @mlavacca)
  1063  - Logging in conformance utilities related to resource's `ObservedGeneration`
  1064    has been improved to emit the `ObservedGenerations that are found for the
  1065    purpose of making it easier to debug test failures and be more verbose about
  1066    the objects in question.
  1067    (#1761, @briantkennedy)
  1068    (#1763, @briantkennedy)
  1069  - Patch instead of update in some places in conformance tests to reduce noise
  1070    in logs.
  1071    (#1760, @michaelbeaumont)
  1072  - Added `AttachedRoutes` testing to conformance tests.
  1073    (#1624, @ChaningHwang)
  1074  - The conformance tests always check that the HTTPRoute ResolvedRefs condition
  1075    is enforced, even when the status is true.
  1076    (#1668, @mlavacca)
  1077  
  1078  # v0.6.1
  1079  
  1080  This is a patch release that predominantly includes updated conformance tests
  1081  for implementations to implement.
  1082  
  1083  For all major changes since the `v0.5.x` release series, please see the
  1084  [v0.6.0](/#v060) release notes.
  1085  
  1086  ## Bug Fixes
  1087  
  1088  - Our regex for validating path characters was updated to accurately identify
  1089    "p-chars" as per RFC-3986.
  1090    (#1644, @jackstine)
  1091  - An erroneous "namespace" field was present in our webhook ClusterRoleBindings
  1092    and has been removed.
  1093    (#1684, @tao12345666333)
  1094  
  1095  ## New Features
  1096  
  1097  - Conditions for Policies have been added to the Golang library, enabling
  1098    Go-based implementations to re-use those for their downstream Policies.
  1099    (#1682, @mmamczur)
  1100  
  1101  ## Conformance Test Updates
  1102  
  1103  - Added conformance tests for checking Port, Scheme and Path to the extended and
  1104    experimental features.
  1105    (#1611, @LiorLieberman)
  1106  - Added conformance tests for HTTP rewrite
  1107    (#1622, #1628, @LiorLieberman)
  1108  - Added more conformance tests for path matching to catch known edge cases.
  1109    (#1627, @sunjayBhatia)
  1110  - Added some initial conformance tests for TLSRoute passthrough.
  1111    (#1579, @candita)
  1112  - Added conformance tests that exercise NotAllowedByListeners reason.
  1113    (#1669, @mlavacca)
  1114  - Loosen the Accepted check in GatewayClass observed generation tests to
  1115    provide a more realistic test for implementations.
  1116    (#1655, @arkodg)
  1117  - A "SkipTests" field has been added to accommodate implementations in
  1118    running subsets of the tests as needed, this can be particularly helpful
  1119    for new implementations that want to add conformance iteratively.
  1120    (#1578, @mlavacca)
  1121  - Fixed a broken test for GRPCRoute that caused an erroneous failure.
  1122    (#1692, @arkodg)
  1123  - Added "all-features" flag to conformance test to enable all supported
  1124    features on test runs.
  1125    (#1642, @gyohuangxin)
  1126  - Fixed usage of `net/http` default client in conformance test suite
  1127    (#1617, @howardjohn)
  1128  - Fixed missing reference to NoMatchingParent in godoc
  1129    (#1671, @mlavacca)
  1130  
  1131  # v0.6.0
  1132  
  1133  ## Major Changes
  1134  
  1135  ### ReferenceGrant moves to `v1beta1`, ReferencePolicy removed
  1136  
  1137  With more implementations now supporting ReferenceGrant (and more conformance coverage of the resource), we've moved ReferenceGrant to `v1beta1` in this release. **Note** that moving to beta also moves the object to the Standard channel (it was Experimental previously).
  1138  
  1139  We've also removed the already-deprecated ReferencePolicy resource, so please move over to the shiny new ReferenceGrant, which has all the same features.
  1140  
  1141  - Promotes ReferenceGrant to the v1beta1 API and the standard release channel
  1142    (#1455, @nathancoleman)
  1143  - ReferencePolicy has been removed from the API in favor of ReferenceGrant.
  1144    (#1406, @robscott)
  1145  
  1146  ### Introduce GRPCRoute
  1147  
  1148  The `GRPCRoute` resource has been introduced in order to simplify the routing of GRPC requests.
  1149  Its design is described in [GEP-1016](https://gateway-api.sigs.k8s.io/geps/gep-1016/).
  1150  As it is a new resource, it is introduced in the experimental channel.
  1151  
  1152  Thanks to @gnossen for pushing this ahead.
  1153  
  1154  - Introduce GRPCRoute resource. (#1115, @gnossen)
  1155  
  1156  ### Status updates
  1157  
  1158  As described in [GEP-1364](https://gateway-api.sigs.k8s.io/geps/gep-1364/), status conditions have been updated within the Gateway resource to make it more consistent with the rest of the API. These changes, along with some other status changes, are detailed below.
  1159  
  1160  Gateway:
  1161  
  1162  * New `Accepted` and `Programmed` conditions introduced.
  1163  * `Scheduled` condition deprecated.
  1164  * Core Conditions now `Accepted` and `Programmed`.
  1165  * Moves to Extended: `Ready`.
  1166  
  1167  Gateway Listener:
  1168  
  1169  * New `Accepted` and `Programmed` conditions introduced.
  1170  * `Detached` condition deprecated.
  1171  * Core Conditions now `Accepted`, `Programmed`, `ResolvedRefs`, and `Conflicted`.
  1172  * Moves to Extended: `Ready`.
  1173  
  1174  All Resources:
  1175  
  1176  * The `Accepted` Condition now has a `Pending` reason, which is the default until
  1177    the condition is updated by a controller.
  1178  
  1179  Route resources:
  1180  
  1181  * The `Accepted` Condition now has a `NoMatchingParent` reason, to be set on routes
  1182    when no matching parent can be found.
  1183  
  1184  The purpose of these changes is to make the status flows more consistent across objects, and to provide a clear pattern for new objects as we evolve the API.
  1185  
  1186  > **Note**: This change will require updates for implementations to be able to pass conformance tests. Implementations may choose to publish both new and old conditions, or only new conditions.
  1187  
  1188  - Adds `Accepted` and deprecates `Detached` Listener conditions and reasons (#1446, @mikemorris)
  1189  - Adds `Accepted` and deprecates `Scheduled` Gateway conditions and reasons (#1447, @mikemorris)
  1190  - Adds `Pending` reason for use with all `Accepted` conditions throughout the API (#1453, @youngnick)
  1191  - Adds `Programmed` Gateway and Listener conditions, moves `Ready` to extended
  1192    conformance (#1499, @LCaparelli)
  1193  - Add `RouteReasonNoMatchingParent` reason for `Accepted` condition. (#1516, @pmalek)
  1194  
  1195  ## Other Changes by type
  1196  
  1197  ### Deprecations
  1198  
  1199  - GatewayClass, Gateway, and HTTPRoute are now only supported with the v1beta1
  1200    version of the API. The v1alpha2 API versions of these resources will be fully
  1201    removed in a future release. Additionally, v1alpha2 is marked as deprecated
  1202    everywhere. (#1348 and #1405, @robscott)
  1203  
  1204  ### API Changes
  1205  
  1206  - A new field `responseHeaderModifier` is added to `.spec.rules.filters`, which
  1207    allows for modification of HTTP response headers (#1373, @aryan9600)
  1208  - Display the Programmed condition instead of the Ready condition in the output
  1209  - HTTPRoute: Validating webhook now ensures that Exact and Prefix path match
  1210    values can now only include valid path values per RFC-3986. (RegularExpression
  1211    path matches are not affected by this change). (#1599, @robscott)
  1212  - `RegularExpression` type selectors have been clarified to all be
  1213    `ImplementationSpecific` conformance. (#1604, @youngnick)
  1214  
  1215  ### Documentation
  1216  
  1217  - Clarify that BackendObjectReference's Port field specifies a service port, not
  1218    a target port, for Kubernetes Service backends. (#1332, @Miciah)
  1219  - HTTPRequestHeaderFilter and HTTPResponseHeaderFilter forbid configuring
  1220    multiple actions for the same header. (#1497, @rainest)
  1221  - Changes "custom" conformance level to "implementation-specific" (#1436,
  1222    @LCaparelli)
  1223  - Clarification that changes to ReferenceGrants MUST be reconciled (#1429,
  1224    @robscott)
  1225  
  1226  ### Conformance Tests
  1227  
  1228  - ExemptFeatures have been merged into SupportedFeatures providing implementations
  1229    a uniform way to specify the features they support.
  1230    (#1507, @robscott) (#1394, @gyohuangxin)
  1231  - To be conformant with the API, if there is no ReferenceGrant that grants a
  1232    listener to reference a secret in another namespace, the
  1233    ListenerConditionReason for the condition ResolvedRefs must be set to
  1234    RefNotPermitted instead of InvalidCertificateRef. (#1305, @mlavacca)
  1235  - A new test has been added to cover HTTP Redirects (#1556, @LiorLieberman)
  1236  - Fix Gateway reference in HTTPRouteInvalidParentRefNotMatchingListenerPort
  1237    (#1591, @sayboras)
  1238  
  1239  ### Build Changes
  1240  
  1241  - We now provide a [multi-arch](https://www.docker.com/blog/multi-arch-images/)
  1242    image including new support for `arm64` in addition to `amd64` for our
  1243    validating webhook.
  1244    (#627, @wilsonwu & @Xunzhuo)
  1245  
  1246  ### Developer Notes
  1247  
  1248  - Deprecated `v1alpha2` Go types are now aliases to their `v1beta1` versions
  1249    (#1390, @howardjohn)
  1250  
  1251  # v0.6.0-rc2
  1252  
  1253  We expect this to be our final release candidate before launching v0.6.0. This
  1254  release candidate includes a variety of cleanup and documentation updates. The
  1255  changelog below represents the changes since v0.6.0-rc1.
  1256  
  1257  ### Conformance Tests
  1258  
  1259  - A new test has been added to cover HTTP Redirects (#1556, @LiorLieberman)
  1260  - Fix Gateway reference in HTTPRouteInvalidParentRefNotMatchingListenerPort
  1261    (#1591, @sayboras)
  1262  
  1263  ### General Cleanup
  1264  
  1265  - Display the Programmed condition instead of the Ready condition in the output
  1266    of `kubectl get gateways`. (#1602, @skriss)
  1267  - GRPCRoute: Regex validation for Method and Service has been tightened to match
  1268    GRPC spec. (#1599, @robscott)
  1269  - GRPCRoute: Webhook validation of GRPCRoute has been expanded to closely match
  1270    HTTPRoute validation. (#1599, @robscott)
  1271  - HTTPRoute and Gateway: Gaps between webhook validation for v1alpha2 and
  1272    v1beta1 have been closed. (#1599, @robscott)
  1273  - HTTPRoute: Validating webhook now ensures that Exact and Prefix path match
  1274    values can now only include valid path values per RFC-3986. (RegularExpression
  1275    path matches are not affected by this change). (#1599, @robscott)
  1276  - The Gateway default conditions list now includes the Programmed condition.
  1277    (#1604, @youngnick)
  1278  - `RegularExpression` type selectors have been clarified to all be
  1279    `ImplementationSpecific` conformance. (#1604, @youngnick)
  1280  
  1281  # v0.6.0-rc1
  1282  
  1283  ## Major Changes
  1284  
  1285  ### ReferenceGrant moves to `v1beta1`, ReferencePolicy removed
  1286  
  1287  With more implementations now supporting ReferenceGrant (and more conformance coverage of the resource), we've moved ReferenceGrant to `v1beta1` in this release. **Note** that moving to beta also moves the object to the Standard channel (it was Experimental previously).
  1288  
  1289  We've also removed the already-deprecated ReferencePolicy resource, so please move over to the shiny new ReferenceGrant, which has all the same features.
  1290  
  1291  - Promotes ReferenceGrant to the v1beta1 API and the standard release channel
  1292    (#1455, @nathancoleman)
  1293  - ReferencePolicy has been removed from the API in favor of ReferenceGrant.
  1294    (#1406, @robscott)
  1295  
  1296  ### Introduce GRPCRoute
  1297  
  1298  The `GRPCRoute` resource has been introduced in order to simplify the routing of GRPC requests.
  1299  Its design is described in [GEP-1016](https://gateway-api.sigs.k8s.io/geps/gep-1016/).
  1300  As it is a new resource, it is introduced in the experimental channel.
  1301  
  1302  Thanks to @gnossen for pushing this ahead.
  1303  
  1304  - Introduce GRPCRoute resource. (#1115, @gnossen)
  1305  
  1306  ### Status updates
  1307  
  1308  As described in [GEP-1364](https://gateway-api.sigs.k8s.io/geps/gep-1364/), status conditions have been updated within the Gateway resource to make it more consistent with the rest of the API. These changes, along with some other status changes, are detailed below.
  1309  
  1310  Gateway:
  1311  
  1312  * New `Accepted` and `Programmed` conditions introduced.
  1313  * `Scheduled` condition deprecated.
  1314  * Core Conditions now `Accepted` and `Programmed`.
  1315  * Moves to Extended: `Ready`.
  1316  
  1317  Gateway Listener:
  1318  
  1319  * New `Accepted` and `Programmed` conditions introduced.
  1320  * `Detached` condition deprecated.
  1321  * Core Conditions now `Accepted`, `Programmed`, `ResolvedRefs`, and `Conflicted`.
  1322  * Moves to Extended: `Ready`.
  1323  
  1324  All Resources:
  1325  
  1326  * The `Accepted` Condition now has a `Pending` reason, which is the default until
  1327    the condition is updated by a controller.
  1328  
  1329  Route resources:
  1330  
  1331  * The `Accepted` Condition now has a `NoMatchingParent` reason, to be set on routes
  1332    when no matching parent can be found.
  1333  
  1334  The purpose of these changes is to make the status flows more consistent across objects, and to provide a clear pattern for new objects as we evolve the API.
  1335  
  1336  > **Note**: This change will require updates for implementations to be able to pass conformance tests. Implementations may choose to publish both new and old conditions, or only new conditions.
  1337  
  1338  - Adds `Accepted` and deprecates `Detached` Listener conditions and reasons (#1446, @mikemorris)
  1339  - Adds `Accepted` and deprecates `Scheduled` Gateway conditions and reasons (#1447, @mikemorris)
  1340  - Adds `Pending` reason for use with all `Accepted` conditions throughout the API (#1453, @youngnick)
  1341  - Adds `Programmed` Gateway and Listener conditions, moves `Ready` to extended
  1342    conformance (#1499, @LCaparelli)
  1343  - Add `RouteReasonNoMatchingParent` reason for `Accepted` condition. (#1516, @pmalek)
  1344  
  1345  ## Other Changes by type
  1346  
  1347  ### Deprecations
  1348  
  1349  - GatewayClass, Gateway, and HTTPRoute are now only supported with the v1beta1
  1350    version of the API. The v1alpha2 API versions of these resources will be fully
  1351    removed in a future release. Additionally, v1alpha2 is marked as deprecated
  1352    everywhere. (#1348 and #1405, @robscott)
  1353  
  1354  ### API Changes
  1355  
  1356  - A new field `responseHeaderModifier` is added to `.spec.rules.filters`, which
  1357    allows for modification of HTTP response headers (#1373, @aryan9600)
  1358  
  1359  ### Conformance Tests
  1360  
  1361  - ExemptFeatures have been merged into SupportedFeatures providing implementations
  1362    a uniform way to specify the features they support.
  1363    (#1507, @robscott) (#1394, @gyohuangxin)
  1364  - To be conformant with the API, if there is no ReferenceGrant that grants a
  1365    listener to reference a secret in another namespace, the
  1366    ListenerConditionReason for the condition ResolvedRefs must be set to
  1367    RefNotPermitted instead of InvalidCertificateRef. (#1305, @mlavacca)
  1368  
  1369  ### Developer Notes
  1370  
  1371  - Deprecated `v1alpha2` Go types are now aliases to their `v1beta1` versions
  1372    (#1390, @howardjohn)
  1373  - Moved type translation helpers from the `utils` package to a new package named
  1374    `translator`. (#1337, @carlisia)
  1375  
  1376  ### Documentation
  1377  
  1378  - Clarify that BackendObjectReference's Port field specifies a service port, not
  1379    a target port, for Kubernetes Service backends. (#1332, @Miciah)
  1380  - HTTPRequestHeaderFilter and HTTPResponseHeaderFilter forbid configuring
  1381    multiple actions for the same header. (#1497, @rainest)
  1382  - Changes "custom" conformance level to "implementation-specific" (#1436,
  1383    @LCaparelli)
  1384  - Clarification that changes to ReferenceGrants MUST be reconciled (#1429,
  1385    @robscott)
  1386  
  1387  ## v0.5.1
  1388  
  1389  API versions: v1beta1, v1alpha2
  1390  
  1391  This release includes a number of bug fixes and clarifications:
  1392  
  1393  ### API Spec
  1394  
  1395  * The spec has been clarified to state that the port specified in BackendRef
  1396    refers to the Service port number, not the target port, when a Service is
  1397    referenced. [#1332](https://github.com/kubernetes-sigs/gateway-api/pull/1332)
  1398  * The spec has been clarified to state that "Accepted" should be used instead of
  1399    "Attached" on HTTPRoute.
  1400    [#1382](https://github.com/kubernetes-sigs/gateway-api/pull/1382)
  1401  
  1402  ### Webhook:
  1403  
  1404  * The duplicate gateway-system namespace definitions have been removed.
  1405    [#1387](https://github.com/kubernetes-sigs/gateway-api/pull/1387)
  1406  * The webhook has been updated to watch v1beta1.
  1407    [#1365](https://github.com/kubernetes-sigs/gateway-api/pull/1368)
  1408  
  1409  ### Conformance:
  1410  
  1411  * The expected condition for a cross-namespace certificate reference that has
  1412    not been allowed by a ReferenceGrant has been changed from
  1413    "InvalidCertificateRef" to "RefNotPermitted" to more closely match the spec.
  1414    [#1351](https://github.com/kubernetes-sigs/gateway-api/pull/1351)
  1415  * A new test has been added to cover when a Gateway references a Secret that
  1416    does not exist
  1417    [#1334](https://github.com/kubernetes-sigs/gateway-api/pull/1334)
  1418  
  1419  
  1420  ## v0.5.0
  1421  
  1422  API versions: v1beta1, v1alpha2
  1423  
  1424  This release is all about stability.
  1425  
  1426  Changes in this release can largely be divided into the following categories:
  1427  
  1428  - Release Channels
  1429  - Resources graduating to beta
  1430  - New experimental features
  1431  - Bug Fixes
  1432  - General Improvements
  1433  - Breaking Changes
  1434    - Validation improvements
  1435    - Internal type cleanup
  1436  
  1437  Note: This release is largely identical to v0.5.0-rc2, this changelog tracks
  1438  the difference between v0.5.0 and v0.4.3.
  1439  
  1440  ### Release channels
  1441  
  1442  In this release, we've made two release channels available, `experimental` and
  1443  `standard`.
  1444  
  1445  The `experimental` channel contains all resources and fields, while `standard`
  1446  contains only resources that mave moved to beta status.
  1447  
  1448  We've also added a way to flag particular fields within a resource as
  1449  experimental, and any fields marked in this way are only present in the
  1450  `experimental` channel. Please see the [versioning][vers] docs for a more
  1451  detailed explanation.
  1452  
  1453  One caveat for the standard channel - due to work on the new ReferenceGrant
  1454  resource: conformance tests may not pass with the `standard` set of CRDs.
  1455  
  1456  [vers]:https://gateway-api.sigs.k8s.io/concepts/versioning/
  1457  
  1458  ### Resources Graduating to BETA
  1459  
  1460  The following APIs have been promoted to a `v1beta1` maturity:
  1461  
  1462  - `GatewayClass`
  1463  - `Gateway`
  1464  - `HTTPRoute`
  1465  
  1466  [#1192](https://github.com/kubernetes-sigs/gateway-api/pull/1192)
  1467  
  1468  ### New Experimental Features
  1469  
  1470  - Routes can now select `Gateway` listeners by port number
  1471    [#1002](https://github.com/kubernetes-sigs/gateway-api/pull/1002)
  1472  - Gateway API now includes "Experimental" release channel. Consequently, CRDs now
  1473    include `gateway.networking.k8s.io/bundle-version` and
  1474    `gateway.networking.k8s.io/channel` annotations.
  1475    [#945](https://github.com/kubernetes-sigs/gateway-api/pull/945)
  1476  - URL Rewrites and Path redirects have been added as new "Experimental" features
  1477    [#945](https://github.com/kubernetes-sigs/gateway-api/pull/945)
  1478  
  1479  ### Bug Fixes
  1480  
  1481  - Fixes a problem that would cause webhook deployment to fail on Kubernetes
  1482    v1.22 and greater.
  1483    [#991](https://github.com/kubernetes-sigs/gateway-api/pull/991)
  1484  - Fixes a bug where the `Namespace` could be unspecified in `ReferencePolicy`
  1485    [#964](https://github.com/kubernetes-sigs/gateway-api/pull/964)
  1486  - Fixes a bug where v1alpha2 GatewayClass controller names were not being
  1487    shown in the output of `kubectl get gatewayclasses`
  1488    [#909](https://github.com/kubernetes-sigs/gateway-api/pull/909)
  1489  
  1490  ### General Improvements
  1491  
  1492  - Conformance tests were introduced with [GEP-917][gep-917] and multiple
  1493    conformance tests were added from a variety of contributors under the
  1494    `conformance/` directory.
  1495  - The status of the GatewayClass "Accepted" condition for the `GatewayClass`
  1496    is now present in `kubectl get` output.
  1497    [#1168](https://github.com/kubernetes-sigs/gateway-api/pull/1168)
  1498  - New `RouteConditionReason` types `RouteReasonNotAllowedByListeners` and
  1499    `RouteReasonNoMatchingListenerHostname` were added.
  1500    [#1155](https://github.com/kubernetes-sigs/gateway-api/pull/1155)
  1501  - New `RouteConditionReason` type added with `RouteReasonAccepted`,
  1502    `RouteReasonResolvedRefs` and `RouteReasonRefNotPermitted` constants.
  1503    [#1114](https://github.com/kubernetes-sigs/gateway-api/pull/1114)
  1504  - Introduced PreciseHostname which prevents wildcard characters in relevant
  1505    Hostname values.
  1506    [#956](https://github.com/kubernetes-sigs/gateway-api/pull/956)
  1507  
  1508  [gep-917]:https://gateway-api.sigs.k8s.io/geps/gep-917/
  1509  
  1510  ### Validation Improvements
  1511  
  1512  - Webhook validation now ensures that a path match exists when required by path
  1513    modifier in filter.
  1514    [#1171](https://github.com/kubernetes-sigs/gateway-api/pull/1171)
  1515  - Webhook validation was added to ensure that only type-appropriate fields are
  1516    set in `HTTPPathModifier`.
  1517    [#1124](https://github.com/kubernetes-sigs/gateway-api/pull/1124)
  1518  - The Gateway API webhook is now deployed in a `gateway-system` namespace
  1519    instead of `gateway-api`.
  1520    [#1051](https://github.com/kubernetes-sigs/gateway-api/pull/1051)
  1521  - Adds webhook validation to ensure that no HTTP header or query param is
  1522    matched more than once in a given route rule. (#1230, @skriss)
  1523  
  1524  ### Breaking Changes
  1525  
  1526  - The v1alpha1 API version was deprecated and removed.
  1527    [#1197](https://github.com/kubernetes-sigs/gateway-api/pull/1197)
  1528    [#906](https://github.com/kubernetes-sigs/gateway-api/issues/906)
  1529  - The `NamedAddress` value for `Gateway`'s `spec.addresses[].type` field has
  1530    been deprecated, and support for domain-prefixed values (like
  1531    `example.com/NamedAddress`) has been added instead to better represent the
  1532    custom nature of this support.
  1533    [#1178](https://github.com/kubernetes-sigs/gateway-api/pull/1178)
  1534  - Implementations are now expected to use `500` instead of `503` responses when
  1535    the data-plane has no matching route.
  1536    [#1151](https://github.com/kubernetes-sigs/gateway-api/pull/1151),
  1537    [#1258](https://github.com/kubernetes-sigs/gateway-api/pull/1258)
  1538  
  1539  #### UX and Status Improvements
  1540  
  1541  The following are **breaking changes** related to status updates and end-user
  1542  experience changes.
  1543  
  1544  - The `UnsupportedExtension` named `ListenerConditionReason` has been removed.
  1545    [#1146](https://github.com/kubernetes-sigs/gateway-api/pull/1146)
  1546  - The `RouteConflict` named `ListenerConditionReason` has been removed.
  1547    [#1145](https://github.com/kubernetes-sigs/gateway-api/pull/1145)
  1548  
  1549  #### Internal Type Cleanup
  1550  
  1551  These changes will only affect implementations. Implementors will need to adjust
  1552  for the type changes when updating the Gateway API dependency in their projects.
  1553  
  1554  **NOTE**: These kinds of changes are not always present in the CHANGELOG so
  1555            please be aware that the CHANGELOG is not an exhaustive list of Go
  1556            type changes. In this case there were a significant number of changes
  1557            in a single release, so we included them for extra visibility for
  1558            implementors.
  1559  
  1560  - `ReferencePolicy` has been renamed to `ReferenceGrant`.
  1561    [#1179](https://github.com/kubernetes-sigs/gateway-api/pull/1179)
  1562  - `GatewayTLSConfig`'s `CertificateRefs` field is now a slice of pointers to
  1563    structs instead of the structs directly.
  1564    [#1176](https://github.com/kubernetes-sigs/gateway-api/pull/1176)
  1565  - `HTTPPathModifier` field `Absolute` renamed to `ReplaceFullPath`
  1566    [#1124](https://github.com/kubernetes-sigs/gateway-api/pull/1124)
  1567  - the `ParentRef` type was renamed to `ParentReference`
  1568    [#982](https://github.com/kubernetes-sigs/gateway-api/pull/982)
  1569  - Types `ConditionRouteAccepted` and `ConditionRouteResolvedRefs` are now
  1570    deprecated in favor of `RouteConditionAccepted` & `RouteConditionResolvedRefs`
  1571    [#1114](https://github.com/kubernetes-sigs/gateway-api/pull/1114)
  1572  
  1573  
  1574  ## v0.5.0-rc2
  1575  
  1576  API versions: v1beta1, v1alpha2
  1577  
  1578  We expect this to be our final release candidate before launching v0.5.0. This
  1579  release candidate includes a variety of cleanup and documentation updates.
  1580  
  1581  ### Webhook
  1582  
  1583  - Adds webhook validation to ensure that no HTTP header or query param is
  1584    matched more than once in a given route rule. (#1230, @skriss)
  1585  
  1586  ### Documentation
  1587  
  1588  - Add examples and documentation for v1beta1 (#1238, @EmilyShepherd)
  1589  - Add policy attachment example (#1233, @keithmattix)
  1590  - Add warning headers for experimental resources/concepts (#1234, @keithmattix)
  1591  - All Enum API fields have had updates to clarify that we may add values at any
  1592    time, and that implementations must handle unknown Enum values. (#1258,
  1593    @youngnick)
  1594  - Spacing has been improved around the documentation of feature-level
  1595    core/extended support for better readability and clarity. (#1241, @acnodal-tc)
  1596  - Update ReferenceGrant docs to include Gateways that reference a Secret in a
  1597    different namespace (#1181, @nathancoleman)
  1598  
  1599  ### Cleanup
  1600  
  1601  - ReferencePolicyList Items is an array of ReferencePolicy again (#1239,
  1602    @dprotaso)
  1603  - This release of experimental-install.yaml will apply successfully. Previous
  1604    releases had some extraneous yaml. (#1232, @acnodal-tc)
  1605  - The NamedAddress type is back to support backwards compatibility but it is
  1606    still formally deprecated. (#1252, @robscott)
  1607  
  1608  ## v0.5.0-rc1
  1609  
  1610  API versions: v1beta1, v1alpha2
  1611  
  1612  This release is all about stability.
  1613  
  1614  Changes in this release can largely be divided into the following categories:
  1615  
  1616  - Release Channels
  1617  - Resources graduating to beta
  1618  - New experimental features
  1619  - Bug Fixes
  1620  - General Improvements
  1621  - Breaking Changes
  1622    - Validation improvements
  1623    - Internal type cleanup
  1624  
  1625  ### Release channels
  1626  
  1627  In this release, we've made two release channels available, `experimental` and
  1628  `standard`.
  1629  
  1630  The `experimental` channel contains all resources and fields, while `standard`
  1631  contains only resources that mave moved to beta status.
  1632  
  1633  We've also added a way to flag particular fields within a resource as
  1634  experimental, and any fields marked in this way are only present in the
  1635  `experimental` channel. Please see the [versioning][vers] docs for a more
  1636  detailed explanation.
  1637  
  1638  One caveat for the standard channel - due to work on the new ReferenceGrant
  1639  resource: conformance tests may not pass with the `standard` set of CRDs.
  1640  
  1641  [vers]:https://gateway-api.sigs.k8s.io/concepts/versioning/
  1642  
  1643  ### Resources Graduating to BETA
  1644  
  1645  The following APIs have been promoted to a `v1beta1` maturity:
  1646  
  1647  - `GatewayClass`
  1648  - `Gateway`
  1649  - `HTTPRoute`
  1650  
  1651  [#1192](https://github.com/kubernetes-sigs/gateway-api/pull/1192)
  1652  
  1653  ### New Experimental Features
  1654  
  1655  - Routes can now select `Gateway` listeners by port number
  1656    [#1002](https://github.com/kubernetes-sigs/gateway-api/pull/1002)
  1657  - Gateway API now includes "Experimental" release channel. Consequently, CRDs now
  1658    include `gateway.networking.k8s.io/bundle-version` and
  1659    `gateway.networking.k8s.io/channel` annotations.
  1660    [#945](https://github.com/kubernetes-sigs/gateway-api/pull/945)
  1661  - URL Rewrites and Path redirects have been added as new "Experimental" features
  1662    [#945](https://github.com/kubernetes-sigs/gateway-api/pull/945)
  1663  
  1664  ### Bug Fixes
  1665  
  1666  - Fixes a problem that would cause webhook deployment to fail on Kubernetes
  1667    v1.22 and greater.
  1668    [#991](https://github.com/kubernetes-sigs/gateway-api/pull/991)
  1669  - Fixes a bug where the `Namespace` could be unspecified in `ReferencePolicy`
  1670    [#964](https://github.com/kubernetes-sigs/gateway-api/pull/964)
  1671  - Fixes a bug where v1alpha2 GatewayClass controller names were not being
  1672    shown in the output of `kubectl get gatewayclasses`
  1673    [#909](https://github.com/kubernetes-sigs/gateway-api/pull/909)
  1674  
  1675  ### General Improvements
  1676  
  1677  - Conformance tests were introduced with [GEP-917][gep-917] and multiple
  1678    conformance tests were added from a variety of contributors under the
  1679    `conformance/` directory.
  1680  - The status of the GatewayClass "Accepted" condition for the `GatewayClass`
  1681    is now present in `kubectl get` output.
  1682    [#1168](https://github.com/kubernetes-sigs/gateway-api/pull/1168)
  1683  - New `RouteConditionReason` types `RouteReasonNotAllowedByListeners` and
  1684    `RouteReasonNoMatchingListenerHostname` were added.
  1685    [#1155](https://github.com/kubernetes-sigs/gateway-api/pull/1155)
  1686  - New `RouteConditionReason` type added with `RouteReasonAccepted`,
  1687    `RouteReasonResolvedRefs` and `RouteReasonRefNotPermitted` constants.
  1688    [#1114](https://github.com/kubernetes-sigs/gateway-api/pull/1114)
  1689  - Introduced PreciseHostname which prevents wildcard characters in relevant
  1690    Hostname values.
  1691    [#956](https://github.com/kubernetes-sigs/gateway-api/pull/956)
  1692  
  1693  [gep-917]:https://gateway-api.sigs.k8s.io/geps/gep-917/
  1694  
  1695  ### Validation Improvements
  1696  
  1697  - Webhook validation now ensures that a path match exists when required by path
  1698    modifier in filter.
  1699    [#1171](https://github.com/kubernetes-sigs/gateway-api/pull/1171)
  1700  - Webhook validation was added to ensure that only type-appropriate fields are
  1701    set in `HTTPPathModifier`.
  1702    [#1124](https://github.com/kubernetes-sigs/gateway-api/pull/1124)
  1703  - The Gateway API webhook is now deployed in a `gateway-system` namespace
  1704    instead of `gateway-api`.
  1705    [#1051](https://github.com/kubernetes-sigs/gateway-api/pull/1051)
  1706  
  1707  ### Breaking Changes
  1708  
  1709  - The v1alpha1 API version was deprecated and removed.
  1710    [#1197](https://github.com/kubernetes-sigs/gateway-api/pull/1197)
  1711    [#906](https://github.com/kubernetes-sigs/gateway-api/issues/906)
  1712  - The `NamedAddress` value for `Gateway`'s `spec.addresses[].type` field has
  1713    been deprecated, and support for domain-prefixed values (like
  1714    `example.com/NamedAddress`) has been added instead to better represent the
  1715    custom nature of this support.
  1716    [#1178](https://github.com/kubernetes-sigs/gateway-api/pull/1178)
  1717  - Implementations are now expected to use `500` instead of `503` responses when
  1718    the data-plane has no matching route.
  1719    [#1151](https://github.com/kubernetes-sigs/gateway-api/pull/1151)
  1720  
  1721  #### UX and Status Improvements
  1722  
  1723  The following are **breaking changes** related to status updates and end-user
  1724  experience changes.
  1725  
  1726  - The `UnsupportedExtension` named `ListenerConditionReason` has been removed.
  1727    [#1146](https://github.com/kubernetes-sigs/gateway-api/pull/1146)
  1728  - The `RouteConflict` named `ListenerConditionReason` has been removed.
  1729    [#1145](https://github.com/kubernetes-sigs/gateway-api/pull/1145)
  1730  
  1731  #### Internal Type Cleanup
  1732  
  1733  These changes will only affect implementations. Implementors will need to adjust
  1734  for the type changes when updating the Gateway API dependency in their projects.
  1735  
  1736  **NOTE**: These kinds of changes are not always present in the CHANGELOG so
  1737            please be aware that the CHANGELOG is not an exhaustive list of Go
  1738            type changes. In this case there were a significant number of changes
  1739            in a single release, so we included them for extra visibility for
  1740            implementors.
  1741  
  1742  - `ReferencePolicy` has been renamed to `ReferenceGrant`.
  1743    [#1179](https://github.com/kubernetes-sigs/gateway-api/pull/1179)
  1744  - `GatewayTLSConfig`'s `CertificateRefs` field is now a slice of pointers to
  1745    structs instead of the structs directly.
  1746    [#1176](https://github.com/kubernetes-sigs/gateway-api/pull/1176)
  1747  - `HTTPPathModifier` field `Absolute` renamed to `ReplaceFullPath`
  1748    [#1124](https://github.com/kubernetes-sigs/gateway-api/pull/1124)
  1749  - the `ParentRef` type was renamed to `ParentReference`
  1750    [#982](https://github.com/kubernetes-sigs/gateway-api/pull/982)
  1751  - Types `ConditionRouteAccepted` and `ConditionRouteResolvedRefs` are now
  1752    deprecated in favor of `RouteConditionAccepted` & `RouteConditionResolvedRefs`
  1753    [#1114](https://github.com/kubernetes-sigs/gateway-api/pull/1114)
  1754  
  1755  ## v0.4.3
  1756  
  1757  API version: v1alpha2
  1758  
  1759  This release includes improvements to our webhook, including:
  1760  
  1761  * Migrating kube-webhook-certgen to k8s.gcr.io/ingress-nginx:v1.1.1.
  1762    [#1126](https://github.com/kubernetes-sigs/gateway-api/pull/1126)
  1763  * New validation to ensure that a HTTPRouterFilter Type matches its value
  1764    [#1071](https://github.com/kubernetes-sigs/gateway-api/pull/1071)
  1765  * A fix to ensure that Path match validation actually works
  1766    [#1071](https://github.com/kubernetes-sigs/gateway-api/pull/1071)
  1767  
  1768  ## v0.4.2
  1769  
  1770  API version: v1alpha2
  1771  
  1772  This release is intended to verify our webhook image tagging process.
  1773  
  1774  ### Bug Fixes
  1775  
  1776  * Update image generation process with more consistent naming
  1777    [#1034](https://github.com/kubernetes-sigs/gateway-api/pull/1034)
  1778  
  1779  ## v0.4.1
  1780  
  1781  API version: v1alpha2
  1782  
  1783  This release contains minor bug fixes for v1alpha2.
  1784  
  1785  ### Bug Fixes
  1786  
  1787  * ControllerName now prints correctly in kubectl output for GatewayClass
  1788    [#909](https://github.com/kubernetes-sigs/gateway-api/pull/909)
  1789  * Namespace can no longer be left unspecified in ReferencePolicy
  1790    [#964](https://github.com/kubernetes-sigs/gateway-api/pull/964)
  1791  * Wildcard characters can no longer be used in redirect Hostname values
  1792    [#956](https://github.com/kubernetes-sigs/gateway-api/pull/956)
  1793  
  1794  ## v0.4.0
  1795  
  1796  API version: v1alpha2
  1797  
  1798  This release contains significant breaking changes as we strive for a concise
  1799  API. We anticipate that this API will be very similar to a future v1beta1
  1800  release.
  1801  
  1802  The following changes have been made since v0.3.0:
  1803  
  1804  ### Major Changes
  1805  
  1806  * The Gateway API APIGroup has moved from `networking.x-k8s.io` to
  1807    `gateway.networking.k8s.io`. This means that, as far as the apiserver is
  1808    concerned, this version is wholly distinct from v1alpha1, and automatic
  1809    conversion is not possible. As part of this process, Gateway API is now
  1810    subject to Kubernetes API review, the same as changes made to core API
  1811    resources. More details in
  1812    [#780](https://github.com/kubernetes-sigs/gateway-api/pull/780) and
  1813    [#716](https://github.com/kubernetes-sigs/gateway-api/issues/716).
  1814  
  1815  * Gateway-Route binding changes ([GEP-724](https://gateway-api.sigs.k8s.io/geps/gep-724/)):
  1816    In v1alpha1, Gateways chose which Routes were attached using a combination of
  1817    object and namespace selectors, with the option of also specifying object
  1818    names. This resulted in a very complex config, that's easy to misinterpret. As
  1819    part of v1alpha2, we're changing to:
  1820    * Gateways *may* specify what kind of Routes they support (defaults to same
  1821      protocol if not specified), and where those Routes can be (defaults to same
  1822      namespace).
  1823    * Routes *must* directly reference the Gateways the want to attach to, this is
  1824      a list, so a Route can attach to more than one Gateway.
  1825    * The Route becomes attached only when the specifications intersect.
  1826  
  1827    We believe this is quite a bit easier to understand, and still gives good
  1828    flexibility for most use cases.
  1829    GEP added in [#725](https://github.com/kubernetes-sigs/gateway-api/pull/725).
  1830    Implemented in [#754](https://github.com/kubernetes-sigs/gateway-api/pull/754).
  1831    Further documentation was added in [#762](https://github.com/kubernetes-sigs/gateway-api/pull/762).
  1832  
  1833  * Safer cross-namespace references ([GEP-709](https://gateway-api.sigs.k8s.io/geps/gep-709/)):
  1834    This concerns (currently), references from Routes to Backends, and Gateways to
  1835    Secrets. The new behavior is:
  1836    * By default, references across namespaces are not permitted; creating a
  1837      reference across a namespace (like a Route referencing a Service in another
  1838      namespace) must be rejected by implementations.
  1839    * These references can be accepted by creating a ReferencePolicy in the
  1840      referent (target) namespace, that specifies what Kind is allowed to accept
  1841      incoming references, and from what namespace and Kind the references may be.
  1842  
  1843    The intent here is that the owner of the referent namespace must explicitly
  1844    accept incoming references, otherwise we can run into all sorts of bad things
  1845    from breaking the namespace security model.
  1846    Implemented in [#741](https://github.com/kubernetes-sigs/gateway-api/pull/741).
  1847  
  1848  * Attaching Policy to objects ([GEP-713](https://gateway-api.sigs.k8s.io/geps/gep-713/)):
  1849    This has been added so that we have an extensible mechanism for adding a
  1850    cascading set of policy to Gateway API objects.
  1851  
  1852    What policy? Well, it's kind of up to the implementations, but the best example
  1853    to begin with is timeout policy.
  1854  
  1855    Timeout policy for HTTP connections is highly dependent on how the underlying
  1856    implementation handles policy - it's very difficult to extract commonalities.
  1857  
  1858    This is intended to allow things like:
  1859    * Attach a policy that specifies the default connection timeout for backends
  1860      to a GatewayClass. All Gateways that are part of that Class will have Routes
  1861      get that default connection timeout unless they specify differently.
  1862    * If a Gateway that's a member of the GatewayClass has a different default
  1863      attached, then that will beat the GatewayClass (for defaults, more specific
  1864      object beats less specific object).
  1865    * Alternatively, a Policy that mandates that you can't set the client timeout
  1866      to "no timeout" can be attached to a GatewayClass as an override. An
  1867      override will always take effect, with less specific beating more specific.
  1868  
  1869    This one is a bit complex, but will allow implementations to solve some things
  1870    that currently require tools like admission control.
  1871    Implemented in [#736](https://github.com/kubernetes-sigs/gateway-api/pull/736).
  1872  
  1873  * As part of GEP-713, `BackendPolicy` has been removed, as its functionality is
  1874    now better handled using that mechanism.
  1875    [#732](https://github.com/kubernetes-sigs/gateway-api/pull/732).
  1876  
  1877  * Removal of certificate references from HTTPRoutes ([GEP-746](https://gateway-api.sigs.k8s.io/geps/gep-746/)):
  1878    In v1alpha1, HTTPRoute objects have a stanza that allows referencing a TLS
  1879    keypair, intended to allow people to have a more self-service model, where an
  1880    app owner can provision a TLS keypair inside their own namespace, attach it to
  1881    a HTTPRoute they control, and then have that used to secure their app.
  1882    When implementing this, however, there are a large number of edge cases that
  1883    are complex, hard to handle, and poorly defined - about checking SNI, hostname,
  1884    and overrides, that made even writing a spec on how to implement this very
  1885    difficult, let alone actually implementing it.
  1886  
  1887    In removing certificate references from HTTPRoute, we're using the
  1888    ReferencePolicy from GEP-709 to allow Gateways to securely create a
  1889    cross-namespace reference to TLS keypairs in app namespaces.
  1890    We're hopeful that this will hit most of the self-service use case, and even
  1891    if not, provide a basis to build from to meet it eventually.
  1892    GEP added in [#749](https://github.com/kubernetes-sigs/gateway-api/pull/749).
  1893    Implemented in [#768](https://github.com/kubernetes-sigs/gateway-api/pull/768).
  1894  
  1895    [GEP-851](https://github.com/kubernetes-sigs/gateway-api/blob/main/geps/gep-851.md)
  1896    was a follow up on this change that allowed multiple Certificate Refs per
  1897    Gateway Listener. This was implemented in
  1898    [#852](https://github.com/kubernetes-sigs/gateway-api/pull/852).
  1899  
  1900  * The `RouteForwardTo` (YAML: `routeForwardTo`) struct/stanza has been reworked
  1901    into the `BackendRef` (YAML: `backendRef`) struct/stanza,
  1902    [GEP-718](https://gateway-api.sigs.k8s.io/geps/gep-718/). As part of this
  1903    change, the `ServiceName` (YAML: `serviceName`) field has been removed, and
  1904    Service references must instead now use the `BackendRef`/`backendRef`
  1905    struct/stanza.
  1906  
  1907  ### Small Changes
  1908  * Extension points within match blocks from all Routes have been removed
  1909    [#829](https://github.com/kubernetes-sigs/gateway-api/pull/829). Implements
  1910    [GEP-820](https://github.com/kubernetes-sigs/gateway-api/blob/main/geps/gep-820.md).
  1911    These extension points have been removed because they are currently not used,
  1912    are poorly understood, and we don't have good use cases for them. We may
  1913    consider re-adding them in the future.
  1914  
  1915  * Controller is now a required field in Gateway references from Route status.
  1916    [#671](https://github.com/kubernetes-sigs/gateway-api/pull/671).
  1917  
  1918  * Header Matching, Query Param Matching, and HTTPRequestHeaderFilter now use
  1919    named subobjects instead of maps.
  1920    [#657](https://github.com/kubernetes-sigs/gateway-api/pull/657) and
  1921    [#681](https://github.com/kubernetes-sigs/gateway-api/pull/681)
  1922  
  1923  * [#796](https://github.com/kubernetes-sigs/gateway-api/pull/796) API Review
  1924    suggestions:
  1925    * listener.routes has been renamed to listener.allowedRoutes
  1926    * The `NoSuchGatewayClass` has been removed after it was deprecated in
  1927      v1alpha1
  1928    * `*` is no longer a valid hostname. Instead, leaving hostname unspecified is
  1929      interpreted as `*`.
  1930  
  1931  * The `scope` field has been removed from all object references.
  1932    [#882](https://github.com/kubernetes-sigs/gateway-api/pull/882)
  1933  
  1934  * "Controller" has been renamed to "ControllerName"
  1935    [#839](https://github.com/kubernetes-sigs/gateway-api/pull/839)
  1936  
  1937  * "Admitted" condition has been renamed to "Accepted" and now defaults to an
  1938    "Unknown" state instead of "False"
  1939    [#839](https://github.com/kubernetes-sigs/gateway-api/pull/839)
  1940  
  1941  * HTTPRequestRedirectFilter's Protocol field has been renamed to Scheme.
  1942    [#863](https://github.com/kubernetes-sigs/gateway-api/pull/863)
  1943  
  1944  * ImplementationSpecific match types in HTTPRoute's path, query, and header
  1945    matches have been removed.
  1946    [#850](https://github.com/kubernetes-sigs/gateway-api/pull/850)
  1947  
  1948  * The "Prefix" path match type has been renamed "PathPrefix".
  1949    [#898](https://github.com/kubernetes-sigs/gateway-api/pull/898)
  1950  
  1951  ### Small Additions
  1952  * HTTP Method matching is now added into HTTPRoute, with Extended support:
  1953    [#733](https://github.com/kubernetes-sigs/gateway-api/pull/733).
  1954  
  1955  * GatewayClass now has a 'Description' field that is printed as a column in
  1956    `kubectl get` output. You can now end up with output that looks like this:
  1957    ```shell
  1958    $> kubectl get gatewayclass
  1959    NAME       CONTROLLER                            DESCRIPTION
  1960    internal   gateway-controller-internal   For non-internet-facing Gateways.
  1961    external   gateway-controller-external   For internet-facing Gateways.
  1962    ```
  1963    See [#610](https://github.com/kubernetes-sigs/gateway-api/issues/610) and
  1964    [#653](https://github.com/kubernetes-sigs/gateway-api/pull/653) for the
  1965    details.
  1966  
  1967  ### Validation changes
  1968  * Ensure TLSConfig is empty when the protocol is HTTP, TCP, or UDP
  1969    [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  1970  * Ensure Hostname is empty when the protocol is TCP or UDP.
  1971    [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  1972  * Listener ProtocolType now has validation.
  1973    [#871](https://github.com/kubernetes-sigs/gateway-api/pull/871)
  1974  * HTTP Path match values are now validated for PathMatchExact and
  1975    PathMatchPrefix match types.
  1976    [#894](https://github.com/kubernetes-sigs/gateway-api/pull/894)
  1977  * TLS options keys are now subject to the same validation as Kubernetes
  1978    annotations. [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  1979  * TLS options values now have a max length of 4096 characters.
  1980    [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  1981  * Make `MirrorFilter.BackendRef` a required field when the mirror filter is used
  1982    [#837](https://github.com/kubernetes-sigs/gateway-api/pull/837).
  1983  
  1984  ### Clarifications
  1985  * Updated guidance on how HTTP and TLS Route status should be populated when
  1986    hostnames do not match.
  1987    [#859](https://github.com/kubernetes-sigs/gateway-api/pull/859)
  1988  * Aligned path prefix matching with Ingress by clarifying that it is a prefix of
  1989    path elements. [#869](https://github.com/kubernetes-sigs/gateway-api/pull/869)
  1990  * HTTP listeners may now be used for Cleartext HTTP/2.
  1991    [#879](https://github.com/kubernetes-sigs/gateway-api/pull/879)
  1992  * Added clarification that implementation-specific TLS options MUST be
  1993    domain-prefixed.
  1994    [#899](https://github.com/kubernetes-sigs/gateway-api/pull/899)
  1995  
  1996  ### Documentation Updates
  1997  * [#782](https://github.com/kubernetes-sigs/gateway-api/pull/782) : Restructure docs and split into versioned and unversioned
  1998  * [#777](https://github.com/kubernetes-sigs/gateway-api/pull/777) : Fix typo
  1999  * [#765](https://github.com/kubernetes-sigs/gateway-api/pull/765) : document multi-value headers as undefined
  2000  * [#761](https://github.com/kubernetes-sigs/gateway-api/pull/761) : minor improvements to navigation on docs site
  2001  * [#760](https://github.com/kubernetes-sigs/gateway-api/pull/760) : Remove references of vendor configurations in GatewayTLSConfig
  2002  * [#756](https://github.com/kubernetes-sigs/gateway-api/pull/756) : Clarify docs on invalid serviceName
  2003  * [#755](https://github.com/kubernetes-sigs/gateway-api/pull/755) : Document the supported kubernetes versions
  2004  * [#745](https://github.com/kubernetes-sigs/gateway-api/pull/745) : Remove RouteTLSConfig requirement for gateway TLS passthrough.
  2005  * [#744](https://github.com/kubernetes-sigs/gateway-api/pull/744) : automate nav for GEPs
  2006  * [#743](https://github.com/kubernetes-sigs/gateway-api/pull/743) : Add READY and ADDRESS to gateway printer columns
  2007  * [#742](https://github.com/kubernetes-sigs/gateway-api/pull/742) : Moving method match to v1alpha2 example
  2008  * [#729](https://github.com/kubernetes-sigs/gateway-api/pull/729) : Adding suggested reasons for when conditions are healthy
  2009  * [#728](https://github.com/kubernetes-sigs/gateway-api/pull/728) : Fixing wording in enhancement template
  2010  * [#723](https://github.com/kubernetes-sigs/gateway-api/pull/723) : Clarifying Redirect Support levels
  2011  * [#756](https://github.com/kubernetes-sigs/gateway-api/pull/756) : Clarify docs on invalid serviceName
  2012  * [#880](https://github.com/kubernetes-sigs/gateway-api/pull/880) : Reworking Policy vs. Filter Documentation
  2013  * [#878](https://github.com/kubernetes-sigs/gateway-api/pull/878) : Clarifying the fields that all Route types must include
  2014  * [#875](https://github.com/kubernetes-sigs/gateway-api/pull/875) : Fix HTTP path match documentation.
  2015  * [#864](https://github.com/kubernetes-sigs/gateway-api/pull/864) : Merging v1alpha2 concepts docs into unversioned docs
  2016  * [#858](https://github.com/kubernetes-sigs/gateway-api/pull/858) : Fixing broken link to spec page
  2017  * [#857](https://github.com/kubernetes-sigs/gateway-api/pull/857) : Adding missing references pages to docs navigation
  2018  * [#853](https://github.com/kubernetes-sigs/gateway-api/pull/853) : docs: Use v0.4.0-rc1 in "Getting started with Gateway APIs" for v1alpha2
  2019  * [#845](https://github.com/kubernetes-sigs/gateway-api/pull/845) : Fix markdown list formatting.
  2020  * [#844](https://github.com/kubernetes-sigs/gateway-api/pull/844) : docs: add ssl passthrough note in FAQ
  2021  * [#843](https://github.com/kubernetes-sigs/gateway-api/pull/843) : Add APISIX implementation
  2022  * [#834](https://github.com/kubernetes-sigs/gateway-api/pull/834) : Fixes some broken links
  2023  * [#807](https://github.com/kubernetes-sigs/gateway-api/pull/807) : docs: update multiple-ns guide for v1alpha2
  2024  * [#888](https://github.com/kubernetes-sigs/gateway-api/pull/888) : Corrected broken getting started
  2025  * [#885](https://github.com/kubernetes-sigs/gateway-api/pull/885) : Fix incorrect urls
  2026  * [#890](https://github.com/kubernetes-sigs/gateway-api/pull/890) : Updating HTTPRoute docs for v1alpha2
  2027  * [#870](https://github.com/kubernetes-sigs/gateway-api/pull/870) : Adding guidance on Kind vs. Resource in implementation guidelines
  2028  * [#865](https://github.com/kubernetes-sigs/gateway-api/pull/865) : Route cleanup for v1alpha2 sig-network review
  2029  
  2030  ### Tooling and infra updates
  2031  * [#766](https://github.com/kubernetes-sigs/gateway-api/pull/766) : comment out the GEP notice
  2032  * [#758](https://github.com/kubernetes-sigs/gateway-api/pull/758) : bump up mkdocs and deps
  2033  * [#751](https://github.com/kubernetes-sigs/gateway-api/pull/751) : bump up deps to k8s v1.22
  2034  * [#748](https://github.com/kubernetes-sigs/gateway-api/pull/748) : fix kustomize to install v1a2 crds
  2035  * [#747](https://github.com/kubernetes-sigs/gateway-api/pull/747) : Cleaning up GEP Template
  2036  * [#889](https://github.com/kubernetes-sigs/gateway-api/pull/889) : remove outdated version label
  2037  * [#883](https://github.com/kubernetes-sigs/gateway-api/pull/883) : validating webhook cleanup
  2038  * [#872](https://github.com/kubernetes-sigs/gateway-api/pull/872) : Remove duplicate validation from CRD & Webhook
  2039  
  2040  ## v0.4.0-rc2
  2041  
  2042  API version: v1alpha2
  2043  
  2044  The group expects that this release candidate has no changes before we release
  2045  v1alpha2 final, but are cutting here to allow implementations a chance to check
  2046  before we go to the final release.
  2047  
  2048  In general, most of the changes below have been made to reduce the complexity of
  2049  the API for v1alpha2, on the assumption that we can add functionality in later
  2050  in the API's lifecycle, but cannot remove it.
  2051  
  2052  The following changes have been made since v0.4.0-rc1:
  2053  
  2054  ### GEP implementations
  2055  * Replace `CertificateRef` field with `CertificateRefs` in `GatewayTLSConfig`.
  2056  [#852](https://github.com/kubernetes-sigs/gateway-api/pull/852). This implements
  2057  [GEP-851](https://github.com/kubernetes-sigs/gateway-api/blob/main/geps/gep-851.md),
  2058  Allow Multiple Certificate Refs per Gateway Listener.
  2059  * Extension points within match blocks from all Routes have been removed
  2060  [#829](https://github.com/kubernetes-sigs/gateway-api/pull/829). Implements
  2061  [GEP-820](https://github.com/kubernetes-sigs/gateway-api/blob/main/geps/gep-820.md).
  2062  These extension points have been removed because they are currently not used,
  2063  are poorly understood, and we don't have good use cases for them. We may
  2064  consider re-adding them in the future.
  2065  
  2066  ### Field changes
  2067  * Make `MirrorFilter.BackendRef` a required field when the mirror filter is used
  2068  [#837](https://github.com/kubernetes-sigs/gateway-api/pull/837).
  2069  * ImplementationSpecific match types in HTTPRoute's path, query, and header
  2070  matches have been removed.
  2071  [#850](https://github.com/kubernetes-sigs/gateway-api/pull/850)
  2072  * The "Prefix" path match type has been renamed "PathPrefix".
  2073  * The "ClassName" field in PolicyTargetReference has been removed.
  2074  * A new optional "Name" field has been added to ReferencePolicyTo.
  2075  [#898](https://github.com/kubernetes-sigs/gateway-api/pull/898)
  2076  
  2077  ### Field Renames
  2078  * "Controller" has been renamed to "ControllerName"
  2079  * "Admitted" condition has been renamed to "Accepted" and now defaults to an
  2080  "Unknown" state instead of "False" [#839](https://github.com/kubernetes-sigs/gateway-api/pull/839)
  2081  * HTTPRequestRedirectFilter's Protocol field has been renamed to Scheme.
  2082  [#863](https://github.com/kubernetes-sigs/gateway-api/pull/863)
  2083  
  2084  
  2085  ### Validation changes
  2086  *  Validation: Ensure TLSConfig is empty when the protocol is HTTP, TCP, or UDP
  2087  [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  2088  *  Validation: Ensure Hostname is empty when the protocol is TCP or UDP.
  2089  [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  2090  * Validation: Listener ProtocolType now has validation.
  2091  [#871](https://github.com/kubernetes-sigs/gateway-api/pull/871)
  2092  * Validation: HTTP Path match values are now validated for PathMatchExact and
  2093  PathMatchPrefix match types. [#894](https://github.com/kubernetes-sigs/gateway-api/pull/894)
  2094  
  2095  ### Documentation and specification updates
  2096  * Updated guidance on how HTTP and TLS Route status should be populated when
  2097  hostnames do not match.
  2098  [#859](https://github.com/kubernetes-sigs/gateway-api/pull/859)
  2099  * Aligned path prefix matching with Ingress by clarifying that it is a prefix of
  2100  path elements. [#869](https://github.com/kubernetes-sigs/gateway-api/pull/869)
  2101  * HTTP listeners may now be used for Cleartext HTTP/2.
  2102  [#879](https://github.com/kubernetes-sigs/gateway-api/pull/879)
  2103  * The `scope` field has been removed from all object references.
  2104  * ParentRefs can no longer refer to cluster-scoped resources.
  2105  [#882](https://github.com/kubernetes-sigs/gateway-api/pull/882)
  2106  * TLS options keys are now subject to the same validation as Kubernetes
  2107  annotations. [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  2108  * TLS options values now have a max length of 4096 characters.
  2109  [#886](https://github.com/kubernetes-sigs/gateway-api/pull/886)
  2110  * Added clarification that implementation-specific TLS options MUST be domain-prefixed.
  2111  [#899](https://github.com/kubernetes-sigs/gateway-api/pull/899)
  2112  
  2113  ### Other changes
  2114  * [#890](https://github.com/kubernetes-sigs/gateway-api/pull/890) : Updating HTTPRoute docs for v1alpha2
  2115  * [#889](https://github.com/kubernetes-sigs/gateway-api/pull/889) : remove outdated version label
  2116  * [#888](https://github.com/kubernetes-sigs/gateway-api/pull/888) : Corrected broken getting started
  2117  * [#885](https://github.com/kubernetes-sigs/gateway-api/pull/885) : Fix incorrect urls
  2118  * [#883](https://github.com/kubernetes-sigs/gateway-api/pull/883) : v1alpha2 validation fix/update
  2119  * [#880](https://github.com/kubernetes-sigs/gateway-api/pull/880) : Reworking Policy vs. Filter Documentation
  2120  * [#878](https://github.com/kubernetes-sigs/gateway-api/pull/878) : Clarifying the fields that all Route types must include
  2121  * [#875](https://github.com/kubernetes-sigs/gateway-api/pull/875) : Fix HTTP path match documentation.
  2122  * [#872](https://github.com/kubernetes-sigs/gateway-api/pull/872) : Remove duplicate validation from CRD & Webhook
  2123  * [#870](https://github.com/kubernetes-sigs/gateway-api/pull/870) : Adding guidance on Kind vs. Resource in implementation guidelines
  2124  * [#865](https://github.com/kubernetes-sigs/gateway-api/pull/865) : Route cleanup for v1alpha2 sig-network review
  2125  * [#864](https://github.com/kubernetes-sigs/gateway-api/pull/864) : Merging v1alpha2 concepts docs into unversioned docs
  2126  * [#858](https://github.com/kubernetes-sigs/gateway-api/pull/858) : Fixing broken link to spec page
  2127  * [#857](https://github.com/kubernetes-sigs/gateway-api/pull/857) : Adding missing references pages to docs navigation
  2128  * [#853](https://github.com/kubernetes-sigs/gateway-api/pull/853) : docs: Use v0.4.0-rc1 in "Getting started with Gateway APIs" for v1alpha2
  2129  * [#845](https://github.com/kubernetes-sigs/gateway-api/pull/845) : Fix markdown list formatting.
  2130  * [#844](https://github.com/kubernetes-sigs/gateway-api/pull/844) : docs: add ssl passthrough note in FAQ
  2131  * [#843](https://github.com/kubernetes-sigs/gateway-api/pull/843) : Add APISIX implementation
  2132  * [#834](https://github.com/kubernetes-sigs/gateway-api/pull/834) : Fixes some broken links
  2133  * [#807](https://github.com/kubernetes-sigs/gateway-api/pull/807) : docs: update multiple-ns guide for v1alpha2
  2134  
  2135  
  2136  ## v0.4.0-rc1
  2137  
  2138  API version: v1alpha2
  2139  
  2140  The working group expects that this release candidate is quite close to the final
  2141  v1alpha2 API. However, breaking API changes are still possible.
  2142  
  2143  This release candidate is suitable for implementors, but the working group does
  2144  not recommend shipping products based on a release candidate API due to the
  2145  possibility of incompatible changes prior to the final release.
  2146  
  2147  ### Major Changes
  2148  
  2149  * The Gateway API APIGroup has moved from `networking.x-k8s.io` to
  2150  `gateway.networking.k8s.io`. This means that, as far as the apiserver is
  2151  concerned, this version is wholly distinct from v1alpha1, and automatic conversion
  2152  is not possible. As part of this process, Gateway API is now subject to Kubernetes
  2153  API review, the same as changes made to core API resources. More details in
  2154  [#780](https://github.com/kubernetes-sigs/gateway-api/pull/780) and [#716](https://github.com/kubernetes-sigs/gateway-api/issues/716).
  2155  
  2156  * Gateway-Route binding changes:
  2157  [GEP-724](https://gateway-api.sigs.k8s.io/geps/gep-724/). Currently, Gateways
  2158  choose which Routes are attached using a combination of object and namespace
  2159  selectors, with the option of also specifying object names. This has made a very
  2160  complex config, that's easy to misinterpret. As part of v1alpha2, we're changing to:
  2161    * Gateways *may* specify what kind of Routes they support (defaults to same
  2162    protocol if not specified), and where those Routes can be (defaults to same
  2163    namespace).
  2164    * Routes *must* directly reference the Gateways the want to attach to, this is
  2165    a list, so a Route can attach to more than one Gateway.
  2166    * The Route becomes attached only when the specifications intersect.
  2167  
  2168    We believe this is quite a bit easier to understand, and still gives good
  2169    flexibility for most use cases.
  2170    GEP added in [#725](https://github.com/kubernetes-sigs/gateway-api/pull/725).
  2171    Implemented in [#754](https://github.com/kubernetes-sigs/gateway-api/pull/754).
  2172    Further documentation was added in [#762](https://github.com/kubernetes-sigs/gateway-api/pull/762).
  2173  
  2174  
  2175  * Safer cross-namespace references:
  2176  ([GEP-709](https://gateway-api.sigs.k8s.io/geps/gep-709/)): This concerns
  2177  (currently), references from Routes to Backends, and Gateways to Secrets. The
  2178  new behavior is:
  2179    * By default, references across namespaces are not permitted; creating a
  2180    reference across a namespace (like a Route referencing a Service in another
  2181    namespace) must be rejected by implementations.
  2182    * These references can be accepted by creating a ReferencePolicy in the
  2183    referent (target) namespace, that specifies what Kind is allowed to accept
  2184    incoming references, and from what namespace and Kind the references may be.
  2185  
  2186    The intent here is that the owner of the referent namespace must explicitly
  2187    accept incoming references, otherwise we can run into all sorts of bad things
  2188    from breaking the namespace security model.
  2189    Implemented in [#741](https://github.com/kubernetes-sigs/gateway-api/pull/741).
  2190  
  2191  * Attaching Policy to objects:
  2192  [GEP-713](https://gateway-api.sigs.k8s.io/geps/gep-713/): This has been added
  2193  so that we have an extensible mechanism for adding a cascading set of policy to
  2194  Gateway API objects.
  2195  
  2196    What policy? Well, it's kind of up to the implementations, but the best example
  2197    to begin with is timeout policy.
  2198  
  2199    Timeout policy for HTTP connections is highly dependent on how the underlying
  2200    implementation handles policy - it's very difficult to extract commonalities.
  2201  
  2202    This is intended to allow things like:
  2203    * Attach a policy that specifies the default connection timeout for backends
  2204    to a GatewayClass. All Gateways that are part of that Class will have Routes
  2205    get that default connection timeout unless they specify differently.
  2206    * If a Gateway that's a member of the GatewayClass has a different default
  2207    attached, then that will beat the GatewayClass (for defaults, more specific
  2208    object beats less specific object).
  2209    * Alternatively, a Policy that mandates that you can't set the client timeout
  2210    to "no timeout" can be attached to a GatewayClass as an override. An override
  2211    will always take effect, with less specific beating more specific.
  2212  
  2213    This one is a bit complex, but will allow implementations to solve some things
  2214    that currently require tools like admission control.
  2215    Implemented in [#736](https://github.com/kubernetes-sigs/gateway-api/pull/736).
  2216  
  2217  * As part of GEP-713, `BackendPolicy` has been removed, as its functionality is
  2218  now better handled using that mechanism. [#732](https://github.com/kubernetes-sigs/gateway-api/pull/732).
  2219  
  2220  * Removal of certificate references from HTTPRoutes:
  2221  [GEP-746](https://gateway-api.sigs.k8s.io/geps/gep-746/):
  2222    In v1alpha1, HTTPRoute objects have a stanza that allows referencing a TLS
  2223    keypair, intended to allow people to have a more self-service model, where an
  2224    app owner can provision a TLS keypair inside their own namespace, attach it to
  2225    a HTTPRoute they control, and then have that used to secure their app.
  2226    When implementing this, however, there are a large number of edge cases that
  2227    are complex, hard to handle, and poorly defined - about checking SNI, hostname,
  2228    and overrides, that made even writing a spec on how to implement this very
  2229    difficult, let alone actually implementing it.
  2230  
  2231    In removing certificate references from HTTPRoute, we're using the
  2232    ReferencePolicy from GEP-709 to allow Gateways to securely create a
  2233    cross-namespace reference to TLS keypairs in app namespaces.
  2234    We're hopeful that this will hit most of the self-service use case, and even
  2235    if not, provide a basis to build from to meet it eventually.
  2236    GEP added in [#749](https://github.com/kubernetes-sigs/gateway-api/pull/749).
  2237    Implemented in [#768](https://github.com/kubernetes-sigs/gateway-api/pull/768).
  2238  
  2239  * The `RouteForwardTo` (YAML: `routeForwardTo`) struct/stanza has been reworked
  2240  into the `BackendRef` (YAML: `backendRef`) struct/stanza,
  2241  [GEP-718](https://gateway-api.sigs.k8s.io/geps/gep-718/). As part of this change,
  2242  the `ServiceName` (YAML: `serviceName`) field has been removed, and Service
  2243  references must instead now use the `BackendRef`/`backendRef` struct/stanza.
  2244  
  2245  ### Other changes
  2246  * HTTP Method matching is now added into HTTPRoute, with Extended support:
  2247  [#733](https://github.com/kubernetes-sigs/gateway-api/pull/733).
  2248  
  2249  * GatewayClass now has a 'Description' field that is printed as a column in
  2250  `kubectl get` output. You can now end up with output that looks like this:
  2251    ```shell
  2252    $> kubectl get gatewayclass
  2253    NAME       CONTROLLER                            DESCRIPTION
  2254    internal   gateway-controller-internal   For non-internet-facing Gateways.
  2255    external   gateway-controller-external   For internet-facing Gateways.
  2256    ```
  2257    See [#610](https://github.com/kubernetes-sigs/gateway-api/issues/610) and
  2258    [#653](https://github.com/kubernetes-sigs/gateway-api/pull/653) for the details.
  2259  
  2260  *  [#671](https://github.com/kubernetes-sigs/gateway-api/pull/671): Controller is
  2261  now a required field in Gateway references from Route status. Fixes
  2262  [#669](https://github.com/kubernetes-sigs/gateway-api/pull/671).
  2263  
  2264  *  [#657](https://github.com/kubernetes-sigs/gateway-api/pull/657): and
  2265  [#681](https://github.com/kubernetes-sigs/gateway-api/pull/681) Header Matching,
  2266  Query Param Matching, and HTTPRequestHeaderFilter now use named subobjects
  2267  instead of maps.
  2268  
  2269  * [#796](https://github.com/kubernetes-sigs/gateway-api/pull/796) API Review suggestions:
  2270    * listener.routes has been renamed to listener.allowedRoutes
  2271    * The `NoSuchGatewayClass` has been removed after it was deprecated in v1alpha1
  2272    * `*` is no longer a valid hostname. Instead, leaving hostname unspecified is interpreted as `*`.
  2273  
  2274  ### Documentation Updates
  2275  * [#782](https://github.com/kubernetes-sigs/gateway-api/pull/782) : Restructure docs and split into versioned and unversioned
  2276  * [#777](https://github.com/kubernetes-sigs/gateway-api/pull/777) : Fix typo
  2277  * [#765](https://github.com/kubernetes-sigs/gateway-api/pull/765) : document multi-value headers as undefined
  2278  * [#761](https://github.com/kubernetes-sigs/gateway-api/pull/761) : minor improvements to navigation on docs site
  2279  * [#760](https://github.com/kubernetes-sigs/gateway-api/pull/760) : Remove references of vendor configurations in GatewayTLSConfig
  2280  * [#756](https://github.com/kubernetes-sigs/gateway-api/pull/756) : Clarify docs on invalid serviceName
  2281  * [#755](https://github.com/kubernetes-sigs/gateway-api/pull/755) : Document the supported kubernetes versions
  2282  * [#745](https://github.com/kubernetes-sigs/gateway-api/pull/745) : Remove RouteTLSConfig requirement for gateway TLS passthrough.
  2283  * [#744](https://github.com/kubernetes-sigs/gateway-api/pull/744) : automate nav for GEPs
  2284  * [#743](https://github.com/kubernetes-sigs/gateway-api/pull/743) : Add READY and ADDRESS to gateway printer columns
  2285  * [#742](https://github.com/kubernetes-sigs/gateway-api/pull/742) : Moving method match to v1alpha2 example
  2286  * [#729](https://github.com/kubernetes-sigs/gateway-api/pull/729) : Adding suggested reasons for when conditions are healthy
  2287  * [#728](https://github.com/kubernetes-sigs/gateway-api/pull/728) : Fixing wording in enhancement template
  2288  * [#723](https://github.com/kubernetes-sigs/gateway-api/pull/723) : Clarifying Redirect Support levels
  2289  * [#756](https://github.com/kubernetes-sigs/gateway-api/pull/756) : Clarify docs on invalid serviceName
  2290  
  2291  ### Tooling and infra updates
  2292  * [#766](https://github.com/kubernetes-sigs/gateway-api/pull/766) : comment out the GEP notice
  2293  * [#758](https://github.com/kubernetes-sigs/gateway-api/pull/758) : bump up mkdocs and deps
  2294  * [#751](https://github.com/kubernetes-sigs/gateway-api/pull/751) : bump up deps to k8s v1.22
  2295  * [#748](https://github.com/kubernetes-sigs/gateway-api/pull/748) : fix kustomize to install v1a2 crds
  2296  * [#747](https://github.com/kubernetes-sigs/gateway-api/pull/747) : Cleaning up GEP Template
  2297  
  2298  
  2299  ## v0.3.0
  2300  
  2301  API Version: v1alpha1
  2302  
  2303  ### API changes
  2304  
  2305  #### Gateway
  2306  - The `NoSuchGatewayClass` status reason has been deprecated.
  2307    [#635](https://github.com/kubernetes-sigs/gateway-api/pull/635)
  2308  
  2309  #### HTTPRoute
  2310  - `.spec.rules.matches.path` now has a default `prefix` match on the `/` path.
  2311    [#584](https://github.com/kubernetes-sigs/gateway-api/pull/584)
  2312  - Conflict resolution guidance has been added for rules within a route.
  2313    [#620](https://github.com/kubernetes-sigs/gateway-api/pull/620)
  2314  - HTTPRoute now supports query param matching.
  2315    [#631](https://github.com/kubernetes-sigs/gateway-api/pull/631)
  2316  
  2317  #### All Route Types
  2318  - Route status now includes controller name for each Gateway.
  2319    [#616](https://github.com/kubernetes-sigs/gateway-api/pull/616)
  2320  - Conflict resolution guidance has been added for non-HTTP routes.
  2321    [#626](https://github.com/kubernetes-sigs/gateway-api/pull/626)
  2322  
  2323  #### Misc
  2324  - Fields of type LocalObjectRef do not default to "secrets". All LocalObjectRef
  2325    fields must be specified.
  2326    [#570](https://github.com/kubernetes-sigs/gateway-api/pull/570)
  2327  - CRDs have been added to gateway-api category
  2328    [#592](https://github.com/kubernetes-sigs/gateway-api/pull/592)
  2329  - New "Age" column has been added to all resources in `kubectl get` output.
  2330    [#592](https://github.com/kubernetes-sigs/gateway-api/pull/592)
  2331  - A variety of Go types have been changed to pointers to better reflect their
  2332    optional status.
  2333    [#564](https://github.com/kubernetes-sigs/gateway-api/pull/564)
  2334    [#572](https://github.com/kubernetes-sigs/gateway-api/pull/572)
  2335    [#579](https://github.com/kubernetes-sigs/gateway-api/pull/579)
  2336  
  2337  #### Validation
  2338  - A new experimental validation package and validating webhook have been added.
  2339    [#597](https://github.com/kubernetes-sigs/gateway-api/pull/597)
  2340    [#617](https://github.com/kubernetes-sigs/gateway-api/pull/617)
  2341  
  2342  
  2343  ## v0.2.0
  2344  
  2345  API Version: v1alpha1
  2346  
  2347  ### API changes
  2348  
  2349  Service APIs has been renamed to Gateway API.
  2350  [#536](https://github.com/kubernetes-sigs/service-apis/issues/536).
  2351  
  2352  
  2353  #### GatewayClass
  2354  - The default status condition of GatewayClass resource is now `Admitted:false`
  2355    instead of `InvalidParameters:Unknown`.
  2356    [#471](https://github.com/kubernetes-sigs/service-apis/pull/471).
  2357  - `GatewayClass.spec.parametersRef` now has an optional `namespace` field to
  2358    refer to a namespace-scoped resource in addition to cluster-scoped resource.
  2359    [#543](https://github.com/kubernetes-sigs/service-apis/pull/543).
  2360  
  2361  #### Gateway
  2362  - `spec.listeners[].tls.mode` now defaults to `Terminate`.
  2363    [#518](https://github.com/kubernetes-sigs/service-apis/pull/518).
  2364  - Empty `hostname` in a listener matches all request.
  2365    [#525](https://github.com/kubernetes-sigs/service-apis/pull/525).
  2366  
  2367  #### HTTPRoute
  2368  - New `set` property has been introduced for `HTTPRequestHeader` Filter. Headers
  2369    specified under `set` are overridden instead of added.
  2370    [#475](https://github.com/kubernetes-sigs/service-apis/pull/475).
  2371  
  2372  #### Misc
  2373  - Maximum limit for `forwardTo` has been increased from `4` to `16` for all
  2374    route types.
  2375    [#493](https://github.com/kubernetes-sigs/service-apis/pull/493).
  2376  - Various changes have been made in the Kubernetes and Go API to align with
  2377    upstream Kubernetes API conventions. Some of the fields have been changed to
  2378    pointers in the Go API for this reason.
  2379    [#538](https://github.com/kubernetes-sigs/service-apis/pull/538).
  2380  
  2381  ### Documentation
  2382  
  2383  There are minor improvements to docs all around.
  2384  New guides, clarifications and various typos have been fixed.
  2385  
  2386  ## v0.1.0
  2387  
  2388  API Version: v1alpha1
  2389  
  2390  ### API changes since v0.1.0-rc2
  2391  #### GatewayClass
  2392  - CRD now includes `gc` short name.
  2393  - Change the standard condition for GatewayClass to `Admitted`, with
  2394    `InvalidParameters` as a sample reason for it to be false.
  2395  
  2396  #### Gateway
  2397  - CRD now includes `gtw` short name.
  2398  - The `DroppedRoutes` condition has been renamed to `DegradedRoutes`.
  2399  - `ListenerStatus` now includes `Protocol` and `Hostname` to uniquely link the
  2400    status to each listener.
  2401  
  2402  #### Routes
  2403  - HTTPRoute clarifications:
  2404    - Header name matching must be case-insensitive.
  2405    - Match tiebreaking semantics have been outlined in detail.
  2406  - TCPRoute, TLSRoute, and UDPRoute:
  2407    - At least 1 ForwardTo must be specified in each rule.
  2408    - Clarification that if no matches are specified, all requests should match a
  2409      rule.
  2410  - TCPRoute and UDPRoute: Validation has been added to ensure that 1-16 rules are
  2411    specified, matching other route types.
  2412  - TLSRoute: SNIs are now optional in matches. If no SNI or extensionRef are
  2413    specified, all requests match.
  2414  
  2415  #### BackendPolicy
  2416  - CRD now includes `bp` short name.
  2417  - A new `networking.x-k8s.io/app-protocol` annotation can be used to specify
  2418    AppProtocol on Services when the AppProtocol field is unavailable.
  2419  
  2420  
  2421  ## v0.1.0-rc2
  2422  
  2423  API Version: v1alpha-rc2
  2424  
  2425  ### API changes since v0.1.0-rc1
  2426  #### GatewayClass
  2427  - A recommendation to set a `gateway-exists-finalizer.networking.x-k8s.io`
  2428    finalizer on GatewayClass has been added.
  2429  - `allowedGatewayNamespaces` has been removed from GatewayClass in favor of
  2430    implementations with policy agents like Gatekeeper.
  2431  
  2432  #### Gateway
  2433  - Fields in `listeners.routes` have been renamed:
  2434    - `routes.routeSelector` -> `routes.selector`
  2435    - `routes.routeNamespaces`-> `routes.namespaces`
  2436  - `clientCertificateRef` has been removed from BackendPolicy.
  2437  - In Listeners, `routes.namespaces` now defaults to `{from: "Same"}`.
  2438  - In Listeners, support has been added for specifying custom, domain prefixed
  2439    protocols.
  2440  - In Listeners, `hostname` now closely matches Route hostname matching with wildcard
  2441    support.
  2442  - A new `UnsupportedAddress` condition has been added to Listeners to indicate
  2443    that a requested address is not supported.
  2444  - Clarification has been added to note that listeners may be merged in certain
  2445    instances.
  2446  
  2447  #### Routes
  2448  - HeaderMatchType now includes a RegularExpression option.
  2449  - Minimum weight has been decreased from 1 to 0.
  2450  - Port is now required on all Routes.
  2451  - On HTTPRoute, filters have been renamed:
  2452    - `ModifyRequestHeader` -> `RequestHeaderModifier`
  2453    - `MirrorRequest` -> `RequestMirror`
  2454    - `Custom` -> `ExtensionRef`
  2455  - TLSRoute can now specify as many as 16 SNIs instead of 10.
  2456  - Limiting the number of Gateways that may be stored in RouteGatewayStatus to
  2457    100.
  2458  - Support level of filters defined in ForwardTo has been clarified.
  2459  - Max weight has been increased to 1 million.
  2460  
  2461  
  2462  ## v0.1.0-rc1
  2463  
  2464  API Version: v1alpha-rc1
  2465  
  2466  - Initial release candidate for v1alpha1.