Skip to content

Commit f476c2c

Browse files
committed
More clearly recommend Gateway API
Updates docs to more clearly recommend Gateway API and remove any implementation-specific references from the main Ingress docs.
1 parent 5b983d1 commit f476c2c

File tree

3 files changed

+67
-41
lines changed

3 files changed

+67
-41
lines changed

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

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,52 @@ title: Ingress Controllers
33
description: >-
44
In order for an [Ingress](/docs/concepts/services-networking/ingress/) to work in your cluster,
55
there must be an _ingress controller_ running.
6-
You need to select at least one ingress controller and make sure it is set up in your cluster.
6+
You need to select at least one ingress controller and make sure it is set up in your cluster.
77
This page lists common ingress controllers that you can deploy.
88
content_type: concept
99
weight: 50
1010
---
1111

12-
<!-- overview -->
12+
{{< warning >}}
13+
The Ingress API has been frozen.
14+
{{< /warning >}}
15+
16+
<!-- body -->
1317

14-
In order for the Ingress resource to work, the cluster must have an ingress controller running.
18+
<!-- overview -->
1519

16-
Unlike other types of controllers which run as part of the `kube-controller-manager` binary, Ingress controllers
17-
are not started automatically with a cluster. Use this page to choose the ingress controller implementation
18-
that best fits your cluster.
20+
## Consider using Gateway API
21+
[Gateway API](/docs/concepts/services-networking/gateway/) is GA and includes
22+
many more features (and controllers). The following table highlights some of the
23+
differences between the APIs:
24+
25+
| | Ingress | Gateway API |
26+
| - | - | - |
27+
| GA | ✅ Yes | ✅ Yes |
28+
| Basic HTTP path matching | ✅ Yes | ✅ Yes |
29+
| Traffic Splitting | ❌ No | ✅ Yes |
30+
| More Protocols (gRPC, TLS) | ❌ No | ✅ Yes |
31+
| More Matchers (Headers, Query Params, Methods) | ❌ No | ✅ Yes |
32+
| Redirects | ❌ No | ✅ Yes |
33+
| Rewrites | ❌ No | ✅ Yes |
34+
| TLS Validation | ❌ No | ✅ Yes |
35+
| Cross-Namespace References | ❌ No | ✅ Yes |
36+
| AI Extensions | ❌ No |[Yes](https://gateway-api-inference-extension.sigs.k8s.io/) |
37+
| Service Mesh Support | ❌ No | ✅ Yes |
38+
| More Features in Development | ❌ No | ✅ Yes |
39+
| Conformance Tests | 🟡 Some | ✅ Thorough |
40+
| # of Implementations |[33](/docs/concepts/services-networking/ingress-controllers) |[34](https://gateway-api.sigs.k8s.io/implementations/) |
41+
42+
43+
## Ingress Controllers
1944

2045
Kubernetes as a project supports and maintains [AWS](https://github.com/kubernetes-sigs/aws-load-balancer-controller#readme), [GCE](https://git.k8s.io/ingress-gce/README.md#readme), and
2146
[nginx](https://git.k8s.io/ingress-nginx/README.md#readme) ingress controllers.
2247

2348

2449
<!-- body -->
2550

26-
## Additional controllers
51+
## Additional Controllers
2752

2853
{{% thirdparty-content %}}
2954

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

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
reviewers:
3-
- bprashanth
3+
- robscott
4+
- rikatz
45
title: Ingress
56
api_metadata:
67
- apiVersion: "networking.k8s.io/v1"
@@ -20,12 +21,35 @@ weight: 30
2021
{{< feature-state for_k8s_version="v1.19" state="stable" >}}
2122
{{< glossary_definition term_id="ingress" length="all" >}}
2223

23-
{{< note >}}
24-
Ingress is frozen. New features are being added to the [Gateway API](/docs/concepts/services-networking/gateway/).
25-
{{< /note >}}
24+
{{< warning >}}
25+
The Ingress API has been frozen.
26+
{{< /warning >}}
2627

2728
<!-- body -->
2829

30+
## Consider using Gateway API
31+
[Gateway API](/docs/concepts/services-networking/gateway/) is GA and includes
32+
many more features. The following table highlights some of the differences
33+
between the APIs:
34+
35+
| | Ingress | Gateway API |
36+
| - | - | - |
37+
| GA | ✅ Yes | ✅ Yes |
38+
| Basic HTTP path matching | ✅ Yes | ✅ Yes |
39+
| Traffic Splitting | ❌ No | ✅ Yes |
40+
| More Protocols (gRPC, TLS) | ❌ No | ✅ Yes |
41+
| More Matchers (Headers, Query Params, Methods) | ❌ No | ✅ Yes |
42+
| Redirects | ❌ No | ✅ Yes |
43+
| Rewrites | ❌ No | ✅ Yes |
44+
| TLS Validation | ❌ No | ✅ Yes |
45+
| Cross-Namespace References | ❌ No | ✅ Yes |
46+
| AI Extensions | ❌ No |[Yes](https://gateway-api-inference-extension.sigs.k8s.io/) |
47+
| Service Mesh Support | ❌ No | ✅ Yes |
48+
| More Features in Development | ❌ No | ✅ Yes |
49+
| Conformance Tests | 🟡 Some | ✅ Thorough |
50+
| # of Implementations |[30](/docs/concepts/services-networking/ingress-controllers) |[34](https://gateway-api.sigs.k8s.io/implementations/) |
51+
52+
2953
## Terminology
3054

3155
For clarity, this guide defines the following terms:
@@ -68,7 +92,6 @@ uses a service of type [Service.Type=NodePort](/docs/concepts/services-networkin
6892
You must have an [Ingress controller](/docs/concepts/services-networking/ingress-controllers)
6993
to satisfy an Ingress. Only creating an Ingress resource has no effect.
7094

71-
You may need to deploy an Ingress controller such as [ingress-nginx](https://kubernetes.github.io/ingress-nginx/deploy/).
7295
You can choose from a number of [Ingress controllers](/docs/concepts/services-networking/ingress-controllers).
7396

7497
Ideally, all Ingress controllers should fit the reference specification. In reality, the various Ingress
@@ -91,10 +114,6 @@ For general information about working with config files, see
91114
[deploying applications](/docs/tasks/run-application/run-stateless-application-deployment/),
92115
[configuring containers](/docs/tasks/configure-pod-container/configure-pod-configmap/),
93116
[managing resources](/docs/concepts/workloads/management/).
94-
Ingress frequently uses annotations to configure some options depending on the Ingress controller, an example of which
95-
is the [rewrite-target annotation](https://github.com/kubernetes/ingress-nginx/blob/main/docs/examples/rewrite/README.md).
96-
Different [Ingress controllers](/docs/concepts/services-networking/ingress-controllers) support different annotations.
97-
Review the documentation for your choice of Ingress controller to learn which annotations are supported.
98117

99118
The [Ingress spec](/docs/reference/kubernetes-api/service-resources/ingress-v1/#IngressSpec)
100119
has all the information needed to configure a load balancer or proxy server. Most importantly, it
@@ -104,12 +123,6 @@ for directing HTTP(S) traffic.
104123
If the `ingressClassName` is omitted, a [default Ingress class](#default-ingress-class)
105124
should be defined.
106125

107-
There are some ingress controllers, that work without the definition of a
108-
default `IngressClass`. For example, the Ingress-NGINX controller can be
109-
configured with a [flag](https://kubernetes.github.io/ingress-nginx/user-guide/k8s-122-migration/#what-is-the-flag-watch-ingress-without-class)
110-
`--watch-ingress-without-class`. It is [recommended](https://kubernetes.github.io/ingress-nginx/user-guide/k8s-122-migration/#i-have-only-one-ingress-controller-in-my-cluster-what-should-i-do) though, to specify the
111-
default `IngressClass` as shown [below](#default-ingress-class).
112-
113126
### Ingress rules
114127

115128
Each HTTP rule contains the following information:
@@ -298,7 +311,7 @@ spec:
298311
299312
{{% /tab %}}
300313
{{% tab name="Namespaced" %}}
301-
{{< feature-state for_k8s_version="v1.23" state="stable" >}}
314+
{{< feature-state for_k8s_version="v1.23" state="deprecated" >}}
302315
303316
If you set the `.spec.parameters` field and set
304317
`.spec.parameters.scope` to `Namespace`, then the IngressClass refers
@@ -376,10 +389,8 @@ IngressClass is marked as default in your cluster.
376389
{{< /caution >}}
377390

378391
There are some ingress controllers, that work without the definition of a
379-
default `IngressClass`. For example, the Ingress-NGINX controller can be
380-
configured with a [flag](https://kubernetes.github.io/ingress-nginx/#what-is-the-flag-watch-ingress-without-class)
381-
`--watch-ingress-without-class`. It is [recommended](https://kubernetes.github.io/ingress-nginx/#i-have-only-one-instance-of-the-ingresss-nginx-controller-in-my-cluster-what-should-i-do) though, to specify the
382-
default `IngressClass`:
392+
default `IngressClass`. It is recommended though, to specify the default
393+
`IngressClass`:
383394

384395
{{% code_sample file="service/networking/default-ingressclass.yaml" %}}
385396

@@ -520,11 +531,9 @@ section.
520531
{{% code_sample file="service/networking/tls-example-ingress.yaml" %}}
521532

522533
{{< note >}}
523-
There is a gap between TLS features supported by various Ingress
524-
controllers. Please refer to documentation on
525-
[nginx](https://kubernetes.github.io/ingress-nginx/user-guide/tls/),
526-
[GCE](https://git.k8s.io/ingress-gce/README.md#frontend-https), or any other
527-
platform specific Ingress controller to understand how TLS works in your environment.
534+
There is a gap between TLS features supported by various Ingress controllers.
535+
Please refer to documentation for the Ingress controller you've chosen to
536+
understand how TLS works in your environment.
528537
{{< /note >}}
529538

530539
### Load balancing {#load-balancing}
@@ -540,9 +549,7 @@ It's also worth noting that even though health checks are not exposed directly
540549
through the Ingress, there exist parallel concepts in Kubernetes such as
541550
[readiness probes](/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
542551
that allow you to achieve the same end result. Please review the controller
543-
specific documentation to see how they handle health checks (for example:
544-
[nginx](https://git.k8s.io/ingress-nginx/README.md), or
545-
[GCE](https://git.k8s.io/ingress-gce/README.md#health-checks)).
552+
specific documentation to see how they handle health checks.
546553

547554
## Updating an Ingress
548555

@@ -562,8 +569,6 @@ Rules:
562569
---- ---- --------
563570
foo.bar.com
564571
/foo service1:80 (10.8.0.90:80)
565-
Annotations:
566-
nginx.ingress.kubernetes.io/rewrite-target: /
567572
Events:
568573
Type Reason Age From Message
569574
---- ------ ---- ---- -------
@@ -624,8 +629,6 @@ Rules:
624629
/foo service1:80 (10.8.0.90:80)
625630
bar.baz.com
626631
/foo service2:80 (10.8.0.91:80)
627-
Annotations:
628-
nginx.ingress.kubernetes.io/rewrite-target: /
629632
Events:
630633
Type Reason Age From Message
631634
---- ------ ---- ---- -------

content/en/examples/service/networking/minimal-ingress.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ apiVersion: networking.k8s.io/v1
22
kind: Ingress
33
metadata:
44
name: minimal-ingress
5-
annotations:
6-
nginx.ingress.kubernetes.io/rewrite-target: /
75
spec:
86
ingressClassName: nginx-example
97
rules:

0 commit comments

Comments
 (0)