Skip to content

Commit fbc8515

Browse files
Merge branch 'kubernetes:main' into hi-12
2 parents 7ecb6b6 + 579d46e commit fbc8515

File tree

64 files changed

+2938
-2845
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2938
-2845
lines changed

content/en/blog/_posts/2020-08-21-Moving-Forward-From-Beta/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ In Kubernetes, features follow a defined
1212
First, as the twinkle of an eye in an interested developer. Maybe, then,
1313
sketched in online discussions, drawn on the online equivalent of a cafe
1414
napkin. This rough work typically becomes a
15-
[Kubernetes Enhancement Proposal](https://github.com/kubernetes/enhancements/blob/master/keps/0001-kubernetes-enhancement-proposal-process.md#kubernetes-enhancement-proposal-process) (KEP), and
15+
[Kubernetes Enhancement Proposal](https://github.com/kubernetes/enhancements/blob/master/keps/sig-architecture/0000-kep-process/README.md#kubernetes-enhancement-proposal-process) (KEP), and
1616
from there it usually turns into code.
1717

1818
For Kubernetes v1.20 and onwards, we're focusing on helping that code
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
layout: blog
3+
title: "Kubernetes 1.28: A New (alpha) Mechanism For Safer Cluster Upgrades"
4+
date: 2023-08-28
5+
slug: kubernetes-1-28-feature-mixed-version-proxy-alpha
6+
---
7+
8+
**Author:** Richa Banker (Google)
9+
10+
This blog describes the _mixed version proxy_, a new alpha feature in Kubernetes 1.28. The
11+
mixed version proxy enables an HTTP request for a resource to be served by the correct API server
12+
in cases where there are multiple API servers at varied versions in a cluster. For example,
13+
this is useful during a cluster upgrade, or when you're rolling out the runtime configuration of
14+
the cluster's control plane.
15+
16+
## What problem does this solve?
17+
When a cluster undergoes an upgrade, the kube-apiservers existing at different versions in that scenario can serve different sets (groups, versions, resources) of built-in resources. A resource request made in this scenario may be served by any of the available apiservers, potentially resulting in the request ending up at an apiserver that may not be aware of the requested resource; consequently it being served a 404 not found error which is incorrect. Furthermore, incorrect serving of the 404 errors can lead to serious consequences such as namespace deletion being blocked incorrectly or objects being garbage collected mistakenly.
18+
19+
## How do we solve the problem?
20+
21+
{{< figure src="/images/blog/2023-08-28-a-new-alpha-mechanism-for-safer-cluster-upgrades/mvp-flow-diagram.svg" class="diagram-large" >}}
22+
23+
The new feature “Mixed Version Proxy” provides the kube-apiserver with the capability to proxy a request to a peer kube-apiserver which is aware of the requested resource and hence can serve the request. To do this, a new filter has been added to the handler chain in the API server's aggregation layer.
24+
25+
1. The new filter in the handler chain checks if the request is for a group/version/resource that the apiserver doesn't know about (using the existing [StorageVersion API](https://github.com/kubernetes/kubernetes/blob/release-1.28/pkg/apis/apiserverinternal/types.go#L25-L37)). If so, it proxies the request to one of the apiservers that is listed in the ServerStorageVersion object. If the identified peer apiserver fails to respond (due to reasons like network connectivity, race between the request being received and the controller registering the apiserver-resource info in ServerStorageVersion object), then error 503("Service Unavailable") is served.
26+
2. To prevent indefinite proxying of the request, a (new for v1.28) HTTP header `X-Kubernetes-APIServer-Rerouted: true` is added to the original request once it is determined that the request cannot be served by the original API server. Setting that to true marks that the original API server couldn't handle the request and it should therefore be proxied. If a destination peer API server sees this header, it never proxies the request further.
27+
3. To set the network location of a kube-apiserver that peers will use to proxy requests, the value passed in `--advertise-address` or (when `--advertise-address` is unspecified) the `--bind-address` flag is used. For users with network configurations that would not allow communication between peer kube-apiservers using the addresses specified in these flags, there is an option to pass in the correct peer address as `--peer-advertise-ip` and `--peer-advertise-port` flags that are introduced in this feature.
28+
29+
## How do I enable this feature?
30+
Following are the required steps to enable the feature:
31+
32+
* Download the [latest Kubernetes project](/releases/download/) (version `v1.28.0` or later)
33+
* Switch on the feature gate with the command line flag `--feature-gates=UnknownVersionInteroperabilityProxy=true` on the kube-apiservers
34+
* Pass the CA bundle that will be used by source kube-apiserver to authenticate destination kube-apiserver's serving certs using the flag `--peer-ca-file` on the kube-apiservers. Note: this is a required flag for this feature to work. There is no default value enabled for this flag.
35+
* Pass the correct ip and port of the local kube-apiserver that will be used by peers to connect to this kube-apiserver while proxying a request. Use the flags `--peer-advertise-ip` and `peer-advertise-port` to the kube-apiservers upon startup. If unset, the value passed to either `--advertise-address` or `--bind-address` is used. If those too, are unset, the host's default interface will be used.
36+
37+
## What’s missing?
38+
Currently we only proxy resource requests to a peer kube-apiserver when its determined to do so. Next we need to address how to work discovery requests in such scenarios. Right now we are planning to have the following capabilities for beta
39+
40+
* Merged discovery across all kube-apiservers
41+
* Use an egress dialer for network connections made to peer kube-apiservers
42+
43+
## How can I learn more?
44+
45+
- Read the [Mixed Version Proxy documentation](/docs/concepts/architecture/mixed-version-proxy)
46+
- Read [KEP-4020: Unknown Version Interoperability Proxy](https://github.com/kubernetes/enhancements/tree/master/keps/sig-api-machinery/4020-unknown-version-interoperability-proxy)
47+
48+
## How can I get involved?
49+
Reach us on [Slack](https://slack.k8s.io/): [#sig-api-machinery](https://kubernetes.slack.com/messages/sig-api-machinery), or through the [mailing list](https://groups.google.com/forum/#!forum/kubernetes-sig-api-machinery).
50+
51+
Huge thanks to the contributors that have helped in the design, implementation, and review of this feature: Daniel Smith, Han Kang, Joe Betz, Jordan Liggit, Antonio Ojea, David Eads and Ben Luddy!
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
---
2+
layout: blog
3+
title: "Gateway API v0.8.0: Introducing Service Mesh Support"
4+
date: 2023-08-29T10:00:00-08:00
5+
slug: gateway-api-v0-8
6+
---
7+
8+
***Authors:*** Flynn (Buoyant), John Howard (Google), Keith Mattix (Microsoft), Michael Beaumont (Kong), Mike Morris (independent), Rob Scott (Google)
9+
10+
We are thrilled to announce the v0.8.0 release of Gateway API! With this
11+
release, Gateway API support for service mesh has reached [Experimental
12+
status][status]. We look forward to your feedback!
13+
14+
We're especially delighted to announce that Kuma 2.3+, Linkerd 2.14+, and Istio
15+
1.16+ are all fully-conformant implementations of Gateway API service mesh
16+
support.
17+
18+
## Service mesh support in Gateway API
19+
20+
While the initial focus of Gateway API was always ingress (north-south)
21+
traffic, it was clear almost from the beginning that the same basic routing
22+
concepts should also be applicable to service mesh (east-west) traffic. In
23+
2022, the Gateway API subproject started the [GAMMA initiative][gamma], a
24+
dedicated vendor-neutral workstream, specifically to examine how best to fit
25+
service mesh support into the framework of the Gateway API resources, without
26+
requiring users of Gateway API to relearn everything they understand about the
27+
API.
28+
29+
Over the last year, GAMMA has dug deeply into the challenges and possible
30+
solutions around using Gateway API for service mesh. The end result is a small
31+
number of [enhancement proposals][geps] that subsume many hours of thought and
32+
debate, and provide a minimum viable path to allow Gateway API to be used for
33+
service mesh.
34+
35+
### How will mesh routing work when using Gateway API?
36+
37+
You can find all the details in the [Gateway API Mesh routing
38+
documentation][mesh-routing] and [GEP-1426], but the short version for Gateway
39+
API v0.8.0 is that an HTTPRoute can now have a `parentRef` that is a Service,
40+
rather than just a Gateway. We anticipate future GEPs in this area as we gain
41+
more experience with service mesh use cases -- binding to a Service makes it
42+
possible to use the Gateway API with a service mesh, but there are several
43+
interesting use cases that remain difficult to cover.
44+
45+
As an example, you might use an HTTPRoute to do an A-B test in the mesh as
46+
follows:
47+
48+
```yaml
49+
apiVersion: gateway.networking.k8s.io/v1beta1
50+
kind: HTTPRoute
51+
metadata:
52+
name: bar-route
53+
spec:
54+
parentRefs:
55+
- group: ""
56+
kind: Service
57+
name: demo-app
58+
port: 5000
59+
rules:
60+
- matches:
61+
- headers:
62+
- type: Exact
63+
name: env
64+
value: v1
65+
backendRefs:
66+
- name: demo-app-v1
67+
port: 5000
68+
- backendRefs:
69+
- name: demo-app-v2
70+
port: 5000
71+
```
72+
73+
Any request to port 5000 of the `demo-app` Service that has the header `env:
74+
v1` will be routed to `demo-app-v1`, while any request without that header
75+
will be routed to `demo-app-v2` -- and since this is being handled by the
76+
service mesh, not the ingress controller, the A/B test can happen anywhere in
77+
the application's call graph.
78+
79+
### How do I know this will be truly portable?
80+
81+
Gateway API has been investing heavily in conformance tests across all
82+
features it supports, and mesh is no exception. One of the challenges that the
83+
GAMMA initiative ran into is that many of these tests were strongly tied to
84+
the idea that a given implementation provides an ingress controller. Many
85+
service meshes don't, and requiring a GAMMA-conformant mesh to also implement
86+
an ingress controller seemed impractical at best. This resulted in work
87+
restarting on Gateway API _conformance profiles_, as discussed in [GEP-1709].
88+
89+
The basic idea of conformance profiles is that we can define subsets of the
90+
Gateway API, and allow implementations to choose (and document) which subsets
91+
they conform to. GAMMA is adding a new profile, named `Mesh` and described in
92+
[GEP-1686], which checks only the mesh functionality as defined by GAMMA. At
93+
this point, Kuma 2.3+, Linkerd 2.14+, and Istio 1.16+ are all conformant with
94+
the `Mesh` profile.
95+
96+
## What else is in Gateway API v0.8.0?
97+
98+
This release is all about preparing Gateway API for the upcoming v1.0 release
99+
where HTTPRoute, Gateway, and GatewayClass will graduate to GA. There are two
100+
main changes related to this: CEL validation and API version changes.
101+
102+
### CEL Validation
103+
104+
The first major change is that Gateway API v0.8.0 is the start of a transition
105+
from webhook validation to [CEL validation][cel] using information built into
106+
the CRDs. That will mean different things depending on the version of
107+
Kubernetes you're using:
108+
109+
#### Kubernetes 1.25+
110+
111+
CEL validation is fully supported, and almost all validation is implemented in
112+
CEL. (The sole exception is that header names in header modifier filters can
113+
only do case-insensitive validation. There is more information in [issue
114+
2277].)
115+
116+
We recommend _not_ using the validating webhook on these Kubernetes versions.
117+
118+
#### Kubernetes 1.23 and 1.24
119+
120+
CEL validation is not supported, but Gateway API v0.8.0 CRDs can still be
121+
installed. When you upgrade to Kubernetes 1.25+, the validation included in
122+
these CRDs will automatically take effect.
123+
124+
We recommend continuing to use the validating webhook on these Kubernetes
125+
versions.
126+
127+
#### Kubernetes 1.22 and older
128+
129+
Gateway API only commits to support for [5 most recent versions of
130+
Kubernetes][supported-versions]. As such, these versions are no longer
131+
supported by Gateway API, and unfortunately Gateway API v0.8.0 cannot be
132+
installed on them, since CRDs containing CEL validation will be rejected.
133+
134+
### API Version Changes
135+
136+
As we prepare for a v1.0 release that will graduate Gateway, GatewayClass, and
137+
HTTPRoute to the `v1` API Version from `v1beta1`, we are continuing the process
138+
of moving away from `v1alpha2` for resources that have graduated to `v1beta1`.
139+
For more information on this change and everything else included in this
140+
release, refer to the [v0.8.0 release notes][v0.8.0 release notes].
141+
142+
## How can I get started with Gateway API?
143+
144+
Gateway API represents the future of load balancing, routing, and service mesh
145+
APIs in Kubernetes. There are already more than 20 [implementations][impl]
146+
available (including both ingress controllers and service meshes) and the list
147+
keeps growing.
148+
149+
If you're interested in getting started with Gateway API, take a look at the
150+
[API concepts documentation][concepts] and check out some of the
151+
[Guides][guides] to try it out. Because this is a CRD-based API, you can
152+
install the latest version on any Kubernetes 1.23+ cluster.
153+
154+
If you're specifically interested in helping to contribute to Gateway API, we
155+
would love to have you! Please feel free to [open a new issue][issue] on the
156+
repository, or join in the [discussions][disc]. Also check out the [community
157+
page][community] which includes links to the Slack channel and community
158+
meetings. We look forward to seeing you!!
159+
160+
## Further Reading:
161+
162+
- [GEP-1324] provides an overview of the GAMMA goals and some important
163+
definitions. This GEP is well worth a read for its discussion of the problem
164+
space.
165+
- [GEP-1426] defines how to use Gateway API route resources, such as
166+
HTTPRoute, to manage traffic within a service mesh.
167+
- [GEP-1686] builds on the work of [GEP-1709] to define a _conformance
168+
profile_ for service meshes to be declared conformant with Gateway API.
169+
170+
Although these are [Experimental][status] patterns, note that they are available
171+
in the [`standard` release channel][ch], since the GAMMA initiative has not
172+
needed to introduce new resources or fields to date.
173+
174+
[gamma]:https://gateway-api.sigs.k8s.io/concepts/gamma/
175+
[status]:https://gateway-api.sigs.k8s.io/geps/overview/#status
176+
[ch]:https://gateway-api.sigs.k8s.io/concepts/versioning/#release-channels-eg-experimental-standard
177+
[cel]:/docs/reference/using-api/cel/
178+
[crd]:/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
179+
[concepts]:https://gateway-api.sigs.k8s.io/concepts/api-overview/
180+
[geps]:https://gateway-api.sigs.k8s.io/contributing/enhancement-requests/
181+
[guides]:https://gateway-api.sigs.k8s.io/guides/getting-started/
182+
[impl]:https://gateway-api.sigs.k8s.io/implementations/
183+
[install-crds]:https://gateway-api.sigs.k8s.io/guides/getting-started/#install-the-crds
184+
[issue]:https://github.com/kubernetes-sigs/gateway-api/issues/new/choose
185+
[disc]:https://github.com/kubernetes-sigs/gateway-api/discussions
186+
[community]:https://gateway-api.sigs.k8s.io/contributing/community/
187+
[mesh-routing]:https://gateway-api.sigs.k8s.io/concepts/gamma/#how-the-gateway-api-works-for-service-mesh
188+
[GEP-1426]:https://gateway-api.sigs.k8s.io/geps/gep-1426/
189+
[GEP-1324]:https://gateway-api.sigs.k8s.io/geps/gep-1324/
190+
[GEP-1686]:https://gateway-api.sigs.k8s.io/geps/gep-1686/
191+
[GEP-1709]:https://gateway-api.sigs.k8s.io/geps/gep-1709/
192+
[issue 2277]:https://github.com/kubernetes-sigs/gateway-api/issues/2277
193+
[supported-versions]:https://gateway-api.sigs.k8s.io/concepts/versioning/#supported-versions
194+
[v0.8.0 release notes]:https://github.com/kubernetes-sigs/gateway-api/releases/tag/v0.8.0
195+
[versioning docs]:https://gateway-api.sigs.k8s.io/concepts/versioning/

content/en/docs/concepts/services-networking/ingress-controllers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Kubernetes as a project supports and maintains [AWS](https://github.com/kubernet
4141
* [Easegress IngressController](https://github.com/megaease/easegress/blob/main/doc/reference/ingresscontroller.md) is an [Easegress](https://megaease.com/easegress/) based API gateway that can run as an ingress controller.
4242
* F5 BIG-IP [Container Ingress Services for Kubernetes](https://clouddocs.f5.com/containers/latest/userguide/kubernetes/)
4343
lets you use an Ingress to configure F5 BIG-IP virtual servers.
44-
* [FortiADC Ingress Controller](https://docs.fortinet.com/document/fortiadc/7.0.0/fortiadc-ingress-controller-1-0/742835/fortiadc-ingress-controller-overview) support the Kubernetes Ingress resources and allows you to manage FortiADC objects from Kubernetes
44+
* [FortiADC Ingress Controller](https://docs.fortinet.com/document/fortiadc/7.0.0/fortiadc-ingress-controller/742835/fortiadc-ingress-controller-overview) support the Kubernetes Ingress resources and allows you to manage FortiADC objects from Kubernetes
4545
* [Gloo](https://gloo.solo.io) is an open-source ingress controller based on [Envoy](https://www.envoyproxy.io),
4646
which offers API gateway functionality.
4747
* [HAProxy Ingress](https://haproxy-ingress.github.io/) is an ingress controller for

content/en/docs/concepts/storage/volumes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ overlays), the `emptyDir` may run out of capacity before this limit.
258258
{{< note >}}
259259
If the `SizeMemoryBackedVolumes` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled,
260260
you can specify a size for memory backed volumes. If no size is specified, memory
261-
backed volumes are sized to 50% of the memory on a Linux host.
261+
backed volumes are sized to node allocatable memory.
262262
{{< /note>}}
263263

264264
#### emptyDir configuration example

content/en/docs/concepts/workloads/controllers/replicaset.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ it should create to meet the number of replicas criteria. A ReplicaSet then fulf
3434
and deleting Pods as needed to reach the desired number. When a ReplicaSet needs to create new Pods, it uses its Pod
3535
template.
3636

37-
A ReplicaSet is linked to its Pods via the Pods' [metadata.ownerReferences](/docs/concepts/architecture/garbage-collection/#owners-and-dependents)
37+
A ReplicaSet is linked to its Pods via the Pods' [metadata.ownerReferences](/docs/concepts/architecture/garbage-collection/#owners-dependents)
3838
field, which specifies what resource the current object is owned by. All Pods acquired by a ReplicaSet have their owning
3939
ReplicaSet's identifying information within their ownerReferences field. It's through this link that the ReplicaSet
4040
knows of the state of the Pods it is maintaining and plans accordingly.

content/en/docs/setup/production-environment/tools/kubeadm/install-kubeadm.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ There are some important considerations for the Kubernetes package repositories:
158158
over the package builds. This means that anything before v1.24.0 will only be
159159
available in the Google-hosted repository.
160160
- There's a dedicated package repository for each Kubernetes minor version.
161-
When upgrading to to a different minor release, you must bear in mind that
161+
When upgrading to a different minor release, you must bear in mind that
162162
the package repository details also change.
163163

164164
{{< /note >}}

0 commit comments

Comments
 (0)