|
| 1 | +# KEP-2829: Migrate Gateway API to k8s.io Group |
| 2 | + |
| 3 | +<!-- toc --> |
| 4 | +- [Summary](#summary) |
| 5 | +- [Motivation](#motivation) |
| 6 | + - [Goals](#goals) |
| 7 | +- [Proposal](#proposal) |
| 8 | + - [Risks and Mitigations](#risks-and-mitigations) |
| 9 | +- [Design Details](#design-details) |
| 10 | + - [Graduation Criteria](#graduation-criteria) |
| 11 | + - [Alpha](#alpha) |
| 12 | + - [Beta](#beta) |
| 13 | +- [Production Readiness Review Questionnaire](#production-readiness-review-questionnaire) |
| 14 | + - [Feature Enablement and Rollback](#feature-enablement-and-rollback) |
| 15 | + - [Rollout, Upgrade and Rollback Planning](#rollout-upgrade-and-rollback-planning) |
| 16 | + - [Monitoring Requirements](#monitoring-requirements) |
| 17 | + - [Dependencies](#dependencies) |
| 18 | +- [Implementation History](#implementation-history) |
| 19 | +- [Drawbacks](#drawbacks) |
| 20 | +- [Alternatives](#alternatives) |
| 21 | +<!-- /toc --> |
| 22 | + |
| 23 | +## Summary |
| 24 | + |
| 25 | +*Note: This KEP is primarily for tracking purposes. The code for this feature is |
| 26 | +all out-of-tree, but the using the k8s.io API group requires API review. Most |
| 27 | +sections of this KEP will be marked as not applicable.* |
| 28 | + |
| 29 | +This KEP aims to transition [Gateway API](https://gateway-api.sigs.k8s.io) from |
| 30 | +an experimental API (x-k8s.io) to an official one (k8s.io) as part of the |
| 31 | +v1alpha2 release. The APIs will continue to be represented as CRDs, but will be |
| 32 | +subject to the standard [Kubernetes API review |
| 33 | +process](https://github.com/kubernetes/community/blob/master/sig-architecture/api-review-process.md). |
| 34 | + |
| 35 | +## Motivation |
| 36 | + |
| 37 | +Although Gateway API started as an experimental API, we are preparing a v1alpha2 |
| 38 | +release that we believe will be a significant step towards stabilizing the API. |
| 39 | +The number of [implementations of the |
| 40 | +API](https://gateway-api.sigs.k8s.io/references/implementations/) continues to |
| 41 | +grow, and we believe that transitioning to an official Kubernetes API will help |
| 42 | +provide greater quality and stability going forward. |
| 43 | + |
| 44 | +### Goals |
| 45 | + |
| 46 | +* Formalize transition of Gateway API from x-k8s.io API group to k8s.io. |
| 47 | +* Organize full Kubernetes API reviews as part of the transition. |
| 48 | + |
| 49 | +## Proposal |
| 50 | + |
| 51 | +This is a large API, it would not be practical to include it within this KEP. |
| 52 | +Instead, the API review process will happen through a separate PR or set of PRs |
| 53 | +on the [Gateway API repo](https://github.com/kubernetes-sigs/gateway-api). |
| 54 | +Subproject maintainers will review PRs and API-changes on a per patch basis, |
| 55 | +while upstream k8s api-reviewers will review API changes on a release by release |
| 56 | +basis. In addition to this, subproject maintainers could involve k8s |
| 57 | +api-reviewers on a case-by-case as needed. |
| 58 | + |
| 59 | +### Risks and Mitigations |
| 60 | + |
| 61 | +N/A |
| 62 | + |
| 63 | +## Design Details |
| 64 | + |
| 65 | +N/A |
| 66 | + |
| 67 | +### Graduation Criteria |
| 68 | + |
| 69 | +#### Alpha |
| 70 | + |
| 71 | +- Approval from subproject owners + KEP reviewers |
| 72 | + |
| 73 | +#### Beta |
| 74 | + |
| 75 | +- v1alpha2 APIs are implemented by several implementations |
| 76 | +- Approval from subproject owners + KEP reviewers |
| 77 | +- Initial conformance tests are in place |
| 78 | +- Validating webhook for advanced validation |
| 79 | +- We know users of the API are deploying apps with this API and exercising most |
| 80 | + of the API surface |
| 81 | + |
| 82 | +## Production Readiness Review Questionnaire |
| 83 | + |
| 84 | +### Feature Enablement and Rollback |
| 85 | + |
| 86 | +###### How can this feature be enabled / disabled in a live cluster? |
| 87 | + |
| 88 | +N/A |
| 89 | + |
| 90 | +###### Does enabling the feature change any default behavior? |
| 91 | + |
| 92 | +No |
| 93 | + |
| 94 | +###### Can the feature be disabled once it has been enabled (i.e. can we roll back the enablement)? |
| 95 | + |
| 96 | +N/A |
| 97 | + |
| 98 | +###### What happens if we reenable the feature if it was previously rolled back? |
| 99 | + |
| 100 | +N/A |
| 101 | + |
| 102 | +###### Are there any tests for feature enablement/disablement? |
| 103 | + |
| 104 | +N/A |
| 105 | + |
| 106 | +### Rollout, Upgrade and Rollback Planning |
| 107 | + |
| 108 | +###### How can a rollout or rollback fail? Can it impact already running workloads? |
| 109 | + |
| 110 | +N/A |
| 111 | + |
| 112 | +###### What specific metrics should inform a rollback? |
| 113 | + |
| 114 | +N/A |
| 115 | + |
| 116 | +###### Were upgrade and rollback tested? Was the upgrade->downgrade->upgrade path tested? |
| 117 | + |
| 118 | +N/A |
| 119 | + |
| 120 | +###### Is the rollout accompanied by any deprecations and/or removals of features, APIs, fields of API types, flags, etc.? |
| 121 | + |
| 122 | +No |
| 123 | + |
| 124 | +### Monitoring Requirements |
| 125 | + |
| 126 | +###### How can an operator determine if the feature is in use by workloads? |
| 127 | + |
| 128 | +N/A |
| 129 | + |
| 130 | +###### How can someone using this feature know that it is working for their instance? |
| 131 | + |
| 132 | +N/A |
| 133 | + |
| 134 | +###### What are the reasonable SLOs (Service Level Objectives) for the enhancement? |
| 135 | + |
| 136 | +N/A |
| 137 | + |
| 138 | +###### What are the SLIs (Service Level Indicators) an operator can use to determine the health of the service? |
| 139 | + |
| 140 | +N/A |
| 141 | + |
| 142 | +###### Are there any missing metrics that would be useful to have to improve observability of this feature? |
| 143 | + |
| 144 | +N/A |
| 145 | + |
| 146 | +### Dependencies |
| 147 | + |
| 148 | +###### Does this feature depend on any specific services running in the cluster? |
| 149 | + |
| 150 | +No |
| 151 | + |
| 152 | +## Implementation History |
| 153 | + |
| 154 | +* November 2020 - [email protected] released |
| 155 | +* February 2021 - [email protected] released |
| 156 | +* April 2021 - [email protected] released |
| 157 | + |
| 158 | +## Drawbacks |
| 159 | + |
| 160 | +Transitioning to a new API group will mean that resources in each group will be |
| 161 | +entirely unique. If users have both new and old APIs installed, even a simple |
| 162 | +operation like `kubectl get gateway` would only return results from one of the |
| 163 | +installed API groups. This is unfortunate, but represents a reason to make this |
| 164 | +change before the API becomes more stable and has a larger userbase. |
| 165 | + |
| 166 | +## Alternatives |
| 167 | + |
| 168 | +This API could stay as an experimental API indefinitely, but that would be very |
| 169 | +confusing for users. |
0 commit comments