Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/versioned/.nav.yml
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ nav:
- Installing plugins:
- Install Istio for Knative: install/installing-istio.md
# TODO: docs for kourier, contour, gateway-api
- Install Gateway API for Knative: install/installing-gateway-api.md
- Install Kafka for Knative: install/eventing/kafka-install.md
- Install RabbitMQ for Knative: install/eventing/rabbitmq-install.md
# N.B. this duplicates an "eventing" topic above, cross-referenced here.
Expand Down
64 changes: 64 additions & 0 deletions docs/versioned/install/installing-gateway-api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
audience: administrator
components:
- serving
function: how-to
---

# Installing Gateway API for Knative

This page shows how to install the Kubernetes Gateway API. You can install either the standard or experimental Gateway API channel.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be documenting installing the Knative networking adapter for Gateway API.

I don't know if a picture is helpful, but here's some mermaid that might clarify:

flowchart TB
 subgraph s1["Gateway API"]
    HR[HTTPRoute]
    GW[Gateway listener]
  end
  KSvc["Knative Service"] -- owns --> Route
  Route -- creates --> HR
  Route -- creates --> GW

For this, we're talking about the component that implements the "creates"


## Before you begin

This installation requires the following prerequisites:

- A Kubernetes cluster with the Knative Serving component installed.
- A Gateway Controller. You can install a Gateway Controller by using one of the following guides:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should link to the Gateway API top-level guide, rather than duplicating all of the sub-guides. I think https://gateway-api.sigs.k8s.io/implementations/ is probably the best page for linking to the options (yes, there are more than a dozen GA implementations).


- [Simple Gateway](https://gateway-api.sigs.k8s.io/guides/simple-gateway/) (recommended)
- [HTTP routing](https://gateway-api.sigs.k8s.io/guides/http-routing/)
- [HTTP redirects and rewrites](https://gateway-api.sigs.k8s.io/guides/http-redirect-rewrite/)
- [HTTP traffic splitting](https://gateway-api.sigs.k8s.io/guides/traffic-splitting/)
- [Routing across Namespaces](https://gateway-api.sigs.k8s.io/guides/multiple-ns/)
- [Configuring TLS](https://gateway-api.sigs.k8s.io/guides/tls/)
- [TCP routing](https://gateway-api.sigs.k8s.io/guides/tcp/)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of these guides are for unrelated topics (TCP routing, for instance, is not relevant to Knative's scaling model).

- [gRPC routing](https://gateway-api.sigs.k8s.io/guides/grpc-routing/)
- [Migrating from Ingress](https://gateway-api.sigs.k8s.io/guides/migrating-from-ingress/)

Some Gateway controller setups include the installation of the Gateway API.

## Install the standard Gateway API channel

The standard release channel includes all resources that have graduated to general availability or beta, including [GatewayClass](https://gateway-api.sigs.k8s.io/api-types/gatewayclass/), [Kubernetes Gateway API](https://kubernetes.io/docs/concepts/services-networking/gateway/), [HTTPRoute](https://gateway-api.sigs.k8s.io/api-types/httproute/), and [ReferenceGrant](https://gateway-api.sigs.k8s.io/api-types/referencegrant/).

Use the following command to install the standard channel:

```bash
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yaml
```

For more information about the `kubectl --server-side` command, see [Server-Side Apply](https://kubernetes.io/docs/reference/using-api/server-side-apply/).

## Install the experimental Gateway API Channel

The experimental release channel includes everything in the standard release channel plus some experimental resources and fields. This includes TCPRoute, TLSRoute, and UDPRoute. Keep in mind that future releases of the API could introduce breaking changes as any experimental resource or field could be removed in a future release.

Use the following command to install the experimental channel:

```bash
kubectl apply --server-side -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/experimental-install.yaml
```

Refer to the server-side apply documentation to learn more about this kubectl command option.

## Uninstall the Gateway API

To uninstall the Gateway API, replace `kubectl apply --server-side -f` with `kubectl delete --server-side -f` in the commands above.

Do not uninstall if the resources are in use or if they were installed by a Gateway controller. This command uninstalls the Gateway API resources for the entire cluster.

## See also

- [Kubernetes Gateway API](https://kubernetes.io/docs/concepts/services-networking/gateway/)
- [Getting started with Gateway API](https://gateway-api.sigs.k8s.io/guides/)
Comment on lines +31 to +64
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should cover installing https://github.com/knative-extensions/net-gateway-api

This should probably use a snippet like:

    1. Install the Knative Gateway API controller by running the command:
      ```bash
      kubectl apply -f {{ artifact(repo="net-gateway-api",org="knative-extensions",file="net-gateawy-api.yaml")}}
      ```

    1. Configure Knative Serving to use Gateway API by default by running the command:
      ```bash
      kubectl patch configmap/config-network \
        --namespace knative-serving \
        --type merge \
        --patch '{"data":{"ingress-class":"gateway-api.ingress.networking.knative.dev"}}'

And then using kubectl get gateway --all-namespaces to find the IP address of the gateway. This configuration will also need to be incorporated into the config-gateway ConfigMap to find the external and within-cluster (local) gateways. I'm not sure whether that's well-documented anywhere, but it's the "istio-system" part of the "gateway" sub-key of the gateway class.

It's probably worth calling out that Istio and Contour are the currently-tested implementations, but that other Gateway API implementations should work. https://github.com/knative-extensions/net-gateway-api/blob/main/docs/test-version.md has some additional information that it may be worth incorporating or linking.

Configuration for the installation is here:

https://github.com/knative-extensions/net-gateway-api/blob/main/config/config-gateway.yaml

Loading