- 
                Notifications
    You must be signed in to change notification settings 
- Fork 1.3k
Plugin: Gateway API #6459
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Plugin: Gateway API #6459
Conversation
And added to Nav
| [APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: iRaindrop The full list of commands accepted by this bot can be found here. 
Needs approval from an approver in each of these files:
 Approvers can indicate their approval by writing  | 
| ✅ Deploy Preview for knative ready!Built without sensitive environment variables 
 To edit notification comments on pull requests, go to your Netlify project configuration. | 
Misc edits
Formatting edits
minor edit
| /cc @dprotaso | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's a lot of duplicate content that's from the Gateway API website. I don't think we should manually mirror such content here given that it changes all the time.
| /assign | 
|  | ||
| # 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. | 
There was a problem hiding this comment.
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"
| 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: | 
There was a problem hiding this comment.
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).
| - [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/) | 
There was a problem hiding this comment.
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).
| ## 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/) | 
There was a problem hiding this comment.
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
Need topic to install Gateway-API plugin.
Content derived from https://gateway-api.sigs.k8s.io/guides/
Proposed Changes