Skip to content

Commit 5e1f648

Browse files
authored
v0.8.0 blog entry (#2181)
* Draft v0.8.0 blog post Signed-off-by: Flynn <[email protected]> * Minor tweaks Signed-off-by: Flynn <[email protected]> * Address PR feedback -- thanks, everyone! Signed-off-by: [email protected] * Start the move of the GAMMA GEPs to Experimental. All three still need graduation requirements. Signed-off-by: [email protected] * Minor tweaks. Signed-off-by: [email protected] * Add a "+" to conformant versions of meshes. Signed-off-by: [email protected] * Grandfather GEPs 1324, 1427, and 1686 into not needing graduation requirements, as a first step toward merging these three into a single GAMMA GEP (now that we think we're in a place where we can actually do that) post-0.8.0. Signed-off-by: [email protected] * Move the date to 23 August, pull GEP-1742 and GEP-1651, and (sadly) remove Linkerd 2.14 as conformant. Signed-off-by: [email protected] * We _do_ get to say that Linkerd 2.14 is conformant, great! Signed-off-by: [email protected] * Whitespace. Signed-off-by: [email protected] * Move to 29 August Signed-off-by: [email protected] * Reconcile with Rob's edits on the K8s website Signed-off-by: [email protected] * Mention conformant meshes up top too. Signed-off-by: [email protected] * Blog index fixes. Signed-off-by: [email protected] * More index tweaks, and further rename the blog file itself. Signed-off-by: [email protected] * I hate YAML indentation. :slightly-smiling-face: Signed-off-by: [email protected] * Address review feedback and add a CEL link Signed-off-by: [email protected] * Title change and minor tweaks Signed-off-by: [email protected] * Oh, look, I missed one of the THREE PLACES this has to change... Signed-off-by: [email protected] * Heading change Signed-off-by: [email protected] * Minor - and hopefully final! - changes. Signed-off-by: [email protected] * Bump Golang to 1.20.7 to try to dodge weird GCR error. Signed-off-by: [email protected] --------- Signed-off-by: Flynn <[email protected]> Signed-off-by: [email protected]
1 parent 3d22aa5 commit 5e1f648

File tree

8 files changed

+260
-10
lines changed

8 files changed

+260
-10
lines changed

docker/Dockerfile.webhook

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# limitations under the License.
1414

1515
ARG BUILDPLATFORM=linux/amd64
16-
FROM --platform=$BUILDPLATFORM golang:1.20.5 AS build-env
16+
FROM --platform=$BUILDPLATFORM golang:1.20.7 AS build-env
1717
RUN mkdir -p /go/src/sig.k8s.io/gateway-api
1818
WORKDIR /go/src/sig.k8s.io/gateway-api
1919
COPY . .

geps/gep-1324.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
# GEP-1324: Service Mesh in Gateway API
22

33
* Issue: [#1324](https://github.com/kubernetes-sigs/gateway-api/issues/1324)
4-
* Status: Provisional
4+
* Status: Experimental
5+
6+
> **Note**: This GEP is exempt from the [Probationary Period][expprob] rules
7+
> of our GEP overview as it existed before those rules did, and so it has been
8+
> explicitly grandfathered in.
9+
10+
[expprob]:https://gateway-api.sigs.k8s.io/geps/overview/#probationary-period
511

612
## Overview
713

@@ -164,3 +170,4 @@ These are goals that we aren’t explicitly excluding, but will reconsider at a
164170
* Multicluster use-cases (e.g. Kubernetes MCS or cluster federation)
165171
* Heterogenous deployment targets (e.g VMs, serverless)
166172
* Deployment models (e.g. installation, mesh upgrades)
173+

geps/gep-1426.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
# GEP-1426: xRoutes Mesh Binding
22

33
* Issue: [#1294](https://github.com/kubernetes-sigs/gateway-api/issues/1294)
4-
* Status: Implementable
4+
* Status: Experimental
5+
6+
> **Note**: This GEP is exempt from the [Probationary Period][expprob] rules
7+
> of our GEP overview as it existed before those rules did, and so it has been
8+
> explicitly grandfathered in.
9+
10+
[expprob]:https://gateway-api.sigs.k8s.io/geps/overview/#probationary-period
511

612
## Overview
713

@@ -353,7 +359,7 @@ This is done by configuring the `parentRef`, to point to the `istio` `Mesh`. Thi
353359
354360
### New field on `HTTPRoute` for `Service` binding
355361
356-
A new field `serviceBinding` would be added to `HTTPRoute` to attach to the `Service`. Alternatively, this could be a new field in [`HTTPRouteMatch`](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteMatch). As with the proposed implementation, this approach could be combined with a `Mesh` resource or similar as the `parentRef`, which would just define that the route would be applied to a mesh.
362+
A new field `serviceBinding` would be added to `HTTPRoute` to attach to the `Service`. Alternatively, this could be a new field in [`HTTPRouteMatch`](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1beta1.HTTPRouteMatch). As with the proposed implementation, this approach could be combined with a `Mesh` resource or similar as the `parentRef`, which would just define that the route would be applied to a mesh.
357363
358364
```
359365
spec:
@@ -400,7 +406,7 @@ spec:
400406
401407
Functionally such a mesh could be implemented using the existing gateway spec - a GAMMA implementation would only remove the extra hop through the `Gateway`, using sidecars, or it may use a specialized per-namespace gateway to isolate the mesh traffic (like [Istio Ambient](https://istio.io/latest/blog/2022/introducing-ambient-mesh/)). Proxyless gRPC could also use this to route directly.
402408
403-
This solution could work well for both non-`cluster.local` names but also for egress, where a `Gateway` with `class: egress` could define names that are external to the mesh and need to either have policies applied or go to a dedicated egress gateway.
409+
This solution could work well for both non-`cluster.local` names but also for egress, where a `Gateway` with `class: egress` could define names that are external to the mesh and need to either have policies applied or go to a dedicated egress gateway.
404410
405411
#### Drawbacks
406412

geps/gep-1686.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
# GEP-1686: Mesh conformance testing plan
22

33
- Issue: [#1686](https://github.com/kubernetes-sigs/gateway-api/issues/1686)
4-
- Status: Implementable
4+
- Status: Experimental
5+
6+
> **Note**: This GEP is exempt from the [Probationary Period][expprob] rules
7+
> of our GEP overview as it existed before those rules did, and so it has been
8+
> explicitly grandfathered in.
9+
10+
[expprob]:https://gateway-api.sigs.k8s.io/geps/overview/#probationary-period
511

612
## TLDR
713

mkdocs.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ nav:
9191
- geps/gep-735.md
9292
- geps/gep-1282.md
9393
- Provisional:
94-
- geps/gep-1324.md
9594
- geps/gep-1619.md
9695
- geps/gep-1897.md
9796
- geps/gep-1867.md
9897
- Implementable:
9998
- geps/gep-1742.md
100-
- geps/gep-1686.md
101-
- geps/gep-1426.md
10299
- Experimental:
100+
- geps/gep-1324.md
101+
- geps/gep-1426.md
102+
- geps/gep-1686.md
103103
- geps/gep-1748.md
104104
- geps/gep-1651.md
105105
- geps/gep-1016.md
@@ -127,6 +127,8 @@ nav:
127127
- Contributor Ladder: contributing/contributor-ladder.md
128128
- Blog:
129129
- Index: blog/index.md
130+
- 2023:
131+
- blog/2023/0829-mesh-support.md
130132
- 2022:
131133
- blog/2022/graduating-to-beta.md
132134
- 2021:
Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
---
2+
description: >
3+
We are excited to announce the v0.8.0 release of Gateway API, where service
4+
mesh support has has now reached Experimental status, we've introduced CEL
5+
validation and a Mesh conformance profile, and more!
6+
---
7+
8+
# Gateway API v0.8.0: Introducing Service Mesh Support!
9+
10+
<small style="position:relative; top:-30px;">
11+
:octicons-calendar-24: August 29, 2023 ·
12+
:octicons-clock-24: 5 min read
13+
</small>
14+
15+
We are thrilled to announce the v0.8.0 release of Gateway API! With this
16+
release, Gateway API support for service mesh has reached [Experimental
17+
status][status], and we've also made some smaller additions such as CEL
18+
validation. We look forward to your feedback!
19+
20+
We're especially delighted to announce that Kuma 2.3+, Linkerd 2.14+, and
21+
Istio 1.16+ are all fully-conformant implementations of the Gateway API
22+
service mesh support.
23+
24+
## Service mesh support in Gateway API
25+
26+
While the initial focus of Gateway API was always ingress (north-south)
27+
traffic, it was clear almost from the beginning that the same basic routing
28+
concepts should also be applicable to service mesh (east-west) traffic. In
29+
2022, the Gateway API subproject started the [GAMMA initiative][gamma], a
30+
dedicated vendor-neutral workstream, specifically to examine how best to fit
31+
service mesh support into the framework of the Gateway API resources, without
32+
requiring users of Gateway API to relearn everything they understand about the
33+
API.
34+
35+
Over the last year, GAMMA has dug deeply into the challenges and possible
36+
solutions around using the Gateway API for service mesh. The end result is a
37+
small number of [enhancement proposals][geps] that subsume many hours of
38+
thought and debate, and provide a minimum viable path to allow the Gateway API
39+
to be used for service mesh.
40+
41+
### How will mesh routing work when using the Gateway API?
42+
43+
You can find all the details in the [Gateway API Mesh routing
44+
documentation][mesh-routing] and [GEP-1426], but the short version for Gateway
45+
API v0.8.0 is that an HTTPRoute can now have a `parentRef` that is a Service,
46+
rather than just a Gateway. We anticipate future GEPs in this area as we gain
47+
more experience with service mesh use cases -- binding to a Service makes it
48+
possible to use the Gateway API with a service mesh, but there are several
49+
interesting use cases that remain difficult to cover.
50+
51+
As an example, you might use an HTTPRoute to do an A-B test in the mesh as
52+
follows:
53+
54+
```yaml
55+
apiVersion: gateway.networking.k8s.io/v1beta1
56+
kind: HTTPRoute
57+
metadata:
58+
name: bar-route
59+
spec:
60+
parentRefs:
61+
- group: ""
62+
kind: Service
63+
name: demo-app
64+
port: 5000
65+
rules:
66+
- matches:
67+
- headers:
68+
- type: Exact
69+
name: env
70+
value: v1
71+
backendRefs:
72+
- name: demo-app-v1
73+
port: 5000
74+
- backendRefs:
75+
- name: demo-app-v2
76+
port: 5000
77+
```
78+
79+
Any request to port 5000 of the `demo-app` Service that has the header `env:
80+
v1` will be routed to `demo-app-v1`, while any request without that header
81+
will be routed to `demo-app-v2` -- and since this is being handled by the
82+
service mesh, not the ingress controller, the A/B test can happen anywhere in
83+
the application's call graph.
84+
85+
### How do I know this will be truly portable?
86+
87+
Gateway API has been investing heavily in conformance tests across all
88+
features it supports, and mesh is no exception. One of the challenges that the
89+
GAMMA initiative ran into is that many of these tests were strongly tied to
90+
the idea that a given implementation provides an ingress controller. Many
91+
service meshes don't, and requiring a GAMMA-conformant mesh to also implement
92+
an ingress controller seemed impractical at best. This resulted in work
93+
restarting on Gateway API _conformance profiles_, as discussed in [GEP-1709].
94+
95+
The basic idea of conformance profiles is that we can define subsets of the
96+
Gateway API, and allow implementations to choose (and document) which subsets
97+
they conform to. GAMMA is adding a new profile, named `Mesh` and described in
98+
[GEP-1686], which checks only the mesh functionality as defined by GAMMA. At
99+
this point, Kuma 2.3+, Linkerd 2.14+, and Istio 1.16+ are all conformant with
100+
the `Mesh` profile.
101+
102+
## What else is in Gateway API v0.8.0?
103+
104+
This release is all about preparing Gateway API for the upcoming v1.0 release
105+
where HTTPRoute, Gateway, and GatewayClass will graduate to GA. There are two
106+
main changes related to this: CEL validation and GEP process changes.
107+
108+
### CEL Validation
109+
110+
The first major change is that Gateway API v0.8.0 is the start of a transition
111+
from webhook validation to [CEL validation][cel] using information built into
112+
the CRDs. That will mean different things depending on the version of
113+
Kubernetes you're using:
114+
115+
#### Kubernetes 1.25+
116+
117+
CEL validation is fully supported, and almost all validation is implemented in
118+
CEL. (The sole exception is that header names in header modifier filters can
119+
only do case-insensitive validation. There is more information in [issue
120+
2277].)
121+
122+
We recommend _not_ using the validating webhook on these Kubernetes versions.
123+
124+
#### Kubernetes 1.23 and 1.24
125+
126+
CEL validation is not supported, but Gateway API v0.8.0 CRDs can still be
127+
installed. When you upgrade to Kubernetes 1.25+, the validation included in
128+
these CRDs will automatically take effect.
129+
130+
We recommend continuing to use the validating webhook on these Kubernetes
131+
versions.
132+
133+
#### Kubernetes 1.22 and older
134+
135+
Gateway API only commits to support for [5 most recent versions of
136+
Kubernetes][supported-versions]. As such, these versions are no longer
137+
supported by Gateway API, and unfortunately Gateway API v0.8.0 cannot be
138+
installed on them, since CRDs containing CEL validation will be rejected.
139+
140+
### GEP Process Changes
141+
142+
The second significant change in Gateway API v0.8.0 is that we have (by
143+
necessity) taken a hard look at the process around [Experimental][status]
144+
GEPs. Some of these GEPs have been lingering long enough that projects have
145+
come to rely on them in production use, which is a bit of a breakdown of the
146+
GEP process. In order to prevent it happening in the future, we have changed
147+
the GEP process such that reaching [Experimental][status] _requires_ that a
148+
GEP include both the graduation criteria by which the GEP will become
149+
[Standard][status], and a probationary period after which the GEP will be
150+
dropped if does not meet its graduation criteria.
151+
152+
For an exhaustive list of changes included in the `v0.8.0` release, please see
153+
the [v0.8.0 release notes]. For more information on Gateway API versioning,
154+
refer to the [official documentation][versioning docs].
155+
156+
## How can I get started with the Gateway API?
157+
158+
Gateway API represents the future of load balancing, routing, and service mesh
159+
APIs in Kubernetes. There are already more than 20 [implementations][impl]
160+
available (including both ingress controllers and service meshes) and the list
161+
keeps growing.
162+
163+
If you're interested in getting started with Gateway API, take a look at the
164+
[API concepts documentation][concepts] and check out some of the
165+
[Guides][guides] to try it out. Because this is a CRD-based API, you can
166+
install the latest version on any Kubernetes 1.23+ cluster.
167+
168+
If you're specifically interested in helping to contribute to Gateway API, we
169+
would love to have you! Please feel free to [open a new issue][issue] on the
170+
repository, or join in the [discussions][disc]. Also check out the [community
171+
page][community] which includes links to the Slack channel and community
172+
meetings. We look forward to seeing you!!
173+
174+
## Further Reading:
175+
176+
- [GEP-1324] provides an overview of the GAMMA goals and some important
177+
definitions. This GEP is well worth a read for its discussion of the problem
178+
space.
179+
- [GEP-1426] defines how to use Gateway API route resources, such as
180+
HTTPRoute, to manage traffic within a service mesh.
181+
- [GEP-1686] builds on the work of [GEP-1709] to define a _conformance
182+
profile_ for service meshes to be declared conformant with the Gateway API.
183+
184+
Although these are [Experimental][status] patterns, note that they are
185+
available in the [`standard` release channel][ch], since the GAMMA initiative
186+
has not needed to introduce new resources or fields to date.
187+
188+
[gamma]:/concepts/gamma/
189+
[status]:/geps/overview/#status
190+
[ch]:/concepts/versioning/#release-channels-eg-experimental-standard
191+
[cel]:https://kubernetes.io/docs/reference/using-api/cel/
192+
[crd]:https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
193+
[concepts]:/concepts/api-overview/
194+
[geps]:/contributing/enhancement-requests/
195+
[guides]:/guides/getting-started/
196+
[impl]:/implementations/
197+
[install-crds]:/guides/getting-started/#install-the-crds
198+
[issue]:https://github.com/kubernetes-sigs/gateway-api/issues/new/choose
199+
[disc]:https://github.com/kubernetes-sigs/gateway-api/discussions
200+
[community]:/contributing/community/
201+
[mesh-routing]:/concepts/gamma/#how-the-gateway-api-works-for-service-mesh
202+
[GEP-1426]:/geps/gep-1426/
203+
[GEP-1324]:/geps/gep-1324/
204+
[GEP-1686]:/geps/gep-1686/
205+
[GEP-1709]:/geps/gep-1709/
206+
[issue 2277]:https://github.com/kubernetes-sigs/gateway-api/issues/2277
207+
[supported-versions]:/concepts/versioning/#supported-versions
208+
[v0.8.0 release notes]:https://github.com/kubernetes-sigs/gateway-api/releases/tag/v0.8.0
209+
[versioning docs]:/concepts/versioning/

site-src/blog/index.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
# Blog
22

3+
4+
5+
## [Gateway API: Introducing Service Mesh Support!]
6+
7+
<small style="position:relative; top:-10px;">
8+
:octicons-calendar-24: August 29, 2023 ·
9+
:octicons-clock-24: 5 min read
10+
</small>
11+
12+
We are thrilled to announce the v0.8.0 release of Gateway API! With this
13+
release, Gateway API support for service mesh has reached [Experimental
14+
status][status], we've introduced CEL validation and a `Mesh` conformance
15+
profile, and we've made some changes to the GEP process. We look forward to
16+
your feedback!
17+
18+
[:octicons-arrow-right-24: Continue reading][Gateway API: Introducing Service Mesh Support!]
19+
20+
[status]:https://gateway-api.sigs.k8s.io/geps/overview/#status
21+
[Gateway API: Introducing Service Mesh Support!]:/blog/2023/0829-mesh-support
22+
323
## [Gateway API Graduates to Beta]
424

525
<small style="position:relative; top:-10px;">

site-src/implementations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ Traefik is currently working on implementing UDP, and ReferenceGrant. Status upd
364364

365365
### Tyk
366366

367-
[Tyk Gateway][tyk-gateway] is a cloud-native, open source, API Gateway.
367+
[Tyk Gateway][tyk-gateway] is a cloud-native, open source, API Gateway.
368368

369369
The [Tyk.io][tyk] team is working towards an implementation of the Gateway API. You can track progress of this project [here][tyk-operator].
370370

0 commit comments

Comments
 (0)