}}) | Configure connection behavior between NGINX and upstream applications | Direct | Service | Yes | Yes | v1alpha1 |
-
-{{}}
-
-{{< important >}}
-If attaching a Policy to a Route, that Route must not share a hostname:port/path combination with any other Route that is not referenced by the same Policy. If it does, the Policy will be rejected. This is because the Policy would end up affecting other Routes that it is not attached to.
-{{< /important >}}
-
-## Terminology
-
-- _Attachment Type_. How the policy attaches to an object. Attachment type can be "direct" or "inherited".
-- _Supported Target Object(s)_. API objects the policy can be applied to.
-- _Supports Multiple Target Refs_. Whether a single policy can target multiple objects.
-- _Mergeable_. Whether policies that target the same object can be merged.
-
-## Direct Policy Attachment
-
-A Direct Policy Attachment is a policy that references a single object, such as a Gateway or HTTPRoute. It is tightly bound to one instance of a particular Kind within a single Namespace or an instance of a single Kind at the cluster-scope. It affects _only_ the object specified in its TargetRef.
-
-This diagram uses a fictional retry policy to show how Direct Policy Attachment works:
-
-{{}}
-
-The policy targets the HTTPRoute `baz` and sets `retries` to `3` and `timeout` to `60s`. Since this policy is a Direct Policy Attachment, its settings are only applied to the `baz` HTTPRoute.
-
-## Inherited Policy Attachment
-
-Inherited Policy Attachment allows settings to cascade down a hierarchy. The hierarchy for Gateway API resources looks like this:
-
-{{}}
-
-Settings defined in a policy attached to an object in this hierarchy may be inherited by the resources below it. For example, the settings defined in a policy attached to a Gateway may be inherited by all the HTTPRoutes attached to that Gateway.
-
-Settings in an Inherited Policy can be Defaults or Overrides. Defaults set the default value for something and can be overridden by policies on a lower object. Overrides cannot be overridden by lower objects.
-All settings in NGINX Gateway Fabric Inherited Policies are Defaults.
-
-Default values are given precedence from the bottom up. Therefore, a policy setting attached to a Backend will have the highest precedence over the one attached to higher objects.
-
-The following diagram shows how Inherited Policies work in NGINX Gateway Fabric using a fictional retry policy:
-
-{{}}
-
-There are three policies defined:
-
-- `dev-policy` that targets the `dev` Gateway
-- `baz-policy` that targets the `baz` HTTPRoute
-- `foo-policy` that targets the `foo` HTTPRoute
-
-The settings in `dev-policy` affect the `dev` Gateway and are inherited by all the HTTPRoutes attached to `dev`.
-The `baz-policy` and `foo-policy` are attached to the `baz` and `foo` HTTPRoutes. Since HTTPRoutes are lower than Gateways in the hierarchy, the settings defined in them override those in the `dev` policy.
-Since the `foo-policy` only defines the `retries` setting, it still inherits the `timeout` setting from `dev-policy`.
-The `bar` HTTPRoute has no policy attached to it and inherits all the settings from `dev-policy`.
-
-## Merging Policies
-
-With some NGINX Gateway Fabric Policies, it is possible to create multiple policies that target the same resource as long as the fields in those policies do not conflict.
-
-For example, consider the following fictional policies:
-
-```yaml
-apiVersion: gateway.nginx.org/v1alpha1
-kind: ExamplePolicy
-metadata:
- name: retries
-spec:
- targetRef:
- group: gateway.networking.k8s.io
- kind: HTTPRoute
- name: foo
- retries: 10
-```
-
-
-```yaml
-apiVersion: gateway.nginx.org/v1alpha1
-kind: ExamplePolicy
-metadata:
- name: timeout
-spec:
- targetRef:
- kind: HTTPRoute
- name: foo
- timeout: 60s
-```
-
-The `retries` ExamplePolicy defines the number of retries for the `foo` HTTPRoute, and the `timeout` ExamplePolicy defines the timeout for the `foo` HTTPRoute.
-NGINX Gateway Fabric will merge the fields defined in the policies and apply the following settings to the `foo` HTTPRoute:
-
-```yaml
-retries: 10
-timeout: 60s
-```
-
-However, if both policies had the `retries` field set, then the policies cannot be merged. In this case, NGINX Gateway Fabric will choose which policy to configure based on the following criteria (continuing on ties):
-
-1. The oldest policy by creation timestamp
-1. The policy appearing first in alphabetical order by "{namespace}/{name}"
-
-If a policy conflicts with a configured policy, NGINX Gateway Fabric will set the policy `Accepted` status to false with a reason of `Conflicted`. See [Policy Status](#policy-status) for more details.
-
-## Policy Status
-
-NGINX Gateway Fabric sets the [PolicyStatus](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1alpha2.PolicyStatus) on all policies.
-
-`PolicyStatus` fields:
-
-- `ancestors`: describes the status of a route with respect to the ancestor.
- - `ancestorRef`: the object that the policy targets in `spec.targetRef`.
- - `controllerName`: the controller name of NGINX Gateway Fabric.
- - `conditions`: (Condition/Status/Reason):
- - `Accepted/True/Accepted`: the policy is accepted by the ancestor.
- - `Accepted/False/Invalid`: the policy is not accepted because it is semantically or syntactically invalid.
- - `Accepted/False/Conflicted`: the policy is not accepted because it conflicts with another policy.
- - `Accepted/False/TargetNotFound`: the policy is not accepted because it targets a resource that is invalid or does not exist.
- - `Accepted/False/NginxProxyNotSet`: the policy is not accepted because it relies on the NginxProxy configuration which is missing or invalid.
-
-To check the status of a policy, use `kubectl describe`. This example checks the status of the `foo` ObservabilityPolicy, which is accepted:
-
-```shell
-kubectl describe observabilitypolicies.gateway.nginx.org foo -n default
-```
-
-```text
-Status:
- Ancestors:
- Ancestor Ref:
- Group: gateway.networking.k8s.io
- Kind: HTTPRoute
- Name: foo
- Namespace: default
- Conditions:
- Last Transition Time: 2024-05-23T18:13:03Z
- Message: Policy is accepted
- Observed Generation: 1
- Reason: Accepted
- Status: True
- Type: Accepted
- Controller Name: gateway.nginx.org/nginx-gateway-controller
-```
diff --git a/site/content/overview/gateway-api-compatibility.md b/site/content/overview/gateway-api-compatibility.md
deleted file mode 100644
index 7573597983..0000000000
--- a/site/content/overview/gateway-api-compatibility.md
+++ /dev/null
@@ -1,379 +0,0 @@
----
-title: "Gateway API Compatibility"
-weight: 200
-toc: true
-docs: "DOCS-1412"
----
-
-Learn which Gateway API resources NGINX Gateway Fabric supports and to which level.
-
-## Summary
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|---------------------------------------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| [GatewayClass](#gatewayclass) | Supported | Not supported | Supported | v1 | Standard |
-| [Gateway](#gateway) | Supported | Partially supported | Not supported | v1 | Standard |
-| [HTTPRoute](#httproute) | Supported | Partially supported | Not supported | v1 | Standard |
-| [GRPCRoute](#grpcroute) | Supported | Partially supported | Not supported | v1 | Standard |
-| [ReferenceGrant](#referencegrant) | Supported | N/A | Not supported | v1beta1 | Standard |
-| [TLSRoute](#tlsroute) | Supported | Not supported | Not supported | v1alpha2 | Experimental |
-| [TCPRoute](#tcproute) | Not supported | Not supported | Not supported | v1alpha2 | Experimental |
-| [UDPRoute](#udproute) | Not supported | Not supported | Not supported | v1alpha2 | Experimental |
-| [BackendTLSPolicy](#backendtlspolicy) | Supported | Supported | Not supported | v1alpha3 | Experimental |
-| [Custom policies](#custom-policies) | N/A | N/A | Supported | N/A | N/A |
-
-{{< /bootstrap-table >}}
-
----
-
-## Terminology
-
-Gateway API features has three [support levels](https://gateway-api.sigs.k8s.io/concepts/conformance/#2-support-levels): Core, Extended and Implementation-specific. We use the following terms to describe the support status for each level and resource field:
-
-- _Supported_. The resource or field is fully supported.
-- _Partially supported_. The resource or field is supported partially, with limitations. It will become fully
- supported in future releases.
-- _Not supported_. The resource or field is not yet supported. It will become partially or fully supported in future
- releases.
-
-{{< note >}} It's possible that NGINX Gateway Fabric will never support some resources or fields of the Gateway API. They will be documented on a case by case basis. {{< /note >}}
-
----
-
-## Resources
-
-Each resource below includes the support status of their corresponding fields.
-
-For a description of each field, visit the [Gateway API documentation](https://gateway-api.sigs.k8s.io/references/spec/).
-
-### GatewayClass
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|--------------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| GatewayClass | Supported | Not supported | Supported | v1 | Standard |
-
-{{< /bootstrap-table >}}
-
-NGINX Gateway Fabric supports a single GatewayClass resource configured with the `--gatewayclass` flag of the [static-mode]({{< relref "/reference/cli-help.md#static-mode">}}) command.
-
-**Fields**:
-
-- `spec`
- - `controllerName` - supported.
- - `parametersRef` - NginxProxy resource supported.
- - `description` - supported.
-- `status`
- - `conditions` - supported (Condition/Status/Reason):
- - `Accepted/True/Accepted`
- - `Accepted/False/InvalidParameters`
- - `Accepted/False/UnsupportedVersion`
- - `Accepted/False/GatewayClassConflict`: Custom reason for when the GatewayClass references this controller, but
- a different GatewayClass name is provided to the controller via the command-line argument.
- - `SupportedVersion/True/SupportedVersion`
- - `SupportedVersion/False/UnsupportedVersion`
-
----
-
-### Gateway
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|----------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| Gateway | Supported | Partially supported | Not supported | v1 | Standard |
-
-{{< /bootstrap-table >}}
-
-NGINX Gateway Fabric supports a single Gateway resource. The Gateway resource must reference NGINX Gateway Fabric's corresponding GatewayClass.
-
-See the [static-mode]({{< relref "/reference/cli-help.md#static-mode">}}) command for more information.
-
-**Fields**:
-
-- `spec`
- - `gatewayClassName`: Supported.
- - `listeners`
- - `name`: Supported.
- - `hostname`: Supported.
- - `port`: Supported.
- - `protocol`: Partially supported. Allowed values: `HTTP`, `HTTPS`.
- - `tls`
- - `mode`: Partially supported. Allowed value: `Terminate`.
- - `certificateRefs` - The TLS certificate and key must be stored in a Secret resource of type `kubernetes.io/tls`. Only a single reference is supported.
- - `options`: Not supported.
- - `allowedRoutes`: Supported.
- - `addresses`: Not supported.
-- `status`
- - `addresses`: Partially supported (LoadBalancer and Pod IP).
- - `conditions`: Supported (Condition/Status/Reason):
- - `Accepted/True/Accepted`
- - `Accepted/True/ListenersNotValid`
- - `Accepted/False/ListenersNotValid`
- - `Accepted/False/Invalid`
- - `Accepted/False/UnsupportedValue`: Custom reason for when a value of a field in a Gateway is invalid or not supported.
- - `Accepted/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway.
- NGINX Gateway Fabric only supports a single Gateway.
- - `Programmed/True/Programmed`
- - `Programmed/False/Invalid`
- - `Programmed/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway. NGINX Gateway Fabric only supports a single Gateway.
- - `listeners`
- - `name`: Supported.
- - `supportedKinds`: Supported.
- - `attachedRoutes`: Supported.
- - `conditions`: Supported (Condition/Status/Reason):
- - `Accepted/True/Accepted`
- - `Accepted/False/UnsupportedProtocol`
- - `Accepted/False/InvalidCertificateRef`
- - `Accepted/False/ProtocolConflict`
- - `Accpeted/False/HostnameConflict`
- - `Accepted/False/UnsupportedValue`: Custom reason for when a value of a field in a Listener is invalid or not supported.
- - `Accepted/False/GatewayConflict`: Custom reason for when the Gateway is ignored due to a conflicting Gateway. NGINX Gateway Fabric only supports a single Gateway.
- - `Programmed/True/Programmed`
- - `Programmed/False/Invalid`
- - `ResolvedRefs/True/ResolvedRefs`
- - `ResolvedRefs/False/InvalidCertificateRef`
- - `ResolvedRefs/False/InvalidRouteKinds`
- - `Conflicted/True/ProtocolConflict`
- - `Conflicted/True/HostnameConflict`
- - `Conflicted/False/NoConflicts`
-
----
-
-### HTTPRoute
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|-----------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| HTTPRoute | Supported | Partially supported | Not supported | v1 | Standard |
-
-{{< /bootstrap-table >}}
-
-**Fields**:
-
-- `spec`
- - `parentRefs`: Partially supported. Port not supported.
- - `hostnames`: Supported.
- - `rules`
- - `matches`
- - `path`: Partially supported. Only `PathPrefix` and `Exact` types.
- - `headers`: Partially supported. Only `Exact` type.
- - `queryParams`: Partially supported. Only `Exact` type.
- - `method`: Supported.
- - `filters`
- - `type`: Supported.
- - `requestRedirect`: Supported. If multiple filters are configured, NGINX Gateway Fabric will choose the first and ignore the rest. Incompatible with `urlRewrite`.
- - `requestHeaderModifier`: Supported. If multiple filters are configured, NGINX Gateway Fabric will choose the first and ignore the rest.
- - `urlRewrite`: Supported. If multiple filters are configured, NGINX Gateway Fabric will choose the first and ignore the rest. Incompatible with `requestRedirect`.
- - `responseHeaderModifier`: Supported. If multiple filters are configured, NGINX Gateway Fabric will choose the first and ignore the rest.
- - `requestMirror`, `extensionRef`: Not supported.
- - `backendRefs`: Partially supported. Backend ref `filters` are not supported.
-- `status`
- - `parents`
- - `parentRef`: Supported.
- - `controllerName`: Supported.
- - `conditions`: Partially supported. Supported (Condition/Status/Reason):
- - `Accepted/True/Accepted`
- - `Accepted/False/NoMatchingListenerHostname`
- - `Accepted/False/NoMatchingParent`
- - `Accepted/False/NotAllowedByListeners`
- - `Accepted/False/UnsupportedValue`: Custom reason for when the HTTPRoute includes an invalid or unsupported value.
- - `Accepted/False/InvalidListener`: Custom reason for when the HTTPRoute references an invalid listener.
- - `Accepted/False/GatewayNotProgrammed`: Custom reason for when the Gateway is not Programmed. HTTPRoute can be valid and configured, but will maintain this status as long as the Gateway is not Programmed.
- - `Accepted/False/GatewayIgnored`: Custom reason for when the Gateway is ignored by NGINX Gateway Fabric. NGINX Gateway Fabric only supports one Gateway.
- - `ResolvedRefs/True/ResolvedRefs`
- - `ResolvedRefs/False/InvalidKind`
- - `ResolvedRefs/False/RefNotPermitted`
- - `ResolvedRefs/False/BackendNotFound`
- - `ResolvedRefs/False/UnsupportedValue`: Custom reason for when one of the HTTPRoute rules has a backendRef with an unsupported value.
- - `ResolvedRefs/False/InvalidIPFamily`: Custom reason for when one of the HTTPRoute rules has a backendRef that has an invalid IPFamily.
- - `PartiallyInvalid/True/UnsupportedValue`
-
----
-
-### GRPCRoute
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|-----------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| GRPCRoute | Supported | Partially supported | Not supported | v1 | Standard |
-
-{{< /bootstrap-table >}}
-
-**Fields**:
-
-- `spec`
- - `parentRefs`: Partially supported. Port not supported.
- - `hostnames`: Supported.
- - `rules`
- - `matches`
- - `method`: Partially supported. Only `Exact` type with both `method.service` and `method.method` specified.
- - `headers`: Partially supported. Only `Exact` type.
- - `filters`
- - `type`: Supported.
- - `requestHeaderModifier`: Supported. If multiple filters are configured, NGINX Gateway Fabric will choose the first and ignore the rest.
- - `responseHeaderModifier`: Supported. If multiple filters are configured, NGINX Gateway Fabric will choose the first and ignore the rest.
- - `requestMirror`, `extensionRef`: Not supported.
- - `backendRefs`: Partially supported. Backend ref `filters` are not supported.
-- `status`
- - `parents`
- - `parentRef`: Supported.
- - `controllerName`: Supported.
- - `conditions`: Partially supported. Supported (Condition/Status/Reason):
- - `Accepted/True/Accepted`
- - `Accepted/False/NoMatchingListenerHostname`
- - `Accepted/False/NoMatchingParent`
- - `Accepted/False/NotAllowedByListeners`
- - `Accepted/False/UnsupportedValue`: Custom reason for when the GRPCRoute includes an invalid or unsupported value.
- - `Accepted/False/InvalidListener`: Custom reason for when the GRPCRoute references an invalid listener.
- - `Accepted/False/GatewayNotProgrammed`: Custom reason for when the Gateway is not Programmed. GRPCRoute can be valid and configured, but will maintain this status as long as the Gateway is not Programmed.
- - `ResolvedRefs/True/ResolvedRefs`
- - `ResolvedRefs/False/InvalidKind`
- - `ResolvedRefs/False/RefNotPermitted`
- - `ResolvedRefs/False/BackendNotFound`
- - `ResolvedRefs/False/UnsupportedValue`: Custom reason for when one of the GRPCRoute rules has a backendRef with an unsupported value.
- - `PartiallyInvalid/True/UnsupportedValue`
-
----
-
-### ReferenceGrant
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|----------------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| ReferenceGrant | Supported | N/A | Not supported | v1beta1 | Standard |
-
-{{< /bootstrap-table >}}
-
-Fields:
-
-- `spec`
- - `to`
- - `group` - supported.
- - `kind` - supports `Secret` and `Service`.
- - `name`- supported.
- - `from`
- - `group` - supported.
- - `kind` - supports `Gateway` and `HTTPRoute`.
- - `namespace`- supported.
-
----
-
-### TLSRoute
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|----------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| TLSRoute | Supported | Not supported | Not supported | v1alpha2 | Experimental |
-
-{{< /bootstrap-table >}}
-
-**Fields**:
-
-- `spec`
- - `parentRefs`: Partially supported. Port not supported.
- - `hostnames`: Supported.
- - `rules`
- - `backendRefs`: Partially supported. Only one backend ref allowed.
- - `weight`: Not supported.
-- `status`
- - `parents`
- - `parentRef`: Supported.
- - `controllerName`: Supported.
- - `conditions`: Supported (Condition/Status/Reason):
- - `Accepted/True/Accepted`
- - `Accepted/False/NoMatchingListenerHostname`
- - `Accepted/False/NoMatchingParent`
- - `Accepted/False/NotAllowedByListeners`
- - `Accepted/False/UnsupportedValue`: Custom reason for when the TLSRoute includes an invalid or unsupported value.
- - `Accepted/False/InvalidListener`: Custom reason for when the TLSRoute references an invalid listener.
- - `Accepted/False/GatewayNotProgrammed`: Custom reason for when the Gateway is not Programmed. TLSRoute can be valid and configured, but will maintain this status as long as the Gateway is not Programmed.
- - `Accepted/False/HostnameConflict`: Custom reason for when the TLSRoute has a hostname that conflicts with another TLSRoute on the same port.
- - `ResolvedRefs/True/ResolvedRefs`
- - `ResolvedRefs/False/InvalidKind`
- - `ResolvedRefs/False/RefNotPermitted`
- - `ResolvedRefs/False/BackendNotFound`
- - `ResolvedRefs/False/UnsupportedValue`: Custom reason for when one of the TLSRoute rules has a backendRef with an unsupported value.
- - `PartiallyInvalid/True/UnsupportedValue`
-
----
-
-### TCPRoute
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|----------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| TCPRoute | Not supported | Not supported | Not supported | v1alpha2 | Experimental |
-
-{{< /bootstrap-table >}}
-
----
-
-### UDPRoute
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|----------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| UDPRoute | Not supported | Not supported | Not supported | v1alpha2 | Experimental |
-
-{{< /bootstrap-table >}}
-
----
-
-### BackendTLSPolicy
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|------------------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| BackendTLSPolicy | Supported | Supported | Not supported | v1alpha3 | Experimental |
-
-{{< /bootstrap-table >}}
-
-Fields:
-
-- `spec`
- - `targetRefs`
- - `group` - supported.
- - `kind` - supports `Service`.
- - `name` - supported.
- - `validation`
- - `caCertificateRefs` - supports single reference to a `ConfigMap`, with the CA certificate in a key named `ca.crt`.
- - `name`- supported.
- - `group` - supported.
- - `kind` - supports `ConfigMap`.
- - `hostname` - supported.
- - `wellKnownCertificates` - supports `System`. This will set the CA certificate to the Alpine system root CA path `/etc/ssl/cert.pem`. NB: This option will only work if the NGINX image used is Alpine based. The NGF NGINX images are Alpine based by default.
-- `status`
- - `ancestors`
- - `ancestorRef` - supported.
- - `controllerName`: supported.
- - `conditions`: Partially supported. Supported (Condition/Status/Reason):
- - `Accepted/True/PolicyReasonAccepted`
- - `Accepted/False/PolicyReasonInvalid`
-
-{{}}If multiple `backendRefs` are defined for a HTTPRoute rule, all the referenced Services *must* have matching BackendTLSPolicy configuration. BackendTLSPolicy configuration is considered to be matching if 1. CACertRefs reference the same ConfigMap, or 2. WellKnownCACerts are the same, and 3. Hostname is the same.{{}}
-
-### Custom Policies
-
-{{< bootstrap-table "table table-striped table-bordered" >}}
-
-| Resource | Core Support Level | Extended Support Level | Implementation-Specific Support Level | API Version | API Release Channel |
-|-----------------|--------------------|------------------------|---------------------------------------|-------------|---------------------|
-| Custom policies | N/A | N/A | Supported | N/A | N/A |
-
-{{< /bootstrap-table >}}
-
-Custom policies are NGINX Gateway Fabric-specific CRDs (Custom Resource Definitions) that support features such as tracing, and client connection settings. These important data-plane features are not part of the Gateway API specifications.
-While these CRDs are not part of the Gateway API, the mechanism to attach them to Gateway API resources is part of the Gateway API. See the [Policy Attachment documentation](https://gateway-api.sigs.k8s.io/references/policy-attachment/).
-
-See the [custom policies]({{< relref "overview/custom-policies.md" >}}) document for more information.
diff --git a/site/content/overview/gateway-architecture.md b/site/content/overview/gateway-architecture.md
deleted file mode 100644
index 2f270fe947..0000000000
--- a/site/content/overview/gateway-architecture.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-title: "Gateway architecture"
-weight: 100
-toc: true
-docs: "DOCS-1413"
----
-
-Learn about the architecture and design principles of NGINX Gateway Fabric.
-
-The intended audience for this information is primarily the two following groups:
-
-
-- _Cluster Operators_ who would like to know how the software works and understand how it can fail.
-- _Developers_ who would like to [contribute](https://github.com/nginx/nginx-gateway-fabric/blob/main/CONTRIBUTING.md) to the project.
-
-The reader needs to be familiar with core Kubernetes concepts, such as pods, deployments, services, and endpoints. For an understanding of how NGINX itself works, you can read the ["Inside NGINX: How We Designed for Performance & Scale"](https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/) blog post.
-
-## Overview
-
-NGINX Gateway Fabric is an open source project that provides an implementation of the [Gateway API](https://gateway-api.sigs.k8s.io/) using [NGINX](https://nginx.org/) as the data plane. The goal of this project is to implement the core Gateway APIs -- _Gateway_, _GatewayClass_, _HTTPRoute_, _GRPCRoute_, _TCPRoute_, _TLSRoute_, and _UDPRoute_ -- to configure an HTTP or TCP/UDP load balancer, reverse proxy, or API gateway for applications running on Kubernetes. NGINX Gateway Fabric supports a subset of the Gateway API.
-
-For a list of supported Gateway API resources and features, see the [Gateway API Compatibility]({{< relref "/overview/gateway-api-compatibility.md" >}}) documentation.
-
-We have more information regarding our [design principles](https://github.com/nginx/nginx-gateway-fabric/blob/v1.6.0/docs/developer/design-principles.md) in the project's GitHub repository.
-
-## NGINX Gateway Fabric at a high level
-
-This figure depicts an example of NGINX Gateway Fabric exposing two web applications within a Kubernetes cluster to clients on the internet:
-
-{{}}
-
-{{< note >}} The figure does not show many of the necessary Kubernetes resources the Cluster Operators and Application Developers need to create, like deployment and services. {{< /note >}}
-
-The figure shows:
-
-- A _Kubernetes cluster_.
-- Users _Cluster Operator_, _Application Developer A_ and _Application Developer B_. These users interact with the cluster through the Kubernetes API by creating Kubernetes objects.
-- _Clients A_ and _Clients B_ connect to _Applications A_ and _B_, respectively, which they have deployed.
-- The _NGF Pod_, [deployed by _Cluster Operator_]({{< relref "installation">}}) in the namespace _nginx-gateway_. For scalability and availability, you can have multiple replicas. This pod consists of two containers: `NGINX` and `NGF`. The _NGF_ container interacts with the Kubernetes API to retrieve the most up-to-date Gateway API resources created within the cluster. It then dynamically configures the _NGINX_ container based on these resources, ensuring proper alignment between the cluster state and the NGINX configuration.
-- _Gateway AB_, created by _Cluster Operator_, requests a point where traffic can be translated to Services within the cluster. This Gateway includes a listener with a hostname `*.example.com`. Application Developers have the ability to attach their application's routes to this Gateway if their application's hostname matches `*.example.com`.
-- _Application A_ with two pods deployed in the _applications_ namespace by _Application Developer A_. To expose the application to its clients (_Clients A_) via the host `a.example.com`, _Application Developer A_ creates _HTTPRoute A_ and attaches it to `Gateway AB`.
-- _Application B_ with one pod deployed in the _applications_ namespace by _Application Developer B_. To expose the application to its clients (_Clients B_) via the host `b.example.com`, _Application Developer B_ creates _HTTPRoute B_ and attaches it to `Gateway AB`.
-- _Public Endpoint_, which fronts the _NGF_ pod. This is typically a TCP load balancer (cloud, software, or hardware) or a combination of such load balancer with a NodePort service. _Clients A_ and _B_ connect to their applications via the _Public Endpoint_.
-
-The yellow and purple arrows represent connections related to the client traffic, and the black arrows represent access to the Kubernetes API. The resources within the cluster are color-coded based on the user responsible for their creation.
-
-For example, the Cluster Operator is denoted by the color green, indicating they create and manage all the green resources.
-
-## The NGINX Gateway Fabric pod
-
-NGINX Gateway Fabric consists of two containers:
-
-1. `nginx`: the data plane. Consists of an NGINX master process and NGINX worker processes. The master process controls the worker processes. The worker processes handle the client traffic and load balance traffic to the backend applications.
-1. `nginx-gateway`: the control plane. Watches Kubernetes objects and configures NGINX.
-
-These containers are deployed in a single pod as a Kubernetes Deployment.
-
-The `nginx-gateway`, or the control plane, is a [Kubernetes controller](https://kubernetes.io/docs/concepts/architecture/controller/), written with the [controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) library. It watches Kubernetes objects (services, endpoints, secrets, and Gateway API CRDs), translates them to NGINX configuration, and configures NGINX.
-
-This configuration happens in two stages:
-
-1. NGINX configuration files are written to the NGINX configuration volume shared by the `nginx-gateway` and `nginx` containers.
-1. The control plane reloads the NGINX process.
-
-This is possible because the two containers [share a process namespace](https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/), allowing the NGINX Gateway Fabric process to send signals to the NGINX main process.
-
-The following diagram represents the connections, relationships and interactions between process with the `nginx` and `nginx-gateway` containers, as well as external processes/entities.
-
-{{}}
-
-The following list describes the connections, preceeded by their types in parentheses. For brevity, the suffix "process" has been omitted from the process descriptions.
-
-1. (HTTPS)
- - Read: _NGF_ reads the _Kubernetes API_ to get the latest versions of the resources in the cluster.
- - Write: _NGF_ writes to the _Kubernetes API_ to update the handled resources' statuses and emit events. If there's more than one replica of _NGF_ and [leader election](https://github.com/nginx/nginx-gateway-fabric/tree/v1.6.0/charts/nginx-gateway-fabric#configuration) is enabled, only the _NGF_ pod that is leading will write statuses to the _Kubernetes API_.
-1. (HTTP, HTTPS) _Prometheus_ fetches the `controller-runtime` and NGINX metrics via an HTTP endpoint that _NGF_ exposes (`:9113/metrics` by default). Prometheus is **not** required by NGINX Gateway Fabric, and its endpoint can be turned off.
-1. (File I/O)
- - Write: _NGF_ generates NGINX _configuration_ based on the cluster resources and writes them as `.conf` files to the mounted `nginx-conf` volume, located at `/etc/nginx/conf.d`. It also writes _TLS certificates_ and _keys_ from [TLS secrets](https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets) referenced in the accepted Gateway resource to the `nginx-secrets` volume at the path `/etc/nginx/secrets`.
- - Read: _NGF_ reads the PID file `nginx.pid` from the `nginx-run` volume, located at `/var/run/nginx`. _NGF_ extracts the PID of the nginx process from this file in order to send reload signals to _NGINX master_.
-1. (File I/O) _NGF_ writes logs to its _stdout_ and _stderr_, which are collected by the container runtime.
-1. (HTTP) _NGF_ fetches the NGINX metrics via the unix:/var/run/nginx/nginx-status.sock UNIX socket and converts it to _Prometheus_ format used in #2.
-1. (Signal) To reload NGINX, _NGF_ sends the [reload signal](https://nginx.org/en/docs/control.html) to the **NGINX master**.
-1. (File I/O)
- - Write: The _NGINX master_ writes its PID to the `nginx.pid` file stored in the `nginx-run` volume.
- - Read: The _NGINX master_ reads _configuration files_ and the _TLS cert and keys_ referenced in the configuration when it starts or during a reload. These files, certificates, and keys are stored in the `nginx-conf` and `nginx-secrets` volumes that are mounted to both the `nginx-gateway` and `nginx` containers.
-1. (File I/O)
- - Write: The _NGINX master_ writes to the auxiliary Unix sockets folder, which is located in the `/var/run/nginx`
- directory.
- - Read: The _NGINX master_ reads the `nginx.conf` file from the `/etc/nginx` directory. This [file](https://github.com/nginx/nginx-gateway-fabric/blob/v1.6.0/internal/mode/static/nginx/conf/nginx.conf) contains the global and http configuration settings for NGINX. In addition, _NGINX master_ reads the NJS modules referenced in the configuration when it starts or during a reload. NJS modules are stored in the `/usr/lib/nginx/modules` directory.
-1. (File I/O) The _NGINX master_ sends logs to its _stdout_ and _stderr_, which are collected by the container runtime.
-1. (File I/O) An _NGINX worker_ writes logs to its _stdout_ and _stderr_, which are collected by the container runtime.
-1. (Signal) The _NGINX master_ controls the [lifecycle of _NGINX workers_](https://nginx.org/en/docs/control.html#reconfiguration) it creates workers with the new configuration and shutdowns workers with the old configuration.
-1. (HTTP) To consider a configuration reload a success, _NGF_ ensures that at least one NGINX worker has the new configuration. To do that, _NGF_ checks a particular endpoint via the unix:/var/run/nginx/nginx-config-version.sock UNIX socket.
-1. (HTTP, HTTPS) A _client_ sends traffic to and receives traffic from any of the _NGINX workers_ on ports 80 and 443.
-1. (HTTP, HTTPS) An _NGINX worker_ sends traffic to and receives traffic from the _backends_.
-
-Below are additional connections not depcited on the diagram:
-
-- (HTTPS) NGF sends [product telemetry data]({{< relref "/overview/product-telemetry.md" >}}) to the F5 telemetry service.
-
-### Differences with NGINX Plus
-
-The previous diagram depicts NGINX Gateway Fabric using NGINX Open Source. NGINX Gateway Fabric with NGINX Plus has the following difference:
-
-- An _admin_ can connect to the NGINX Plus API using port 8765. NGINX only allows connections from localhost.
-
-## Updating upstream servers
-
-The normal process to update any changes to NGINX is to write the configuration files and reload NGINX. However, when using NGINX Plus, we can take advantage of the [NGINX Plus API](http://nginx.org/en/docs/http/ngx_http_api_module.html) to limit the amount of reloads triggered when making changes to NGINX. Specifically, when the endpoints of an application in Kubernetes change (Such as scaling up or down), the NGINX Plus API is used to update the upstream servers in NGINX with the new endpoints without a reload. This reduces the potential for a disruption that could occur when reloading.
-
-## Pod readiness
-
-The `nginx-gateway` container includes a readiness endpoint available through the path `/readyz`. A [readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes) periodically checks the endpoint on startup, returning a `200 OK` response when the pod can accept traffic for the data plane. Once the control plane successfully starts, the pod becomes ready.
-
-If there are relevant Gateway API resources in the cluster, the control plane will generate the first NGINX configuration and successfully reload NGINX before the pod is considered ready.
diff --git a/site/content/overview/nginx-plus.md b/site/content/overview/nginx-plus.md
deleted file mode 100644
index bc67839bf0..0000000000
--- a/site/content/overview/nginx-plus.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: "Advanced features with NGINX Plus"
-weight: 400
-toc: true
-docs: "DOCS-1415"
----
-
-NGINX Gateway Fabric can use NGINX Open Source or NGINX Plus as its data plane. [NGINX Plus](https://www.nginx.com/products/nginx/) is the closed source, commercial version of NGINX. Using NGINX Plus as the data plane offers additional benefits compared to the open source version.
-
-## Benefits of NGINX Plus
-
-- **Robust metrics**: A plethora of [additional Prometheus metrics](https://github.com/nginx/nginx-prometheus-exporter#metrics-for-nginx-plus) are available.
-- **Live activity monitoring**: The [NGINX Plus dashboard]({{< relref "/how-to/monitoring/dashboard.md" >}}) shows real-time metrics and information about your server infrastructure.
-- **Dynamic upstream configuration**: NGINX Plus can dynamically reconfigure upstream servers when applications in Kubernetes scale up and down, preventing the need for an NGINX reload.
-- **Support**: With an NGINX Plus license, you can take advantage of full [support](https://my.f5.com/manage/s/article/K000140156/) from NGINX, Inc.
diff --git a/site/content/overview/product-telemetry.md b/site/content/overview/product-telemetry.md
deleted file mode 100644
index eb69961c92..0000000000
--- a/site/content/overview/product-telemetry.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: "Product telemetry"
-weight: 500
-toc: true
----
-
-Learn why, what and how NGINX Gateway Fabric collects telemetry.
-
-## Overview
-
-NGINX Gateway Fabric collects telemetry by default, which allows its developers to understand what features are most popular with its user base. This data is used to triage development work, prioritizing features and functionality that will positively impact the most people.
-
-Telemetry data is collected once every 24 hours and sent to a service managed by F5 over HTTPS. Personally identifiable information (PII) is **not** collected. The list of data points that are collected can be seen below.
-
-**If you would prefer to not have data collected, you can [opt-out](#opt-out) when installing NGINX Gateway Fabric.**
-
-## Collected data
-
-- **Kubernetes:**
- - **Platform:** the Kubernetes platform that NGINX Gateway Fabric is running on
- - **Version:** the Kubernetes version that NGINX Gateway Fabric is running on.
- - **Architecture:** the architecture that the Kubernetes environment is running on.
-- **Cluster UID:** the UID of the `kube-system` Namespace in the cluster that NGINX Gateway Fabric is running in.
-- **Cluster Node Count:** the number of Nodes in the cluster.
-- **Version:** the version of the NGINX Gateway Fabric Deployment.
-- **Deployment UID:** the UID of the NGINX Gateway Fabric Deployment.
-- **Deployment Replica Count:** the count of NGINX Gateway Fabric Pods.
-- **Image Build Source:** whether the image was built by GitHub or locally (values are `gha`, `local`, or `unknown`). The source repository of the images is **not** collected.
-- **Deployment Flags:** a list of NGINX Gateway Fabric Deployment flags that are specified by a user. The actual values of non-boolean flags are **not** collected; we only record that they are either `true` or `false` for boolean flags and `default` or `user-defined` for the rest.
-- **Count of Resources:** the total count of resources related to NGINX Gateway Fabric. This includes `GatewayClasses`, `Gateways`, `HTTPRoutes`,`GRPCRoutes`, `TLSRoutes`, `Secrets`, `Services`, `BackendTLSPolicies`, `ClientSettingsPolicies`, `NginxProxies`, `ObservabilityPolicies`, `UpstreamSettingsPolicies`, `SnippetsFilters`, and `Endpoints`. The data within these resources is **not** collected.
-- **SnippetsFilters Info**a list of directive-context strings from applied SnippetFilters and a total count per strings. The actual value of any NGINX directive is **not** collected.
-This data is used to identify the following information:
-
-- The flavors of Kubernetes environments that are most popular among our users.
-- The number of unique NGINX Gateway Fabric installations.
-- The scale of NGINX Gateway Fabric Deployments.
-- The scale of Gateway API resources.
-- The used features of NGINX Gateway Fabric.
-
-Our goal is to publicly discuss data trends to drive roadmap discussions in our [Community Meeting](https://github.com/nginx/nginx-gateway-fabric/discussions/1472).
-
-## Opt out
-
-You can disable product telemetry when installing NGINX Gateway Fabric using an option dependent on your installation method:
-
-### Helm
-
-Set the `nginxGateway.productTelemetry.enable=false` flag either in the `values.yaml` file or when installing:
-
-```shell
-helm install ... --set nginxGateway.productTelemetry.enable=false
-```
-
-### Manifests
-
-Add the `--product-telemetry-disable` flag to the `nginx-gateway` container in your Deployment manifest.
diff --git a/site/content/overview/resource-validation.md b/site/content/overview/resource-validation.md
deleted file mode 100644
index fba7b42a7d..0000000000
--- a/site/content/overview/resource-validation.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-title: "Resource validation"
-weight: 600
-toc: true
-docs: "DOCS-1414"
----
-
-## Overview
-
-This document describes how NGINX Gateway Fabric validates Gateway API and NGINX Gateway Fabric Kubernetes resources.
-
-## Gateway API resource validation
-
-NGINX Gateway Fabric validates Gateway API resources for several reasons:
-
-- _Robustness_: to gracefully handle invalid resources.
-- _Security_: to prevent malicious input from propagating to the NGINX configuration.
-- _Correctness_: to conform to the Gateway API specification for handling invalid resources.
-
-The process involves four different steps, explained in detail in this document, with the goal of making sure that NGINX continues to handle traffic even if invalid Gateway API resources were created.
-
-### Step 1 - OpenAPI Scheme validation by Kubernetes API Server
-
-The Kubernetes API server validates Gateway API resources against the OpenAPI schema embedded in the Gateway API CRDs. For example, if you create an HTTPRoute with an invalid hostname "cafe.!@#$%example.com", the API server will reject it with the following error:
-
-```shell
-kubectl apply -f coffee-route.yaml
-```
-
-```text
-The HTTPRoute "coffee" is invalid: spec.hostnames[0]: Invalid value: "cafe.!@#$%example.com": spec.hostnames[0] in body should match '^(\*\.)?[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$'
-```
-
-{{< note >}}While unlikely, bypassing this validation step is possible if the Gateway API CRDs are modified to remove the validation. If this happens, Step 4 will reject any invalid values (from NGINX perspective).{{< /note >}}
-
-### Step 2 - CEL validation by Kubernetes API Server
-
-The Kubernetes API server validates Gateway API resources using CEL validation embedded in the Gateway API CRDs. It validates Gateway API resources using advanced rules unavailable in the OpenAPI schema validation. For example, if you create a Gateway resource with a TCP listener that configures a hostname, the CEL validation will reject it with the following error:
-
-```shell
-kubectl apply -f some-gateway.yaml
-```
-
-```text
-The Gateway "some-gateway" is invalid: spec.listeners: Invalid value: "array": hostname must not be specified for protocols ['TCP', 'UDP']
-```
-
-More information on CEL in Kubernetes can be found [here](https://kubernetes.io/docs/reference/using-api/cel/).
-
-
-### Step 3 - Validation by NGINX Gateway Fabric
-
-This step catches the following cases of invalid values:
-
-- Valid values from the Gateway API perspective but not supported by NGINX Gateway Fabric yet. For example, a feature in an HTTPRoute routing rule. For the list of supported features see [Gateway API Compatibility]({{< relref "gateway-api-compatibility.md" >}}) doc.
-- Valid values from the Gateway API perspective, but invalid for NGINX, because NGINX has stricter validation requirements for certain fields. These values will cause NGINX to fail to reload or operate erroneously.
-- Invalid values (both from the Gateway API and NGINX perspectives) that were not rejected because Step 1 was bypassed. Similar to the previous case, these values will cause NGINX to fail to reload or operate erroneously.
-- Malicious values that inject unrestricted NGINX config into the NGINX configuration (similar to an SQL injection attack).
-
-Below is an example of how NGINX Gateway Fabric rejects an invalid resource. The validation error is reported via the status:
-
-```shell
-kubectl describe httproutes.gateway.networking.k8s.io coffee
-```
-
-```text
-. . .
-Status:
- Parents:
- Conditions:
- Last Transition Time: 2023-03-30T22:37:53Z
- Message: All rules are invalid: spec.rules[0].matches[0].method: Unsupported value: "CONNECT": supported values: "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"
- Observed Generation: 1
- Reason: UnsupportedValue
- Status: False
- Type: Accepted
- Controller Name: gateway.nginx.org/nginx-gateway-controller
- Parent Ref:
- Group: gateway.networking.k8s.io
- Kind: Gateway
- Name: prod-gateway
- Namespace: default
- Section Name: http
-```
-
-{{< note >}}This validation step always runs and cannot be bypassed.{{< /note >}}
-
-### Confirm validation
-
-To confirm that a resource is valid and accepted by NGINX Gateway Fabric, check that the **Accepted** condition in the resource status has the Status field set to **True**. For example, in a status of a valid HTTPRoute, if NGINX Gateway Fabric accepts a parentRef, the status of that parentRef will look like this:
-
-```text
-Status:
- Parents:
- Conditions:
- Last Transition Time: 2023-03-30T23:18:00Z
- Message: The route is accepted
- Observed Generation: 2
- Reason: Accepted
- Status: True
- Type: Accepted
- Controller Name: gateway.nginx.org/nginx-gateway-controller
- Parent Ref:
- Group: gateway.networking.k8s.io
- Kind: Gateway
- Name: gateway
- Namespace: default
- Section Name: http
-```
-
-{{< note>}}Make sure the reported observed generation is the same as the resource generation.{{< /note >}}
-
-## NGINX Gateway Fabric Resource validation
-
-### Step 1 - OpenAPI Scheme validation by Kubernetes API Server
-
-The Kubernetes API server validates NGINX Gateway Fabric resources against the OpenAPI schema embedded in the NGINX Gateway Fabric CRDs. For example, if you create an NginxGateway with an invalid logging level, "some-level", the API server will reject it with the following error:
-
-```shell
-kubectl apply -f nginx-gateway-config.yaml
-```
-
-```text
-The NginxGateway "nginx-gateway-config" is invalid: spec.logging.level: Unsupported value: "some-level": supported values: "info", "debug", "error"
-```
-
-{{< note >}}While unlikely, bypassing this validation step is possible if the NGINX Gateway Fabric CRDs are modified to remove the validation. If this happens, Step 2 will report an error in the resource's status.{{< /note >}}
-
-### Step 2 - Validation by NGINX Gateway Fabric
-
-This step validates the settings in the NGINX Gateway Fabric CRDs and rejects invalid resources. The validation error is reported via the status and as an Event. For example:
-
-```shell
-kubectl describe nginxgateways.gateway.nginx.org nginx-gateway-config
-```
-
-Status:
-
-```text
-...
-Status:
- Conditions:
- Last Transition Time: 2023-12-15T21:02:30Z
- Message: Failed to update control plane configuration: logging.level: Unsupported value: "some-level": supported values: "info", "debug", "error"
- Observed Generation: 1
- Reason: Invalid
- Status: False
- Type: Valid
-```
-
-Event:
-
-```text
-Warning UpdateFailed 1s (x2 over 1s) nginx-gateway-fabric-nginx Failed to update control plane configuration: logging.level: Unsupported value: "some-level": supported values: "info", "debug", "error"
-```
-
-### Confirm validation
-
-To confirm that a resource is valid and accepted by NGINX Gateway Fabric, check that the **Valid** condition in the resource status has the Status field set to **True**. For example, the status of a valid NginxGateway will look like this:
-
-```text
-Status:
- Conditions:
- Last Transition Time: 2023-12-15T21:04:49Z
- Message: NginxGateway is valid
- Observed Generation: 1
- Reason: Valid
- Status: True
- Type: Valid
-```
diff --git a/site/content/reference/_index.md b/site/content/reference/_index.md
deleted file mode 100644
index 2dff1597cd..0000000000
--- a/site/content/reference/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: "Reference"
-weight: 500
----
diff --git a/site/content/reference/api.md b/site/content/reference/api.md
deleted file mode 100644
index 77eafa4ac6..0000000000
--- a/site/content/reference/api.md
+++ /dev/null
@@ -1,2625 +0,0 @@
----
-title: "API reference"
-weight: 100
-toc: false
----
-## Overview
-NGINX Gateway API Reference
-Packages:
-
-gateway.nginx.org/v1alpha1
-
-
Package v1alpha1 contains API Schema definitions for the
-gateway.nginx.org API group.
-
-Resource Types:
-
-ClientSettingsPolicy
-
-
-
-
ClientSettingsPolicy is an Inherited Attached Policy. It provides a way to configure the behavior of the connection
-between the client and NGINX Gateway Fabric.
-
-
-NginxGateway
-
-
-
-
NginxGateway represents the dynamic configuration for an NGINX Gateway Fabric control plane.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-apiVersion
-string |
-
-
-gateway.nginx.org/v1alpha1
-
- |
-
-
-
-kind
-string
- |
-NginxGateway |
-
-
-
-metadata
-
-
-Kubernetes meta/v1.ObjectMeta
-
-
- |
-
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
- |
-
-
-
-spec
-
-
-NginxGatewaySpec
-
-
- |
-
- NginxGatewaySpec defines the desired state of the NginxGateway.
-
-
-
-
-
-logging
-
-
-Logging
-
-
- |
-
-(Optional)
- Logging defines logging related settings for the control plane.
- |
-
-
- |
-
-
-
-status
-
-
-NginxGatewayStatus
-
-
- |
-
- NginxGatewayStatus defines the state of the NginxGateway.
- |
-
-
-
-NginxProxy
-
-
-
-
NginxProxy is a configuration object that is attached to a GatewayClass parametersRef. It provides a way
-to configure global settings for all Gateways defined from the GatewayClass.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-apiVersion
-string |
-
-
-gateway.nginx.org/v1alpha1
-
- |
-
-
-
-kind
-string
- |
-NginxProxy |
-
-
-
-metadata
-
-
-Kubernetes meta/v1.ObjectMeta
-
-
- |
-
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
- |
-
-
-
-spec
-
-
-NginxProxySpec
-
-
- |
-
- Spec defines the desired state of the NginxProxy.
-
-
-
-
-
-ipFamily
-
-
-IPFamilyType
-
-
- |
-
-(Optional)
- IPFamily specifies the IP family to be used by the NGINX.
-Default is “dual”, meaning the server will use both IPv4 and IPv6.
- |
-
-
-
-telemetry
-
-
-Telemetry
-
-
- |
-
-(Optional)
- Telemetry specifies the OpenTelemetry configuration.
- |
-
-
-
-rewriteClientIP
-
-
-RewriteClientIP
-
-
- |
-
-(Optional)
- RewriteClientIP defines configuration for rewriting the client IP to the original client’s IP.
- |
-
-
-
-logging
-
-
-NginxLogging
-
-
- |
-
-(Optional)
- Logging defines logging related settings for NGINX.
- |
-
-
-
-disableHTTP2
-
-bool
-
- |
-
-(Optional)
- DisableHTTP2 defines if http2 should be disabled for all servers.
-Default is false, meaning http2 will be enabled for all servers.
- |
-
-
- |
-
-
-
-ObservabilityPolicy
-
-
-
-
ObservabilityPolicy is a Direct Attached Policy. It provides a way to configure observability settings for
-the NGINX Gateway Fabric data plane. Used in conjunction with the NginxProxy CRD that is attached to the
-GatewayClass parametersRef.
-
-
-SnippetsFilter
-
-
-
-
SnippetsFilter is a filter that allows inserting NGINX configuration into the
-generated NGINX config for HTTPRoute and GRPCRoute resources.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-apiVersion
-string |
-
-
-gateway.nginx.org/v1alpha1
-
- |
-
-
-
-kind
-string
- |
-SnippetsFilter |
-
-
-
-metadata
-
-
-Kubernetes meta/v1.ObjectMeta
-
-
- |
-
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
- |
-
-
-
-spec
-
-
-SnippetsFilterSpec
-
-
- |
-
- Spec defines the desired state of the SnippetsFilter.
-
-
-
-
-
-snippets
-
-
-[]Snippet
-
-
- |
-
- Snippets is a list of NGINX configuration snippets.
-There can only be one snippet per context.
-Allowed contexts: main, http, http.server, http.server.location.
- |
-
-
- |
-
-
-
-status
-
-
-SnippetsFilterStatus
-
-
- |
-
- Status defines the state of the SnippetsFilter.
- |
-
-
-
-UpstreamSettingsPolicy
-
-
-
-
UpstreamSettingsPolicy is a Direct Attached Policy. It provides a way to configure the behavior of
-the connection between NGINX and the upstream applications.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-apiVersion
-string |
-
-
-gateway.nginx.org/v1alpha1
-
- |
-
-
-
-kind
-string
- |
-UpstreamSettingsPolicy |
-
-
-
-metadata
-
-
-Kubernetes meta/v1.ObjectMeta
-
-
- |
-
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
- |
-
-
-
-spec
-
-
-UpstreamSettingsPolicySpec
-
-
- |
-
- Spec defines the desired state of the UpstreamSettingsPolicy.
-
-
-
-
-
-zoneSize
-
-
-Size
-
-
- |
-
-(Optional)
- ZoneSize is the size of the shared memory zone used by the upstream. This memory zone is used to share
-the upstream configuration between nginx worker processes. The more servers that an upstream has,
-the larger memory zone is required.
-Default: OSS: 512k, Plus: 1m.
-Directive: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#zone
- |
-
-
-
-keepAlive
-
-
-UpstreamKeepAlive
-
-
- |
-
-(Optional)
- KeepAlive defines the keep-alive settings.
- |
-
-
-
-targetRefs
-
-
-[]sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference
-
-
- |
-
- TargetRefs identifies API object(s) to apply the policy to.
-Objects must be in the same namespace as the policy.
-Support: Service
-TargetRefs must be distinct. The name field must be unique for all targetRef entries in the UpstreamSettingsPolicy.
- |
-
-
- |
-
-
-
-status
-
-
-sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus
-
-
- |
-
- Status defines the state of the UpstreamSettingsPolicy.
- |
-
-
-
-Address
-
-
-
-(Appears on:
-RewriteClientIP)
-
-
-
Address is a struct that specifies address type and value.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-type
-
-
-AddressType
-
-
- |
-
- Type specifies the type of address.
- |
-
-
-
-value
-
-string
-
- |
-
- Value specifies the address value.
- |
-
-
-
-AddressType
-(string
alias)
-
-
-(Appears on:
-Address)
-
-
-
AddressType specifies the type of address.
-
-
-
-
-Value |
-Description |
-
-
-"CIDR" |
-CIDRAddressType specifies that the address is a CIDR block.
- |
-
"Hostname" |
-HostnameAddressType specifies that the address is a Hostname.
- |
-
"IPAddress" |
-IPAddressType specifies that the address is an IP address.
- |
-
-
-ClientBody
-
-
-
-(Appears on:
-ClientSettingsPolicySpec)
-
-
-
ClientBody contains the settings for the client request body.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-maxSize
-
-
-Size
-
-
- |
-
-(Optional)
- MaxSize sets the maximum allowed size of the client request body.
-If the size in a request exceeds the configured value,
-the 413 (Request Entity Too Large) error is returned to the client.
-Setting size to 0 disables checking of client request body size.
-Default: https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size.
- |
-
-
-
-timeout
-
-
-Duration
-
-
- |
-
-(Optional)
- Timeout defines a timeout for reading client request body. The timeout is set only for a period between
-two successive read operations, not for the transmission of the whole request body.
-If a client does not transmit anything within this time, the request is terminated with the
-408 (Request Time-out) error.
-Default: https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout.
- |
-
-
-
-ClientKeepAlive
-
-
-
-(Appears on:
-ClientSettingsPolicySpec)
-
-
-
ClientKeepAlive defines the keep-alive settings for clients.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-requests
-
-int32
-
- |
-
-(Optional)
- Requests sets the maximum number of requests that can be served through one keep-alive connection.
-After the maximum number of requests are made, the connection is closed. Closing connections periodically
-is necessary to free per-connection memory allocations. Therefore, using too high maximum number of requests
-is not recommended as it can lead to excessive memory usage.
-Default: https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests.
- |
-
-
-
-time
-
-
-Duration
-
-
- |
-
-(Optional)
- Time defines the maximum time during which requests can be processed through one keep-alive connection.
-After this time is reached, the connection is closed following the subsequent request processing.
-Default: https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time.
- |
-
-
-
-timeout
-
-
-ClientKeepAliveTimeout
-
-
- |
-
-(Optional)
- Timeout defines the keep-alive timeouts for clients.
- |
-
-
-
-ClientKeepAliveTimeout
-
-
-
-(Appears on:
-ClientKeepAlive)
-
-
-
ClientKeepAliveTimeout defines the timeouts related to keep-alive client connections.
-Default: https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-server
-
-
-Duration
-
-
- |
-
-(Optional)
- Server sets the timeout during which a keep-alive client connection will stay open on the server side.
-Setting this value to 0 disables keep-alive client connections.
- |
-
-
-
-header
-
-
-Duration
-
-
- |
-
-(Optional)
- Header sets the timeout in the “Keep-Alive: timeout=time” response header field.
- |
-
-
-
-ClientSettingsPolicySpec
-
-
-
-(Appears on:
-ClientSettingsPolicy)
-
-
-
ClientSettingsPolicySpec defines the desired state of ClientSettingsPolicy.
-
-
-ControllerLogLevel
-(string
alias)
-
-
-(Appears on:
-Logging)
-
-
-
ControllerLogLevel type defines the logging level for the control plane.
-
-
-
-
-Value |
-Description |
-
-
-"debug" |
-ControllerLogLevelDebug is the debug level for control plane logging.
- |
-
"error" |
-ControllerLogLevelError is the error level for control plane logging.
- |
-
"info" |
-ControllerLogLevelInfo is the info level for control plane logging.
- |
-
-
-ControllerStatus
-
-
-
-(Appears on:
-SnippetsFilterStatus)
-
-
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-controllerName
-
-
-sigs.k8s.io/gateway-api/apis/v1.GatewayController
-
-
- |
-
- ControllerName is a domain/path string that indicates the name of the
-controller that wrote this status. This corresponds with the
-controllerName field on GatewayClass.
-Example: “example.net/gateway-controller”.
-The format of this field is DOMAIN “/” PATH, where DOMAIN and PATH are
-valid Kubernetes names
-(https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names).
-Controllers MUST populate this field when writing status. Controllers should ensure that
-entries to status populated with their ControllerName are cleaned up when they are no
-longer necessary.
- |
-
-
-
-conditions
-
-
-[]Kubernetes meta/v1.Condition
-
-
- |
-
-(Optional)
- Conditions describe the status of the SnippetsFilter.
- |
-
-
-
-Duration
-(string
alias)
-
-
-(Appears on:
-ClientBody,
-ClientKeepAlive,
-ClientKeepAliveTimeout,
-TelemetryExporter,
-UpstreamKeepAlive)
-
-
-
Duration is a string value representing a duration in time.
-Duration can be specified in milliseconds (ms), seconds (s), minutes (m), hours (h).
-A value without a suffix is seconds.
-Examples: 120s, 50ms, 5m, 1h.
-
-IPFamilyType
-(string
alias)
-
-
-(Appears on:
-NginxProxySpec)
-
-
-
IPFamilyType specifies the IP family to be used by NGINX.
-
-
-
-
-Value |
-Description |
-
-
-"dual" |
-Dual specifies that NGINX will use both IPv4 and IPv6.
- |
-
"ipv4" |
-IPv4 specifies that NGINX will use only IPv4.
- |
-
"ipv6" |
-IPv6 specifies that NGINX will use only IPv6.
- |
-
-
-Logging
-
-
-
-(Appears on:
-NginxGatewaySpec)
-
-
-
Logging defines logging related settings for the control plane.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-level
-
-
-ControllerLogLevel
-
-
- |
-
-(Optional)
- Level defines the logging level.
- |
-
-
-
-NginxContext
-(string
alias)
-
-
-(Appears on:
-Snippet)
-
-
-
NginxContext represents the NGINX configuration context.
-
-
-NginxErrorLogLevel
-(string
alias)
-
-
-(Appears on:
-NginxLogging)
-
-
-
NginxErrorLogLevel type defines the log level of error logs for NGINX.
-
-
-
-
-Value |
-Description |
-
-
-"alert" |
-NginxLogLevelAlert is the alert level for NGINX error logs.
- |
-
"crit" |
-NginxLogLevelCrit is the crit level for NGINX error logs.
- |
-
"debug" |
-NginxLogLevelDebug is the debug level for NGINX error logs.
- |
-
"emerg" |
-NginxLogLevelEmerg is the emerg level for NGINX error logs.
- |
-
"error" |
-NginxLogLevelError is the error level for NGINX error logs.
- |
-
"info" |
-NginxLogLevelInfo is the info level for NGINX error logs.
- |
-
"notice" |
-NginxLogLevelNotice is the notice level for NGINX error logs.
- |
-
"warn" |
-NginxLogLevelWarn is the warn level for NGINX error logs.
- |
-
-
-NginxGatewayConditionReason
-(string
alias)
-
-
-
NginxGatewayConditionReason defines the set of reasons that explain why a
-particular NginxGateway condition type has been raised.
-
-
-
-
-Value |
-Description |
-
-
-"Invalid" |
-NginxGatewayReasonInvalid is a reason that is used with the “Valid” condition when the condition is False.
- |
-
"Valid" |
-NginxGatewayReasonValid is a reason that is used with the “Valid” condition when the condition is True.
- |
-
-
-NginxGatewayConditionType
-(string
alias)
-
-
-
NginxGatewayConditionType is a type of condition associated with an
-NginxGateway. This type should be used with the NginxGatewayStatus.Conditions field.
-
-
-
-
-Value |
-Description |
-
-
-"Valid" |
-NginxGatewayConditionValid is a condition that is true when the NginxGateway
-configuration is syntactically and semantically valid.
- |
-
-
-NginxGatewaySpec
-
-
-
-(Appears on:
-NginxGateway)
-
-
-
NginxGatewaySpec defines the desired state of the NginxGateway.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-logging
-
-
-Logging
-
-
- |
-
-(Optional)
- Logging defines logging related settings for the control plane.
- |
-
-
-
-NginxGatewayStatus
-
-
-
-(Appears on:
-NginxGateway)
-
-
-
NginxGatewayStatus defines the state of the NginxGateway.
-
-
-NginxLogging
-
-
-
-(Appears on:
-NginxProxySpec)
-
-
-
NginxLogging defines logging related settings for NGINX.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-errorLevel
-
-
-NginxErrorLogLevel
-
-
- |
-
-(Optional)
- ErrorLevel defines the error log level. Possible log levels listed in order of increasing severity are
-debug, info, notice, warn, error, crit, alert, and emerg. Setting a certain log level will cause all messages
-of the specified and more severe log levels to be logged. For example, the log level ‘error’ will cause error,
-crit, alert, and emerg messages to be logged. https://nginx.org/en/docs/ngx_core_module.html#error_log
- |
-
-
-
-NginxProxySpec
-
-
-
-(Appears on:
-NginxProxy)
-
-
-
NginxProxySpec defines the desired state of the NginxProxy.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-ipFamily
-
-
-IPFamilyType
-
-
- |
-
-(Optional)
- IPFamily specifies the IP family to be used by the NGINX.
-Default is “dual”, meaning the server will use both IPv4 and IPv6.
- |
-
-
-
-telemetry
-
-
-Telemetry
-
-
- |
-
-(Optional)
- Telemetry specifies the OpenTelemetry configuration.
- |
-
-
-
-rewriteClientIP
-
-
-RewriteClientIP
-
-
- |
-
-(Optional)
- RewriteClientIP defines configuration for rewriting the client IP to the original client’s IP.
- |
-
-
-
-logging
-
-
-NginxLogging
-
-
- |
-
-(Optional)
- Logging defines logging related settings for NGINX.
- |
-
-
-
-disableHTTP2
-
-bool
-
- |
-
-(Optional)
- DisableHTTP2 defines if http2 should be disabled for all servers.
-Default is false, meaning http2 will be enabled for all servers.
- |
-
-
-
-ObservabilityPolicySpec
-
-
-
-(Appears on:
-ObservabilityPolicy)
-
-
-
ObservabilityPolicySpec defines the desired state of the ObservabilityPolicy.
-
-
-RewriteClientIP
-
-
-
-(Appears on:
-NginxProxySpec)
-
-
-
RewriteClientIP specifies the configuration for rewriting the client’s IP address.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-mode
-
-
-RewriteClientIPModeType
-
-
- |
-
-(Optional)
- Mode defines how NGINX will rewrite the client’s IP address.
-There are two possible modes:
-- ProxyProtocol: NGINX will rewrite the client’s IP using the PROXY protocol header.
-- XForwardedFor: NGINX will rewrite the client’s IP using the X-Forwarded-For header.
-Sets NGINX directive real_ip_header: https://nginx.org/en/docs/http/ngx_http_realip_module.html#real_ip_header
- |
-
-
-
-setIPRecursively
-
-bool
-
- |
-
-(Optional)
- SetIPRecursively configures whether recursive search is used when selecting the client’s address from
-the X-Forwarded-For header. It is used in conjunction with TrustedAddresses.
-If enabled, NGINX will recurse on the values in X-Forwarded-Header from the end of array
-to start of array and select the first untrusted IP.
-For example, if X-Forwarded-For is [11.11.11.11, 22.22.22.22, 55.55.55.1],
-and TrustedAddresses is set to 55.55.55.1⁄32, NGINX will rewrite the client IP to 22.22.22.22.
-If disabled, NGINX will select the IP at the end of the array.
-In the previous example, 55.55.55.1 would be selected.
-Sets NGINX directive real_ip_recursive: https://nginx.org/en/docs/http/ngx_http_realip_module.html#real_ip_recursive
- |
-
-
-
-trustedAddresses
-
-
-[]Address
-
-
- |
-
-(Optional)
- TrustedAddresses specifies the addresses that are trusted to send correct client IP information.
-If a request comes from a trusted address, NGINX will rewrite the client IP information,
-and forward it to the backend in the X-Forwarded-For* and X-Real-IP headers.
-If the request does not come from a trusted address, NGINX will not rewrite the client IP information.
-TrustedAddresses only supports CIDR blocks: 192.33.21.1⁄24, fe80::1⁄64.
-To trust all addresses (not recommended for production), set to 0.0.0.0/0.
-If no addresses are provided, NGINX will not rewrite the client IP information.
-Sets NGINX directive set_real_ip_from: https://nginx.org/en/docs/http/ngx_http_realip_module.html#set_real_ip_from
-This field is required if mode is set.
- |
-
-
-
-RewriteClientIPModeType
-(string
alias)
-
-
-(Appears on:
-RewriteClientIP)
-
-
-
RewriteClientIPModeType defines how NGINX Gateway Fabric will determine the client’s original IP address.
-
-
-Size
-(string
alias)
-
-
-(Appears on:
-ClientBody,
-UpstreamSettingsPolicySpec)
-
-
-
Size is a string value representing a size. Size can be specified in bytes, kilobytes (k), megabytes (m),
-or gigabytes (g).
-Examples: 1024, 8k, 1m.
-
-Snippet
-
-
-
-(Appears on:
-SnippetsFilterSpec)
-
-
-
Snippet represents an NGINX configuration snippet.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-context
-
-
-NginxContext
-
-
- |
-
- Context is the NGINX context to insert the snippet into.
- |
-
-
-
-value
-
-string
-
- |
-
- Value is the NGINX configuration snippet.
- |
-
-
-
-SnippetsFilterConditionReason
-(string
alias)
-
-
-
SnippetsFilterConditionReason is a reason for a SnippetsFilter condition type.
-
-
-
-
-Value |
-Description |
-
-
-"Accepted" |
-SnippetsFilterConditionReasonAccepted is used with the Accepted condition type when
-the condition is true.
- |
-
"Invalid" |
-SnippetsFilterConditionReasonInvalid is used with the Accepted condition type when
-SnippetsFilter is invalid.
- |
-
-
-SnippetsFilterConditionType
-(string
alias)
-
-
-
SnippetsFilterConditionType is a type of condition associated with SnippetsFilter.
-
-
-
-
-Value |
-Description |
-
-
-"Accepted" |
-SnippetsFilterConditionTypeAccepted indicates that the SnippetsFilter is accepted.
-Possible reasons for this condition to be True:
-
-Possible reasons for this condition to be False:
-
- |
-
-
-SnippetsFilterSpec
-
-
-
-(Appears on:
-SnippetsFilter)
-
-
-
SnippetsFilterSpec defines the desired state of the SnippetsFilter.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-snippets
-
-
-[]Snippet
-
-
- |
-
- Snippets is a list of NGINX configuration snippets.
-There can only be one snippet per context.
-Allowed contexts: main, http, http.server, http.server.location.
- |
-
-
-
-SnippetsFilterStatus
-
-
-
-(Appears on:
-SnippetsFilter)
-
-
-
SnippetsFilterStatus defines the state of SnippetsFilter.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-controllers
-
-
-[]ControllerStatus
-
-
- |
-
- Controllers is a list of Gateway API controllers that processed the SnippetsFilter
-and the status of the SnippetsFilter with respect to each controller.
- |
-
-
-
-SpanAttribute
-
-
-
-(Appears on:
-Telemetry,
-Tracing,
-Tracing)
-
-
-
SpanAttribute is a key value pair to be added to a tracing span.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-key
-
-string
-
- |
-
- Key is the key for a span attribute.
-Format: must have all ‘“’ escaped and must not contain any ‘$’ or end with an unescaped ‘\’
- |
-
-
-
-value
-
-string
-
- |
-
- Value is the value for a span attribute.
-Format: must have all ‘“’ escaped and must not contain any ‘$’ or end with an unescaped ‘\’
- |
-
-
-
-Telemetry
-
-
-
-(Appears on:
-NginxProxySpec)
-
-
-
Telemetry specifies the OpenTelemetry configuration.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-exporter
-
-
-TelemetryExporter
-
-
- |
-
-(Optional)
- Exporter specifies OpenTelemetry export parameters.
- |
-
-
-
-serviceName
-
-string
-
- |
-
-(Optional)
- ServiceName is the “service.name” attribute of the OpenTelemetry resource.
-Default is ‘ngf::’. If a value is provided by the user,
-then the default becomes a prefix to that value.
- |
-
-
-
-spanAttributes
-
-
-[]SpanAttribute
-
-
- |
-
-(Optional)
- SpanAttributes are custom key/value attributes that are added to each span.
- |
-
-
-
-TelemetryExporter
-
-
-
-(Appears on:
-Telemetry)
-
-
-
TelemetryExporter specifies OpenTelemetry export parameters.
-
-
-TraceContext
-(string
alias)
-
-
-(Appears on:
-Tracing)
-
-
-
TraceContext specifies how to propagate traceparent/tracestate headers.
-
-
-
-
-Value |
-Description |
-
-
-"extract" |
-TraceContextExtract uses an existing trace context from the request, so that the identifiers
-of a trace and the parent span are inherited from the incoming request.
- |
-
"ignore" |
-TraceContextIgnore skips context headers processing.
- |
-
"inject" |
-TraceContextInject adds a new context to the request, overwriting existing headers, if any.
- |
-
"propagate" |
-TraceContextPropagate updates the existing context (combines extract and inject).
- |
-
-
-TraceStrategy
-(string
alias)
-
-
-(Appears on:
-Tracing)
-
-
-
TraceStrategy defines the tracing strategy.
-
-
-
-
-Value |
-Description |
-
-
-"parent" |
-TraceStrategyParent enables tracing and only records spans if the parent span was sampled.
- |
-
"ratio" |
-TraceStrategyRatio enables ratio-based tracing, defaulting to 100% sampling rate.
- |
-
-
-Tracing
-
-
-
-(Appears on:
-ObservabilityPolicySpec)
-
-
-
Tracing allows for enabling and configuring OpenTelemetry tracing.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-strategy
-
-
-TraceStrategy
-
-
- |
-
- Strategy defines if tracing is ratio-based or parent-based.
- |
-
-
-
-ratio
-
-int32
-
- |
-
-(Optional)
- Ratio is the percentage of traffic that should be sampled. Integer from 0 to 100.
-By default, 100% of http requests are traced. Not applicable for parent-based tracing.
-If ratio is set to 0, tracing is disabled.
- |
-
-
-
-context
-
-
-TraceContext
-
-
- |
-
-(Optional)
- Context specifies how to propagate traceparent/tracestate headers.
-Default: https://nginx.org/en/docs/ngx_otel_module.html#otel_trace_context
- |
-
-
-
-spanName
-
-string
-
- |
-
-(Optional)
- SpanName defines the name of the Otel span. By default is the name of the location for a request.
-If specified, applies to all locations that are created for a route.
-Format: must have all ‘“’ escaped and must not contain any ‘$’ or end with an unescaped ‘\’
-Examples of invalid names: some-$value, quoted-“value”-name, unescaped
- |
-
-
-
-spanAttributes
-
-
-[]SpanAttribute
-
-
- |
-
-(Optional)
- SpanAttributes are custom key/value attributes that are added to each span.
- |
-
-
-
-UpstreamKeepAlive
-
-
-
-(Appears on:
-UpstreamSettingsPolicySpec)
-
-
-
UpstreamKeepAlive defines the keep-alive settings for upstreams.
-
-
-UpstreamSettingsPolicySpec
-
-
-
-(Appears on:
-UpstreamSettingsPolicy)
-
-
-
UpstreamSettingsPolicySpec defines the desired state of the UpstreamSettingsPolicy.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-zoneSize
-
-
-Size
-
-
- |
-
-(Optional)
- ZoneSize is the size of the shared memory zone used by the upstream. This memory zone is used to share
-the upstream configuration between nginx worker processes. The more servers that an upstream has,
-the larger memory zone is required.
-Default: OSS: 512k, Plus: 1m.
-Directive: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#zone
- |
-
-
-
-keepAlive
-
-
-UpstreamKeepAlive
-
-
- |
-
-(Optional)
- KeepAlive defines the keep-alive settings.
- |
-
-
-
-targetRefs
-
-
-[]sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference
-
-
- |
-
- TargetRefs identifies API object(s) to apply the policy to.
-Objects must be in the same namespace as the policy.
-Support: Service
-TargetRefs must be distinct. The name field must be unique for all targetRef entries in the UpstreamSettingsPolicy.
- |
-
-
-
-
-gateway.nginx.org/v1alpha2
-
-
Package v1alpha2 contains API Schema definitions for the
-gateway.nginx.org API group.
-
-Resource Types:
-
-ObservabilityPolicy
-
-
-
-
ObservabilityPolicy is a Direct Attached Policy. It provides a way to configure observability settings for
-the NGINX Gateway Fabric data plane. Used in conjunction with the NginxProxy CRD that is attached to the
-GatewayClass parametersRef.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-apiVersion
-string |
-
-
-gateway.nginx.org/v1alpha2
-
- |
-
-
-
-kind
-string
- |
-ObservabilityPolicy |
-
-
-
-metadata
-
-
-Kubernetes meta/v1.ObjectMeta
-
-
- |
-
-Refer to the Kubernetes API documentation for the fields of the
-metadata field.
- |
-
-
-
-spec
-
-
-ObservabilityPolicySpec
-
-
- |
-
- Spec defines the desired state of the ObservabilityPolicy.
-
-
-
-
-
-tracing
-
-
-Tracing
-
-
- |
-
-(Optional)
- Tracing allows for enabling and configuring tracing.
- |
-
-
-
-targetRefs
-
-
-[]sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference
-
-
- |
-
- TargetRefs identifies the API object(s) to apply the policy to.
-Objects must be in the same namespace as the policy.
-Support: HTTPRoute, GRPCRoute.
-TargetRefs must be distinct. This means that the multi-part key defined by kind and name must
-be unique across all targetRef entries in the ObservabilityPolicy.
- |
-
-
- |
-
-
-
-status
-
-
-sigs.k8s.io/gateway-api/apis/v1alpha2.PolicyStatus
-
-
- |
-
- Status defines the state of the ObservabilityPolicy.
- |
-
-
-
-ObservabilityPolicySpec
-
-
-
-(Appears on:
-ObservabilityPolicy)
-
-
-
ObservabilityPolicySpec defines the desired state of the ObservabilityPolicy.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-tracing
-
-
-Tracing
-
-
- |
-
-(Optional)
- Tracing allows for enabling and configuring tracing.
- |
-
-
-
-targetRefs
-
-
-[]sigs.k8s.io/gateway-api/apis/v1alpha2.LocalPolicyTargetReference
-
-
- |
-
- TargetRefs identifies the API object(s) to apply the policy to.
-Objects must be in the same namespace as the policy.
-Support: HTTPRoute, GRPCRoute.
-TargetRefs must be distinct. This means that the multi-part key defined by kind and name must
-be unique across all targetRef entries in the ObservabilityPolicy.
- |
-
-
-
-TraceContext
-(string
alias)
-
-
-(Appears on:
-Tracing)
-
-
-
TraceContext specifies how to propagate traceparent/tracestate headers.
-
-
-
-
-Value |
-Description |
-
-
-"extract" |
-TraceContextExtract uses an existing trace context from the request, so that the identifiers
-of a trace and the parent span are inherited from the incoming request.
- |
-
"ignore" |
-TraceContextIgnore skips context headers processing.
- |
-
"inject" |
-TraceContextInject adds a new context to the request, overwriting existing headers, if any.
- |
-
"propagate" |
-TraceContextPropagate updates the existing context (combines extract and inject).
- |
-
-
-TraceStrategy
-(string
alias)
-
-
-(Appears on:
-Tracing)
-
-
-
TraceStrategy defines the tracing strategy.
-
-
-
-
-Value |
-Description |
-
-
-"parent" |
-TraceStrategyParent enables tracing and only records spans if the parent span was sampled.
- |
-
"ratio" |
-TraceStrategyRatio enables ratio-based tracing, defaulting to 100% sampling rate.
- |
-
-
-Tracing
-
-
-
-(Appears on:
-ObservabilityPolicySpec)
-
-
-
Tracing allows for enabling and configuring OpenTelemetry tracing.
-
-
-
-
-Field |
-Description |
-
-
-
-
-
-strategy
-
-
-TraceStrategy
-
-
- |
-
- Strategy defines if tracing is ratio-based or parent-based.
- |
-
-
-
-ratio
-
-int32
-
- |
-
-(Optional)
- Ratio is the percentage of traffic that should be sampled. Integer from 0 to 100.
-By default, 100% of http requests are traced. Not applicable for parent-based tracing.
-If ratio is set to 0, tracing is disabled.
- |
-
-
-
-context
-
-
-TraceContext
-
-
- |
-
-(Optional)
- Context specifies how to propagate traceparent/tracestate headers.
-Default: https://nginx.org/en/docs/ngx_otel_module.html#otel_trace_context
- |
-
-
-
-spanName
-
-string
-
- |
-
-(Optional)
- SpanName defines the name of the Otel span. By default is the name of the location for a request.
-If specified, applies to all locations that are created for a route.
-Format: must have all ‘“’ escaped and must not contain any ‘$’ or end with an unescaped ‘\’
-Examples of invalid names: some-$value, quoted-“value”-name, unescaped
- |
-
-
-
-spanAttributes
-
-
-[]SpanAttribute
-
-
- |
-
-(Optional)
- SpanAttributes are custom key/value attributes that are added to each span.
- |
-
-
-
-
-
-Generated with gen-crd-api-reference-docs
-
diff --git a/site/content/reference/cli-help.md b/site/content/reference/cli-help.md
deleted file mode 100644
index aedcc0e74c..0000000000
--- a/site/content/reference/cli-help.md
+++ /dev/null
@@ -1,70 +0,0 @@
----
-title: "Command-line reference guide"
-weight: 100
-toc: true
-docs: "DOCS-1435"
----
-
-## Overview
-
-Learn about the commands available for the executable file of the NGINX Gateway Fabric container.
-
-## Static mode
-
-This command configures NGINX for a single NGINX Gateway Fabric resource.
-
-*Usage*:
-
-```shell
- gateway static-mode [flags]
-```
-
-### Flags
-
-{{< bootstrap-table "table table-bordered table-striped table-responsive" >}}
-
-| Name | Type | Description |
-|-------------------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| _gateway-ctlr-name_ | _string_ | The name of the Gateway controller. The controller name must be in the form: `DOMAIN/PATH`. The controller's domain is `gateway.nginx.org`. |
-| _gatewayclass_ | _string_ | The name of the GatewayClass resource. Every NGINX Gateway Fabric must have a unique corresponding GatewayClass resource. |
-| _gateway_ | _string_ | The namespaced name of the Gateway resource to use. Must be of the form: `NAMESPACE/NAME`. If not specified, the control plane will process all Gateways for the configured GatewayClass. Among them, it will choose the oldest resource by creation timestamp. If the timestamps are equal, it will choose the resource that appears first in alphabetical order by {namespace}/{name}. |
-| _nginx-plus_ | _bool_ | Enable support for NGINX Plus. |
-| _gateway-api-experimental-features_ | _bool_ | Enable the experimental features of Gateway API which are supported by NGINX Gateway Fabric. Requires the Gateway APIs installed from the experimental channel. |
-| _config_ | _string_ | The name of the NginxGateway resource to be used for this controller's dynamic configuration. Lives in the same namespace as the controller. |
-| _service_ | _string_ | The name of the service that fronts this NGINX Gateway Fabric pod. Lives in the same namespace as the controller. |
-| _metrics-disable_ | _bool_ | Disable exposing metrics in the Prometheus format (Default: `false`). |
-| _metrics-listen-port_ | _int_ | Sets the port where the Prometheus metrics are exposed. An integer between 1024 - 65535 (Default: `9113`) |
-| _metrics-secure-serving_ | _bool_ | Configures if the metrics endpoint should be secured using https. Note that this endpoint will be secured with a self-signed certificate (Default `false`). |
-| _update-gatewayclass-status_ | _bool_ | Update the status of the GatewayClass resource (Default: `true`). |
-| _health-disable_ | _bool_ | Disable running the health probe server (Default: `false`). |
-| _health-port_ | _int_ | Set the port where the health probe server is exposed. An integer between 1024 - 65535 (Default: `8081`). |
-| _leader-election-disable_ | _bool_ | Disable leader election, which is used to avoid multiple replicas of the NGINX Gateway Fabric reporting the status of the Gateway API resources. If disabled, all replicas of NGINX Gateway Fabric will update the statuses of the Gateway API resources (Default: `false`). |
-| _leader-election-lock-name_ | _string_ | The name of the leader election lock. A lease object with this name will be created in the same namespace as the controller (Default: `"nginx-gateway-leader-election-lock"`). |
-| _product-telemetry-disable_ | _bool_ | Disable the collection of product telemetry (Default: `false`). |
-| _usage-report-secret_ | _string_ | The name of the Secret containing the JWT for NGINX Plus usage reporting. Must exist in the same namespace that the NGINX Gateway Fabric control plane is running in (default namespace: nginx-gateway) |
-| _usage-report-endpoint_ | _string_ | The endpoint of the NGINX Plus usage reporting server. |
-| _usage-report-resolver_ | _string_ | The nameserver used to resolve the NGINX Plus usage reporting endpoint. Used with NGINX Instance Manager. |
-| _usage-report-skip-verify_ | _bool_ | Disable client verification of the NGINX Plus usage reporting server certificate. |
-| _usage-report-ca-secret_ | _string_ | The name of the Secret containing the NGINX Instance Manager CA certificate. Must exist in the same namespace that the NGINX Gateway Fabric control plane is running in (default namespace: nginx-gateway) |
-| _usage-report-client-ssl-secret_ | _string_ | TThe name of the Secret containing the client certificate and key for authenticating with NGINX Instance Manager. Must exist in the same namespace that the NGINX Gateway Fabric control plane is running in (default namespace: nginx-gateway) |
-| _snippets-filters_ | _bool_ | Enable SnippetsFilters feature. SnippetsFilters allow inserting NGINX configuration into the generated NGINX config for HTTPRoute and GRPCRoute resources. |
-
-{{% /bootstrap-table %}}
-
-## Sleep
-
-This command sleeps for specified duration, then exits.
-
-_Usage_:
-
-```shell
- gateway sleep [flags]
-```
-
-{{< bootstrap-table "table table-bordered table-striped table-responsive" >}}
-
-| Name | Type | Description |
-| -------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
-| duration | `time.Duration` | Set the duration of sleep. Must be parsable by [`time.ParseDuration`](https://pkg.go.dev/time#ParseDuration). (default `30s`) |
-
-{{% /bootstrap-table %}}
diff --git a/site/content/reference/technical-specifications.md b/site/content/reference/technical-specifications.md
deleted file mode 100644
index 97bb523ba5..0000000000
--- a/site/content/reference/technical-specifications.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: "Technical specifications"
-draft: false
-description: "NGINX Gateway Fabric technical specifications."
-weight: 200
-toc: true
-tags: [ "docs" ]
-docs: "DOCS-1434"
----
-
-See the NGINX Gateway Fabric technical specifications page:
-
-
diff --git a/site/content/releases.md b/site/content/releases.md
deleted file mode 100644
index fb2991857a..0000000000
--- a/site/content/releases.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: "Releases"
-description: "NGINX Gateway Fabric releases."
-toc: true
-weight: 700
-docs: "DOCS-1359"
----
-
-See the NGINX Gateway Fabric changelog page:
-
-
diff --git a/site/content/support.md b/site/content/support.md
deleted file mode 100644
index c62d4f723d..0000000000
--- a/site/content/support.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: "Support"
-toc: true
-weight: 600
-docs: "DOCS-1411"
----
-
-F5 NGINX Gateway Fabric adheres to the support policy detailed in the following knowledge base article: [K000140156](https://my.f5.com/manage/s/article/K000140156).
-
-After opening a support ticket, F5 staff will request additional information to better understand the problem.
-
-The [nginx-supportpkg-for-k8s](https://github.com/nginxinc/nginx-supportpkg-for-k8s) plugin collects the information needed by F5 Technical Support to assist with troubleshooting your issue.
-
-The plugin uses [krew](https://krew.sigs.k8s.io), the plugin manager for the Kubernetes [kubectl](https://kubernetes.io/docs/reference/kubectl/) command-line tool.
-
-The plugin may collect some or all of the following global and namespace-specific information:
-
-- Kubernetes version and information about Nodes and Custom Resources
-- Kubernetes metrics
-- Helm deployments
-- List of Pods, Events, ConfigMaps, Services, Deployments, Daemonsets, StatefulSets, ReplicaSets, and Leases
-- Pod log output
-- `nginx -T` output from NGINX-related Pods
-
-This plugin **does not** collect secrets or coredumps.
-
-Visit the [projectβs GitHub repository](https://github.com/nginxinc/nginx-supportpkg-for-k8s) for further details.
-
-
-**Support Channels:**
-
-- If you experience issues with NGINX Gateway Fabric, please [open an issue](https://github.com/nginx/nginx-gateway-fabric/issues/new?assignees=&labels=&projects=&template=bug_report.md&title=) in GitHub.
-
-- If you have any suggestions or enhancement requests, please [open an idea](https://github.com/nginx/nginx-gateway-fabric/discussions/categories/ideas) on GitHub discussions.
-
-- You can contact us directly, by sending an email to [kubernetes@nginx.com](mailto:kubernetes@nginx.com) or on the [NGINX Community Slack](https://nginxcommunity.slack.com/channels/nginx-gateway-fabric), in the #nginx-gateway-fabric channel.
-
-- If you need dedicated support for NGINX Gateway Fabric, or you would like to leverage our [advanced NGINX Plus features](https://docs.nginx.com/nginx-gateway-fabric/overview/nginx-plus/), you can contact [F5 Sales](https://www.f5.com/content/f5-com/en_us/products/get-f5).
diff --git a/site/go.mod b/site/go.mod
deleted file mode 100644
index 942de55c3a..0000000000
--- a/site/go.mod
+++ /dev/null
@@ -1,5 +0,0 @@
-module github.com/nginx/nginx-gateway-fabric/site
-
-go 1.21.0
-
-require github.com/nginxinc/nginx-hugo-theme v0.41.23 // indirect
diff --git a/site/go.sum b/site/go.sum
deleted file mode 100644
index 6bf2752ad6..0000000000
--- a/site/go.sum
+++ /dev/null
@@ -1,2 +0,0 @@
-github.com/nginxinc/nginx-hugo-theme v0.41.23 h1:ddIfLF7BFd78qyIn3z5aReeC4BO/m9FH81d5S+al/6s=
-github.com/nginxinc/nginx-hugo-theme v0.41.23/go.mod h1:DPNgSS5QYxkjH/BfH4uPDiTfODqWJ50NKZdorguom8M=
diff --git a/site/hugo-entrypoint.sh b/site/hugo-entrypoint.sh
deleted file mode 100755
index 7462155cdf..0000000000
--- a/site/hugo-entrypoint.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-hugo mod get -u github.com/nginxinc/nginx-hugo-theme
-hugo --environment docker $*
diff --git a/site/layouts/shortcodes/call-out.html b/site/layouts/shortcodes/call-out.html
deleted file mode 100644
index d8e591d832..0000000000
--- a/site/layouts/shortcodes/call-out.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{ .Get 1 }}
{{ .Inner | markdownify }}
-
diff --git a/site/layouts/shortcodes/custom-styles.html b/site/layouts/shortcodes/custom-styles.html
deleted file mode 100644
index 8ec2a0bbf4..0000000000
--- a/site/layouts/shortcodes/custom-styles.html
+++ /dev/null
@@ -1,43 +0,0 @@
-
diff --git a/site/md-linkcheck-config.json b/site/md-linkcheck-config.json
deleted file mode 100644
index aff3727179..0000000000
--- a/site/md-linkcheck-config.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "replacementPatterns": [
- {
- "pattern": "^/",
- "replacement": "/"
- }
- ],
- "ignorePatterns": [
- {
- "pattern": "^.+localhost.+$|/.+yaml"
- }
- ]
-}
diff --git a/site/static/grafana-dashboard.json b/site/static/grafana-dashboard.json
deleted file mode 100644
index 0c3c40392d..0000000000
--- a/site/static/grafana-dashboard.json
+++ /dev/null
@@ -1,815 +0,0 @@
-{
- "annotations": {
- "list": [
- {
- "builtIn": 1,
- "datasource": {
- "type": "grafana",
- "uid": "-- Grafana --"
- },
- "enable": true,
- "hide": true,
- "iconColor": "rgba(0, 211, 255, 1)",
- "name": "Annotations & Alerts",
- "type": "dashboard"
- }
- ]
- },
- "description": "Sample dashboard for NGINX Gateway Fabric",
- "editable": true,
- "fiscalYearStartMonth": 0,
- "graphTooltip": 0,
- "id": 1,
- "links": [],
- "liveNow": false,
- "panels": [
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 0
- },
- "id": 5,
- "panels": [],
- "title": "Status",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "index": 0,
- "text": "Down"
- },
- "1": {
- "index": 1,
- "text": "Up"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "semi-dark-red",
- "value": null
- },
- {
- "color": "#EAB839",
- "value": 1
- },
- {
- "color": "semi-dark-green",
- "value": 1
- }
- ]
- },
- "unit": "none",
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 4,
- "w": 6,
- "x": 0,
- "y": 1
- },
- "id": 3,
- "options": {
- "colorMode": "background",
- "graphMode": "none",
- "justifyMode": "auto",
- "orientation": "horizontal",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "10.3.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "builder",
- "expr": "nginx_gateway_fabric_up{instance=~\"$instance\"}",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": false,
- "legendFormat": "",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "NGINX Status for $instance",
- "type": "stat"
- },
- {
- "collapsed": false,
- "gridPos": {
- "h": 1,
- "w": 24,
- "x": 0,
- "y": 5
- },
- "id": 6,
- "panels": [],
- "title": "Metrics",
- "type": "row"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "Connections (rate)",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 10,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 1,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "reqps",
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 0,
- "y": 6
- },
- "id": 1,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "expr": "irate(nginx_gateway_fabric_connections_accepted{instance=~\"$instance\"}[1m])",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "instant": false,
- "interval": "",
- "legendFormat": "{{instance}} accepted",
- "range": true,
- "refId": "A",
- "useBackend": false
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "irate(nginx_gateway_fabric_connections_handled{instance=~\"$instance\"}[1m])",
- "hide": false,
- "instant": false,
- "legendFormat": "{{instance}} handled",
- "range": true,
- "refId": "B"
- }
- ],
- "title": "Processed Connections",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "description": "",
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "Connections",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 10,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 1,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "short",
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 10,
- "w": 12,
- "x": 12,
- "y": 6
- },
- "id": 4,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "nginx_gateway_fabric_connections_active{instance=~\"$instance\"}",
- "instant": false,
- "legendFormat": "{{instance}} active",
- "range": true,
- "refId": "A"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "nginx_gateway_fabric_connections_reading{instance=~\"$instance\"}",
- "hide": false,
- "instant": false,
- "legendFormat": "{{instance}} reading",
- "range": true,
- "refId": "B"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "nginx_gateway_fabric_connections_waiting{instance=~\"$instance\"}",
- "hide": false,
- "instant": false,
- "legendFormat": "{{instance}} waiting",
- "range": true,
- "refId": "C"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "editorMode": "code",
- "expr": "nginx_gateway_fabric_connections_writing{instance=~\"$instance\"}",
- "hide": false,
- "instant": false,
- "legendFormat": "{{instance}} writing",
- "range": true,
- "refId": "D"
- }
- ],
- "title": "Active Connections",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 10,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 1,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unit": "reqps",
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 24,
- "x": 0,
- "y": 16
- },
- "id": 2,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "expr": "irate(nginx_gateway_fabric_http_requests_total{instance=~\"$instance\"}[1m])",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "instant": false,
- "legendFormat": "{{instance}} total requests",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Total Requests",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "palette-classic"
- },
- "custom": {
- "axisBorderShow": false,
- "axisCenteredZero": false,
- "axisColorMode": "text",
- "axisLabel": "",
- "axisPlacement": "auto",
- "barAlignment": 0,
- "drawStyle": "line",
- "fillOpacity": 10,
- "gradientMode": "none",
- "hideFrom": {
- "legend": false,
- "tooltip": false,
- "viz": false
- },
- "insertNulls": false,
- "lineInterpolation": "linear",
- "lineWidth": 1,
- "pointSize": 1,
- "scaleDistribution": {
- "type": "linear"
- },
- "showPoints": "auto",
- "spanNulls": false,
- "stacking": {
- "group": "A",
- "mode": "none"
- },
- "thresholdsStyle": {
- "mode": "off"
- }
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- }
- ]
- },
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 12,
- "x": 0,
- "y": 24
- },
- "id": 8,
- "options": {
- "legend": {
- "calcs": [],
- "displayMode": "list",
- "placement": "bottom",
- "showLegend": true
- },
- "tooltip": {
- "mode": "single",
- "sort": "none"
- }
- },
- "pluginVersion": "10.3.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "code",
- "expr": "irate(nginx_gateway_fabric_nginx_reloads_total{instance=~\"$instance\"}[1m])",
- "fullMetaSearch": false,
- "includeNullMetadata": false,
- "instant": false,
- "legendFormat": "{{instance}}",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Total NGINX Reloads Rate",
- "type": "timeseries"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "red",
- "value": 1
- }
- ]
- },
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 6,
- "x": 12,
- "y": 24
- },
- "id": 9,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "10.3.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "builder",
- "expr": "nginx_gateway_fabric_nginx_reload_errors_total{instance=~\"$instance\"}",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": false,
- "legendFormat": "{{instance}}",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "Total NGINX Reload Errors",
- "type": "stat"
- },
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "fieldConfig": {
- "defaults": {
- "color": {
- "mode": "thresholds"
- },
- "mappings": [
- {
- "options": {
- "0": {
- "color": "semi-dark-green",
- "index": 0,
- "text": "Up to date"
- },
- "1": {
- "color": "semi-dark-red",
- "index": 1,
- "text": "Stale"
- }
- },
- "type": "value"
- }
- ],
- "thresholds": {
- "mode": "absolute",
- "steps": [
- {
- "color": "green",
- "value": null
- },
- {
- "color": "semi-dark-red",
- "value": 1
- }
- ]
- },
- "unitScale": true
- },
- "overrides": []
- },
- "gridPos": {
- "h": 8,
- "w": 6,
- "x": 18,
- "y": 24
- },
- "id": 10,
- "options": {
- "colorMode": "value",
- "graphMode": "area",
- "justifyMode": "auto",
- "orientation": "auto",
- "reduceOptions": {
- "calcs": [
- "lastNotNull"
- ],
- "fields": "",
- "values": false
- },
- "showPercentChange": false,
- "textMode": "auto",
- "wideLayout": true
- },
- "pluginVersion": "10.3.3",
- "targets": [
- {
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "disableTextWrap": false,
- "editorMode": "builder",
- "expr": "nginx_gateway_fabric_nginx_stale_config{instance=~\"$instance\"}",
- "fullMetaSearch": false,
- "includeNullMetadata": true,
- "instant": false,
- "legendFormat": "__auto",
- "range": true,
- "refId": "A",
- "useBackend": false
- }
- ],
- "title": "NGINX Config State",
- "type": "stat"
- }
- ],
- "refresh": "5s",
- "schemaVersion": 39,
- "tags": [
- "nginx-gateway-fabric"
- ],
- "templating": {
- "list": [
- {
- "current": {
- "selected": false,
- "text": "default",
- "value": "default"
- },
- "hide": 0,
- "includeAll": false,
- "label": "datasource",
- "multi": false,
- "name": "DS_PROMETHEUS",
- "options": [],
- "query": "prometheus",
- "queryValue": "",
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "type": "datasource"
- },
- {
- "current": {
- "selected": true,
- "text": [
- "All"
- ],
- "value": [
- "$__all"
- ]
- },
- "datasource": {
- "type": "prometheus",
- "uid": "${DS_PROMETHEUS}"
- },
- "definition": "label_values(nginx_gateway_fabric_up,instance)",
- "hide": 0,
- "includeAll": true,
- "multi": true,
- "name": "instance",
- "options": [],
- "query": {
- "qryType": 1,
- "query": "label_values(nginx_gateway_fabric_up,instance)",
- "refId": "PrometheusVariableQueryEditor-VariableQuery"
- },
- "refresh": 1,
- "regex": "",
- "skipUrlSync": false,
- "sort": 0,
- "type": "query"
- }
- ]
- },
- "time": {
- "from": "now-15m",
- "to": "now"
- },
- "timepicker": {},
- "timezone": "",
- "title": "NGINX Gateway Fabric",
- "uid": "cdb1c6f6-7c77-4cee-a177-593f41364dbe",
- "version": 1,
- "weekStart": ""
-}
diff --git a/site/static/img/advanced-routing.png b/site/static/img/advanced-routing.png
deleted file mode 100644
index 9be8d7c509f59e5e161a2ac6a2b0453f85e83717..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 64807
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
HGZ`<}Z)4ju$hX$9=s*86
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