From 462456828a37711eac89af4dbdc4eeae3f2ce5d6 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:30:12 -0700 Subject: [PATCH 01/33] Add NGINX extensions EP --- docs/images/hierarchy.png | Bin 0 -> 109568 bytes docs/images/nginx-functionality-groups.png | Bin 0 -> 152161 bytes docs/proposals/nginx-extensions.md | 816 +++++++++++++++++++++ 3 files changed, 816 insertions(+) create mode 100644 docs/images/hierarchy.png create mode 100644 docs/images/nginx-functionality-groups.png create mode 100644 docs/proposals/nginx-extensions.md diff --git a/docs/images/hierarchy.png b/docs/images/hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..d49aca85504e2dfc7270e6cf1d457ee905f88a2e GIT binary patch literal 109568 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

Kv750JT?EgHSSB7K{Wy(4A;!Y^N{}R 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%0Drlx}T5k^5(7MgWO~AIT$b?+H;@mWhPbqC1>69 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 }~+HnqH56{s;41;qFu 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 AxBvhE literal 0 HcmV?d00001 diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md new file mode 100644 index 000000000..de37d29a5 --- /dev/null +++ b/docs/proposals/nginx-extensions.md @@ -0,0 +1,816 @@ + +# Enhancement Proposal #1411: Extensions for NGINX Features + +- Issue: #1411 +- Status: Provisional + +## Summary + +NGINX is highly configurable and offers rich features that can benefit our users. We want to expose this native NGINX configuration to our users through Gateway API extension points -- such as Policies and Filters. This Enhancement Proposal aims to identify the set of NGINX directives and parameters we will expose first, group them according to Gateway API role(s), NGINX contexts, and use cases, and propose the type of extension point for each group. + +## Goals + +- Identify the set of NGINX features to deliver to users. +- Group these features to reduce the number of APIs and improve user experience. +- For each group, identify the type of Gateway API extension to use and the applicable Gateway API role(s). + +## Non-Goals + +- Design the API of every extension. This design work will be completed for each extension before implementation. +- Design an API that will allow the user to insert raw NGINX config into the NGINX config that NGINX Gateway Fabric generates (e.g. [snippets in NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-snippets/)). + +## Gateway API Extension Points + +The Gateway API provides many extension points that implementations can leverage to deliver features that a general-purpose API cannot address. This section provides a summary of these extension points. + +### GatewayClass Parameters Ref + +**Role(s)**: Infrastructure Provider +**Resource(s)**: GatewayClass +**Status**: Completed +**Channel**: Standard +**Conformance Level**: Implementation-specific +**Example(s)**: [EnvoyProxy CRD](https://gateway.envoyproxy.io/v0.6.0/user/customize-envoyproxy/) + +First-class API field on the `GatewayClass.spec`. The field refers to a resource containing the configuration parameters corresponding to the GatewayClass. The resource referenced can be a standard Kubernetes resource, a CRD, or a ConfigMap. While GatewayClasses are cluster-scoped, resources referenced by `GatewayClass.spec.parametersRef` can be namespaced-scoped or cluster-scoped. The configuration parameters contained in the referenced resource are applied to all Gateways attached to the GatewayClass. + +Example: + +```yaml +kind: GatewayClass +metadata: + name: internet +spec: + controllerName: "example.net/gateway-controller" + parametersRef: + group: example.net/v1alpha1 + kind: Config + name: internet-gateway-config +--- +apiVersion: example.net/v1alpha1 +kind: Config +metadata: + name: internet-gateway-config +spec: + ip-address-pool: internet-vips +``` + +#### Issues with `parametersRef` + +[GEP-1867](https://gateway-api.sigs.k8s.io/geps/gep-1867/) raises the following operational challenges with `parameterRefs`: + +1. _Permissions_: To make declarative changes to a Gateway, the Gateway owner (who has RBAC permissions to a specific Gateway) must have access to GatewayClass, a cluster-scoped resource. +2. _Scope_: If a change is made on a GatewayClass, _all_ Gateways are affected by that change. This will become an issue once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/1443). +3. _Dynamic Changes_: GatewayClasses are meant to be templates, so changes made to the GatewayClass are not expected to change deployed Gateways. This means the configuration is not dynamic. + +### Infrastructure API + +**Role(s)**: Cluster Operator, and Infrastructure Provider +**Resource(s)**: Gateway, GatewayClass (planned) +**Status**: Experimental +**Channel**: Experimental +**Conformance Level**: Core + +First-class infrastructure API on Gateway and GatewayClass. Several GEPs are related to this API: [GEP-1867](https://gateway-api.sigs.k8s.io/geps/gep-1867/), [GEP-1762](https://gateway-api.sigs.k8s.io/geps/gep-1762/), and [GEP-1651](https://gateway-api.sigs.k8s.io/geps/gep-1651/). + +Gateways represent a piece of infrastructure that often needs vendor-specific config (e.g., size or version of the infrastructure to provide). The goal of the infrastructure API is to provide a way to define both implementation-specific and standard attributes on a _specific_ Gateway. + +So far, the infrastructure API has been implemented on the Gateway, and there are only two fields: `annotations` and `labels`: + +```yaml +apiVersion: gateway.networking.k8s.io/v1beta1 +kind: Gateway +metadata: + name: my-gateway +spec: + infrastructure: + labels: + foo: bar + annotations: + name: my-annotation +``` + +Infrastructure labels and annotations should be applied to any resources created in response to the Gateway. This only applies to _automated deployments_ (i.e., provisioner mode), implementations that automatically deploy the data plane based on a Gateway. +Other use cases for this API are Service type, Service IP, CPU memory requests, affinity rules, and Gateway routability (public, private, and cluster). + +There are plans to add a `parametersRef` field to the infrastructure API on the Gateway. This field would function similarly to the GatewayClass `parametersRef` but would not have the same issues highlighted in the section above. + +### TLS Options + +**Role(s)**: Cluster Operator +**Resource(s)**: Gateway +**Status**: Completed +**Channel**: Standard +**Conformance Level**: Implementation-specific +**Example(s)**: [GKE pre-shared certs](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-listeners-tls-options) + +TLS options are a list of key/value pairs to enable extended TLS configuration for an implementation. This field is part of the [GatewayTLSConfig](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.GatewayTLSConfig) defined on a Gateway Listener. Currently, there are no standard keys for TLS options, but the API may define a set of standard keys in the future. + +Possible use cases: minimum TLS version and supported cipher suites. + +Example: + +```yaml +apiVersion: gateway.networking.k8s.io/v1beta1 +kind: Gateway +metadata: + name: my-gateway +spec: + listeners: + - name: https + port: 443 + protocol: HTTPS + tls: + mode: Terminate + certificateRefs: + - kind: Secret + name: my-secret + namespace: certificate + options: + example.com/my-custom-option: custom-value +``` + +### Filters + +**Role(s)**: Application Developer +**Resource(s)**: HTTPRoute, GRPCRoute +**Status**: Completed +**Channel**: Standard +**Conformance Level**: Implementation-specific +**Example(s)**: [Easegress Filters](https://megaease.com/blog/2023/12/05/enhancing-k8s-gateway-api-with-easegress-without-changing-a-single-line-of-code/). + +Filters define processing steps that must be completed during the request or response lifecycle. They can be applied on the `route.rule` or the `route.rule.backendRef`. If applied on the `backendRef`, the filter should be executed if and only if the request is being forwarded. + +Possible use cases: request/response modification, authentication, rate-limiting, and traffic shaping. + +Example: + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: custom +spec: + hostnames: + - "example.com" + rules: + - matches: + - path: + type: PathPrefix + value: / + filters: + - type: ExtensionRef + extensionRef: + group: my.group.io + kind: MyCustomFilter + name: example + backendRefs: + - name: backend + port: 80 +--- +apiVersion: example.com/v1alpha1 +kind: MyCustomFilter +metadata: + name: example +spec: + // some values here that are applied during the request/response lifecycle +``` + +### BackendRef + +**Role(s)**: Application Developer +**Resource(s)**: xRoute +**Status**: Completed +**Channel**: Standard +**Conformance Level**: Implementation-specific +**Example(s)**: [ServiceImport GKE](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-rules-backendrefs), [ServiceImport Envoy Gateway](https://gateway.envoyproxy.io/v0.6.0/user/multicluster-service/). + +BackendRefs defines the backend(s) where matching requests should be sent. The Gateway API supports BackendRefs of type Kubernetes Service. An implementation can add support for other types of backends. This extension point should be used for forwarding traffic to network endpoints other than Kubernetes Services. + +Possible use cases: S3 bucket, lambda function, file-server. + +Example: + +```yaml +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: custom-backend +spec: + hostnames: + - "example.com" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - group: my.group.io + kind: MyKind + name: backend + port: 80 +``` + +### Policy + +**Role(s)**: All roles +**Resource(s)**: All resources +**Status**: Experimental +**Channel**: Experimental +**Conformance Level**: Extended/Implementation-specific +**Example(s)**: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) + +Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. Policies can use the `sectioName` field of the `TargetRef` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. + +Policies do not need to support attaching to all resource Kinds. Implementations can choose which resources the Policy can be attached to. + +#### 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 only modifies the behavior of the object that it's bound to. + +Example: + +```yaml +apiVersion: gateway.networking.k8s.io/v1alpha2 +kind: BackendTLSPolicy +metadata: + name: backend-tls +spec: + targetRef: + group: '' # + kind: Service + name: secure-app + namespace: default + tls: + caCertRefs: + - name: backend-cert + group: '' # Empty string means core - this is a standard convention + kind: ConfigMap + hostname: secure-app.example.com +``` + +This BackendTLSPolicy is an example of a Direct Policy Attachment. It targets the `secure-app` Service in the `default` Namespace. The TLS configuration in the `backend-tls` Policy will be applied for all Routes that reference the `secure-app` Service. + +When to use Direct Policy Attachment: + +- The number or scope of objects that need to be modified is _limited_ or _singular_. +- No transitive information. The modifications only affect the single object that the Policy is bound to. +- The status should be reasonably easy to set in 1-2 Conditions. +- SHOULD only be used to target objects in the same Namespace as the Policy. + +Direct Policy Attachment is simple. A Policy references the resource it wants to apply to. Access is granted with RBAC; anyone who has access to the Policy in the given Namespace can attach it to any resource within that Namespace. + +The Policy defines which resource Kinds it can be attached to. + +#### Inherited Policy Attachment + +Inherited Policy Attachment is designed to allow settings to flow down a hierarchy. Inherited Policies must have the following fields in their specs: + +- `defaults`: set the default value. Can be overridden by _lower_ objects. + Ex. A connection timeout default policy on a Gateway may be overridden by a connection timeout policy on an HTTPRoute. +- `overrides`: cannot be overridden by _lower_ objects. + Ex. Setting a max client timeout to some non-infinite value at the Gateway to stop HTTPRoute owners from leaking connections over time. + +When to use an Inherited Policy: + +- The settings are bound to one object but affect other objects attached to it. For example, it affects HTTPRoutes attached to a single Gateway. +- The settings need to be able to be defaulted but can be overridden on a per-object basis. +- The settings must be enforced by one persona and not modifiable or removable by a lesser-privileged persona. +- Reporting (in terms of status), if the Policy is attached, is easy, but reporting what resources the Policy is being applied to is not and will require careful design. + +Example: + +```yaml +kind: CDNCachingPolicy +metadata: + name: gw-policy +spec: + override: + cdn: + enabled: true + default: + cdn: + cachePolicy: + includeHost: true + includeProtocol: true + includeQueryString: true + targetRef: + kind: Gateway + name: example +--- +kind: CDNCachingPolicy +metadata: + name: route-policy +spec: + default: + cdn: + cachePolicy: + includeQueryString: false + targetRef: + kind: HTTPRoute + name: example +``` + +The Policy attached to the Gateway has the following effects: + +- It _requires_ cdn to be enabled for all routes connected to the Gateway. This setting can not be overridden by the CDNCachingPolicy attached to the HTTPRoute. +- It provides a default configuration for the cdn. These settings _can_ be overridden by the CDNCachingPolicy attached to the HTTPRoute. + +The policy attached to the HTTPRoute changes the value of `cdn.cachePolicy.includeQueryString`. All other default cdn configuration set on the Gateway policy remain unchanged. The effective policy on the HTTPRoute is: + +```yaml +cdn: + enabled: true + cachePolicy: + includeHost: true + includeProtocol: true + includeQueryString: false +``` + +##### Hierarchy + +The following image depicts the hierarchy of `defaults` and `overrides`: + +![hierarchy](/docs/images/hierarchy.png) + +Override values are given precedence from the top down. An override value attached to a GatewayClass will have the highest precedence overall. A lower object cannot override it. This provides users with a mechanism to enforce/require settings. + +Default values are given precedence from the bottom up. A default attached to a Backend will have the highest precedence among _default_ values. + +Inherited Policies do not need to support policy attachment to each resource shown in the hierarchy. Implementations can choose which resources the Policy can attach to. + +#### Challenges of Policy Attachment + +_Status and the Discoverability problem_ + +Policy Attachment adds a new persona -- Policy Admin, whose responsibilities cut across all levels of the Gateway API. The Policy Admins actions need to be discoverable by all other Gateway API personas. For example, the Application Developer needs to be able to look at their routes and know what Policy settings are applied to them. The Cluster Operator needs to be able to determine the set of objects affected by a Policy so they can diagnose and fix cluster-wide issues. Finally, the Policy Admin needs to be able to validate their Policies and understand where the Policies are applied and what the effects are. + +Ideally, implementations can write the complete resultant set of Policy available in the status of objects that the Policy affects. Unfortunately, this introduces a new set of challenges around writing status, which include status getting too large, the difficulty of building a common data representation for Policy, and the fan-out problem where updating one Policy object could trigger a waterfall of status updates for all affected objects. + +[The Metaresources and Policy Attachment GEP](https://gateway-api.sigs.k8s.io/geps/gep-713/#solution-cookbook) proposes a range of solutions that help address this problem but does not eliminate it. + +_Hard to implement_ + +Policies are complex to implement because they can affect many objects in various ways -- i.e., all objects in a Namespace or all Routes attached to a Gateway. Inherited Policies introduce more complexity through the hierarchical nature of overrides and defaults. Computing the effective set of policy for a given object can be computationally challenging. In addition, we will need to define how different Policy types interact. + +_Subject to change_ + +The Metaresources and Policy Attachment GEP is experimental. There's no guarantee that Policy Attachment will stay the same as the Gateway API receives feedback from implementors on the feasibility of Policies. + +## Prioritized NGINX Features + +To identify the set of NGINX directives and parameters NGINX Gateway Fabric should implement first, we first identified the highest priority features using the following criteria: + +1. Customer requested features. +2. Most popular features of the NGINX Ingress Controller. +3. Features without active Gateway Enhancement Proposals (GEPs). + +From this list of features, we prioritized them into four categories: high-priority, medium-priority, low-priority, and active GEPs. + +### High-Priority Features + +| Features | Requires NGINX Plus | +|--------------------------------------------------------------------------------------------------|---------------------| +| Log level and format | | +| Passive health checks | | +| Slow start. Prevent a recently recovered server from being overwhelmed on connections by restart | X | +| Active health checks | X | +| JSON Web Token (JWT) authentication | X | +| OpenID Connect (OIDC) authentication. Allow users to authenticate with single-sign-on (SSO) | X | +| Customize client settings. For example, `client_max_body_size` | | +| Upstream keepalives | | +| Client keepalives | | +| TLS settings. For example, TLS protocols and server ciphers | | +| OpenTelemetry tracing | | + +### Medium-Priority Features + +| Features | Requires NGINX Plus | +|----------------------------------------------------------------------------------------|---------------------| +| Circuit breaker | | +| Load-balancing method | | +| Load-balancing method (least time) | X | +| Limit connections to a server | | +| Request queuing. Queue requests if servers are unavailable | X | +| Basic authentication. User/Password | | +| PROXY protocol | | +| Upstream zone size | | +| Custom response. Return a custom response for a given path | | +| External routing. Route to services outside the cluster | | +| HTTP Strict Transport Security (HSTS) | | +| API Key authentication | | +| Next upstream retries. NGINX retries by trying the _next_ server in the upstream group | | +| Proxy Buffering | | +| Connection timeouts | | + +### Low-Priority Features + +| Features | Requires NGINX Plus | +|--------------------------------------------|---------------------| +| Pass/hide headers to/from the client | | +| Custom error pages | | +| Access control | | +| Windows Technology LAN Manager (NTLM) | X | +| Backend client certificate verification | | +| NGINX worker settings | | +| HTTP/2 client requests | | +| Set server name size | | +| JSON Web Token (JWT) content-based routing | X | +| QUIC/HTTP3 | | +| Remote authentication request | | +| Timeout for unresponsive clients | | + +### Features with Active Gateway API Enhancement Proposals (GEPs) + +The status field in the table describes the status of the GEP using the following terms: + +- Experimental: GEP is implemented and in the experimental channel. +- Provisional: GEP is written but has yet to be implemented. +- Open: An issue exists, but a GEP still needs to be written. + +| Functionality | Status | GEP/Issue | +|-----------------------------------------------|--------------|--------------------------------------------------------------------------| +| Per-request timeouts | Experimental | [GEP-1742](https://gateway-api.sigs.k8s.io/geps/gep-1742/) | +| Retries. This is different from NGINX retries | Open | [GEP-1731](https://github.com/kubernetes-sigs/gateway-api/issues/1731) | +| Session persistence | Provisional | [GEP-1619](https://gateway-api.sigs.k8s.io/geps/gep-1619/) | +| Rate-limiting | Open | [Issue 326](https://github.com/kubernetes-sigs/gateway-api/issues/326) | +| Cross-Origin Resource Sharing (CORS) | Open | [Issue 1767](https://github.com/kubernetes-sigs/gateway-api/issues/1767) | +| Gateway client certificate verification | Provisional | [GEP-91](https://gateway-api.sigs.k8s.io/geps/gep-91/) | +| Authentication | Open | [Issue 1494](https://github.com/kubernetes-sigs/gateway-api/issues/1494) | + +## Grouping the Features + +To reduce the number of CRDs NGINX Gateway Fabric must maintain and users have to create, we grouped the high and medium-priority features into configuration categories. Once the features are grouped, we can begin implementation by focusing on the high-priority features of each group. Then, once the high-priority features are complete, we can move on to the medium-priority features. The low-priority features are out of scope for the rest of the Enhancement Proposal but may be revisited once we make progress on the higher-priority features. In addition, most features with active GEPs are not included in the groups as we want to help move the GEPs forward toward standardization instead of creating our bespoke solutions. + +When grouping the features, we considered the following factors: + +1. Use cases. Are there features that can be grouped by the use case they satisfy? For example, authentication or observability. +2. Gateway API roles. Which features are the domain of the Cluster Operator? Which features are Application Developers responsible for? +3. The NGINX contexts. Which contexts are the NGINX directives available in? For example, http, server, location, upstream, etc. + +The following picture shows the nine groups we came up with: + +![groups](/docs/images/nginx-functionality-groups.png) + +## API + +The following section proposes an extension type (Policy, Filter, etc.), extension point (GatewayClass, HTTPRoute, etc.), and Gateway API role for all the groups of features. The goal of this Enhancement Proposal is not to design each extension but to propose a strategy for delivering critical NGINX features to our customers. + +### Gateway Settings + +**Extension type:** ParametersRef +**Resource type:** CRD +**Role(s):** Cluster Operator +**Attaches to:** GatewayClass or Gateway +**NGINX Context(s):** main, http, stream + +Features: + +- Error log level +- Access log settings: format and disable +- PROXY protocol +- OTEL Tracing: global settings such as exporter configuration and global enable/disable. +- External Routing: enable/disable routing to ExternalName Services and set DNS resolver addresses. + +NGINX directives: + +- [`proxy_protocol`](https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_protocol) +- [`access_log`](https://nginx.org/en/docs/http/ngx_http_log_module.html#access_log) +- [`error_log`](https://nginx.org/en/docs/ngx_core_module.html#error_log) +- [`log_format`](https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) +- [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_exporter) +- [`otel_service_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_service_name) +- [`otel_trace`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) +- [`resolver`](https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) + + +These features are grouped because they are all the responsibility of the Cluster Operator and should not be set or changed by Application Developers. + +Currently, `parametersRef` is only available on the GatewayClass, which means all Gateways attached to the GatewayClass will inherit these settings. This is acceptable since NGINX Gateway Fabric supports a single Gateway per GatewayClass. However, once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/144) and `parametersRef` is added to the Gateway Infrastructure API, then we will want to support referencing this CRD on individual Gateways. + +#### Future Work + +Add support for: + +- Stream access log settings: format and disable +- Worker settings: number of worker processes, connections, etc. +- Resolver settings: timeout, ipv6 on/off, cache timeout, etc. + +#### Alternatives + +- ParametersRef with ConfigMap: A ConfigMap is another resource type where a user can provide configuration options. However, unlike CRDs, ConfigMaps do not have built-in schema validation, versioning, or conversion webhooks. +- Direct Policy: A Direct Policy may also work for Gateway Settings. It can be attached to a Gateway and scoped to Cluster Operators through RBAC. However, `parametersRef` provides better visibility as it is directly referenced in the Gateway resource and will be easier to manage. + +### Response Modification + +**Extension type:** Filter +**Resource type:** CRD +**Role(s):** Application Developer +**Attaches to:** HTTPRoute +**NGINX Context(s):** location + +Features: + +- Custom Responses. Return a preconfigured response. + +NGINX directives: + +- [`return`](https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return) + +#### Future Work + +- We could contribute this filter to the Gateway API if it is portable among enough implementations. +- Allow attaching to GRPCRouteRule once we add support for GRPCRoutes. + +#### Alternatives + +- Pursue standardization in Gateway API through the GEP process before implementing our API. While it's possible the Gateway API would accept a GEP for this Filter, it will take a significant amount of time and is not guaranteed. After implementing it ourselves, we can always contribute this Filter back to the API. + +### TLS Settings + +**Extension type:** TLS Options +**Resource type:** N/A. We will need to document supported key-values. +**Role(s):** Cluster Operator +**Attaches to:** Gateway +**NGINX Context(s):** server + +Features: + +- TLS Settings: SSL protocols, preferred ciphers, DH parameters file +- HSTS + +NGINX Directives: + +- [ssl_protocols](https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_protocols) +- [ssl_prefer_server_ciphers](https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_prefer_server_ciphers) +- [ssl_dhparam](https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_dhparam) +- [add_header](https://nginx.org/en/docs/http/ngx_http_headers_module.html) + +These features are grouped because they are all TLS-related settings. TLS options are a good fit because they allow configuring these settings for Gateway Listeners and are restricted to the Cluster Operator role. + +#### Future Work + +- Contribute back to Gateway API by standardizing the keys. + +#### Alternatives + +- Policy: A TLS or Security Policy that attaches to Gateway listeners may also work. However, that would involve maintaining an additional CRD, whereas with TLS options, we only need to document and validate a few key-value pairs. +- ParametersRef: While ParametersRef is also scoped to the ClusterOperator, it applies to all Gateways attached to the GatewayClass. Gateways can have multiple listeners with different protocols, and the TLS settings may not apply to all listeners. In addition, ClusterOperators may want to enforce different TLS settings for different TLS listeners. + +### Client Settings + +**Extension type:** Inherited Policy +**Resource type:** CRD +**Role(s):** Cluster Operator +**Attaches to:** Gateway, Gateway Listener, HTTPRoute +**NGINX context(s)**: http, server, location + +Features: + +- Client max body size +- Client keepalive + +NGINX directives: + +- [`client_max_body_size`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size): http, server, location +- [`client_body_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout): http, server, location +- [`keepalive_requests`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests): http, server, location +- [`keepalive_time`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time): http, server, location +- [`keepalive_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout): http, server, location +- [`keepalive_disable`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_disable): http, server, location + +These features are grouped because they all deal with client traffic. An Inherited Policy fits this group best because there is a use case where the ClusterOperator sets a sane default for client max body size or client keepalives that has to be overridden by an Application Developer because of the unique attributes of the service they own. + +#### Future Work + +- Can add support for more `client_*` directives: `client_body_buffer_size`, `client_header_buffer_size`, etc. + +#### Alternatives + +- Direct Policy: A Direct Policy isn't a good fit for client settings because it does not support overrides and defaults. + +### Upstream Settings + +**Extension type:** Direct Policy +**Resource type:** CRD +**Role(s):** Application Developer +**Attaches to:** Backend +**NGINX Context(s):** upstream, location (for active health checks) + +OSS Features: + +- Upstream zone size +- Upstream keepalives +- Load-balancing method (all except `least_time`) +- Limit connections to server +- Passive health checks + +OSS NGINX directives/parameters: + +- [`zone`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#zone) +- [`keepalive`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive) +- [`keepalive_requests`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive_requests) +- [`keepalive_time`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive_time) +- [`keepalive_timeout`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive_timeout) +- [`ip_hash`, `least_conn`, `random`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash) +- [`max_conns`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +- [`fail_timeout`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +- [`max_fails`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) + +NGINX Plus Features: + +- Request queueing +- Slow start +- Active health checks +- Load-balancing method (`least_time`) + +NGINX Plus directives/parameters: + +- [`slow_start`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +- [`queue`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#queue) +- [`health_check`](https://nginx.org/en/docs/http/ngx_http_upstream_hc_module.html#health_check) +- [`least_time`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash) + +These features are grouped because they all apply to the upstream context and make sense when attached to a Backend. + +#### Alternatives + +- Split out health checks into a separate Policy: The upstream settings group is large and could be split into two Policies based on use cases. However, we want to limit the number of CRDs we maintain and reduce the overlap between CRDs. Two Policies that set similar directives and parameters in the upstream context could be complex to implement. + +### Authentication + +**Extension type:** Inherited Policy +**Resource type:** CRD +**Role(s):** Cluster Operator, Application Developer +**Attaches to:** Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) +**NGINX context(s):** http, server, location + +OSS Features: + +- Basic Authentication (User/Password) +- API Key Authentication + +OSS NGINX directives: + +- [`auth_basic`](https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html#auth_basic) +- [`auth_basic_user_file`](https://nginx.org/en/docs/http/ngx_http_auth_basic_module.html#auth_basic_user_file) + +NGINX Plus Features: + +- JSON Web Token (JWT) Authentication +- OIDC Authentication + +NGINX Plus directives: + +- [`auth_jwt`](https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html#auth_jwt) +- [`auth_jwt_type`](https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html#auth_jwt_type) +- [`auth_jwt_key_file`](https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html#auth_jwt_key_file) +- [`auth_jwt_key_request`](https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html#auth_jwt_key_request) + +#### Future Work + +- Add support for remote authentication or other authentication strategies. + +#### Alternatives + +- Begin with a Filter: Rather than beginning with an Inherited Policy, which is complex, we could start by adding an authentication Filter. This would allow us to roll out an authentication solution quickly to support the core use case for Application Developers. The use case for Cluster Operators applying authentication Policies is less well-known than the Application Developer's use case. Instead of leading with the Cluster Operator use case, we can begin with a Filter and wait for user feedback. Later, we can add a Policy and define how the Filter and Policy interact. +- Wait for Gateway API GEP on authentication: There is an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/1494) for authentication in the Gateway API repository. Instead of rolling out our own authentication solution, we could wait or even champion this GEP. The advantages of waiting are that if the GEP is implemented, we won't have to deprecate our bespoke authentication Policy in favor of the GEP's implementation, and we won't have to maintain an additional Policy. However, we don't know how long it will take the GEP to move from open to implementable. Authentication is a critical feature, and it may not be prudent to wait. + +### Observability + +**Extension type:** Direct Policy +**Resource type:** CRD +**Role(s):** Application Developer +**Attaches to:** HTTPRoute, HTTPRoute rule +**NGINX context(s):** http, server, location + +Features: + +- OTEL Tracing: enable/disable by Route or routing rule. Set span name, attributes, and context. + +NGINX directives: + +- [`otel_trace`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) +- [`otel_trace_context`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace_context) +- [`otel_span_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_name) +- [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr) + +### Future Work + +Add support for: + +- OTEL logging +- Metrics + +#### Alternatives + +- Combine with OTEL settings in Gateway Settings for one OTEL Policy: Rather than splitting tracing across two Policies, we could create a single tracing Policy. The issue with this approach is that some tracing settings -- such as exporter endpoint -- should be restricted to Cluster Operators, while settings like attributes should be available to Application Developers. If we combine these settings, RBAC will not be sufficient to restrict access across the settings. We will have to disallow certain fields based on the resource the Policy is attached to. This is a bad user experience. +- Inherited Policy: An Inherited Policy would be useful if there is a use case for the Cluster Operator enforcing or defaulting the OTEL tracing settings included in this policy. + +### Proxy Settings + +**Extension type:** Inherited Policy +**Resource type:** CRD +**Role(s):** Cluster Operator, Application Developer +**Attaches to:** Gateway, HTTPRoute, HTTPRoute Rule +**NGINX context(s):** http, server, location + +Features: + +- Proxy buffering +- Connection timeouts +- Next upstream retries + +NGINX directives: + +- [`proxy_connect_timeout`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_connect_timeout) +- [`proxy_read_timeout`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout) +- [`proxy_send_timeout`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_send_timeout) +- [`proxy_next_upstream`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream) +- [`proxy_next_upstream_timeout`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream_timeout) +- [`proxy_next_upstream_retries`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream_tries) +- [`proxy_buffering`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering) + +#### Future Work + +- Add other `proxy_*` directives + +#### Alternatives + +- Direct Policy: If there's no strong use case for the Cluster Operator setting sane defaults for these settings, then we can use a Direct Policy. The Direct Policy could attach to an HTTPRoute or HTTPRoute Rule, and the NGINX contexts would be server and location. + +### Circuit Breaker/ Backup service + +**Extension type:** Direct Policy/Filter +**Resource type:** CRD +**Role(s):** Application Developer +**Attaches to:** Backend/HTTPRoute Rule +**NGINX context(s):** upstream + +Features: + +- Backup service/circuit breaker + +NGINX upstream server parameters: + +- [`backup`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +- [`fail_timeout`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +- [`max_fails`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) + +This [NGINX blog post](https://www.nginx.com/blog/microservices-reference-architecture-nginx-circuit-breaker-pattern/) describes the circuit breaker pattern and how to implement it with NGINX plus. The solution involves active health checks, rate-limiting, caching, and the `backup` directive. While this might be a complete solution, it is likely too heavyweight for NGINX Gateway Fabric. + +The NGINX Kubernetes projects, NGINX Service Mesh and NGINX Ingress Controller offer two alternatives to circuit breaker. + +NGINX Ingress Controller supports setting a [backup Service](https://github.com/nginxinc/kubernetes-ingress/tree/release-3.4/examples/custom-resources/backup-directive/virtual-server) that will be used when the primary servers are unavailable. The backup service must be of type ExternalName. + +NGINX Service Mesh implements circuit breaking with the following [CRD](https://github.com/nginxinc/nginx-service-mesh/blob/main/pkg/apis/specs/v1alpha1/circuit_breaker.go): + +```yaml +apiVersion: specs.smi.nginx.com/v1alpha1 +kind: CircuitBreaker +metadata: + name: circuit-breaker-example + namespace: default +spec: + destination: + kind: Service + name: target-svc + namespace: default + errors: 3 + timeoutSeconds: 30 + fallback: + service: default/target-backup + port: 80 +``` + +The `spec.destination` field is similar to `targetRef` in that it attaches the CircuitBreaker setting to an object. This example configures a circuit breaker that will trip when there are three errors within 30 seconds. If the circuit breaker trips, requests to the destination Service will be routed to the fallback Service. After 30 seconds, the circuit breaker will reset, and the requests will be routed to the destination Service again. This implementation uses the NGINX `max_fails`, `fail_timeout`, and `backup` upstream server parameters. + +NGINX Gateway Fabric could choose one of these approaches or design something new. It's difficult to propose an extension type for circuit breaker without more discussion and design. A Direct Policy that attaches to Backends or an HTTPRoute Filter could both work. Which one we choose will depend on the design of the circuit breaker and whether circuit breakers should be applied per Backend or Route. + +#### Alternatives + +- Include in the Upstream Settings Policy: The `fail_timeout` and `max_fails` directives are also used in passive health checks, which is a part of the Upstream Settings Policy. Including circuit breaking -- or just the `backup` directive -- might make more sense in this Policy. + +## Testing + +Each extension will be tested with a combination of unit and system tests. The details of the tests are out of scope for this Enhancement Proposal. + +## Security Considerations + +Each extension will need validation to prevent malicious or invalid NGINX configuration. The details of this validation are outside the scope of this Enhancement Proposal. + +## Alternatives Considered + +- Data Plane CRD or ConfigMap: Rather than adding nine different extensions APIs, we could add a single data plane CRD or ConfigMap that contains all the NGINX features described in this proposal. This would allow us to quickly expose NGINX functionality to the user and simplify our API. However, this object would become large and unfocused, a laundry list of NGINX directives and parameters. Additionally, with a single resource, there's no way to restrict access to certain fields with RBAC, which doesn't fit well with the role-based nature of the Gateway API. +- Add support for NGINX configuration injection: Adding nine extension APIs will take time. If we first add support for the injection of any NGINX configuration (see NGINX Ingress Controller [snippets](https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-snippets/) and [templates](https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/custom-templates/) for examples), then we would immediately support all the NGINX functionality included in this proposal. However, this feature comes with a couple of problems: + + 1. Security. The configuration cannot be validated before it is applied. This means that invalid or even malicious configuration can be injected. As a result, not every Cluster Operator would want this functionality turned on. So, for some users, this functionality would not be available. + 2. Requires NGINX knowledge. Without a first-class API exposing and abstracting away NGINX configuration, the users must be knowledgeable about NGINX. This will be great for NGINX power users but much more complicated for those unfamiliar with NGINX. + 3. Lack of status. No helpful status is set, and users must parse NGINX error messages—potential for frustration and bad user experiences. + Problems aside, this feature will still be useful for our users and is something we should implement. Still, it does not eliminate the need for the extension APIs proposed in this document and should not be a higher priority. + +## References + +- [Policy and Metaresources GEP](https://gateway-api.sigs.k8s.io/geps/gep-713/) +- [Gateway API Extension Points](https://gateway-api.sigs.k8s.io/concepts/api-overview/?h=extension#extension-points) +- [TLS Extensions](https://gateway-api.sigs.k8s.io/guides/tls/?h=extensions#extensions) From b70da0ee4c2baebf6403e4f1f32496552c1ae69d Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:39:49 -0700 Subject: [PATCH 02/33] Change issue number --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index de37d29a5..d0bb519b7 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -1,7 +1,7 @@ # Enhancement Proposal #1411: Extensions for NGINX Features -- Issue: #1411 +- Issue: #1566 - Status: Provisional ## Summary From cc006a51dcc2bbc1941412540e279e05af61f4a5 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:42:16 -0700 Subject: [PATCH 03/33] Add table of contents --- docs/proposals/nginx-extensions.md | 58 ++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index d0bb519b7..5d1fc7a19 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -8,6 +8,64 @@ NGINX is highly configurable and offers rich features that can benefit our users. We want to expose this native NGINX configuration to our users through Gateway API extension points -- such as Policies and Filters. This Enhancement Proposal aims to identify the set of NGINX directives and parameters we will expose first, group them according to Gateway API role(s), NGINX contexts, and use cases, and propose the type of extension point for each group. +## Table of Contents + + +* [Enhancement Proposal #1411: Extensions for NGINX Features](#enhancement-proposal-1411--extensions-for-nginx-features) + * [Summary](#summary) + * [Table of Contents](#table-of-contents) + * [Goals](#goals) + * [Non-Goals](#non-goals) + * [Gateway API Extension Points](#gateway-api-extension-points) + * [GatewayClass Parameters Ref](#gatewayclass-parameters-ref) + * [Issues with `parametersRef`](#issues-with-parametersref) + * [Infrastructure API](#infrastructure-api) + * [TLS Options](#tls-options) + * [Filters](#filters) + * [BackendRef](#backendref) + * [Policy](#policy) + * [Direct Policy Attachment](#direct-policy-attachment) + * [Inherited Policy Attachment](#inherited-policy-attachment) + * [Hierarchy](#hierarchy) + * [Challenges of Policy Attachment](#challenges-of-policy-attachment) + * [Prioritized NGINX Features](#prioritized-nginx-features) + * [High-Priority Features](#high-priority-features) + * [Medium-Priority Features](#medium-priority-features) + * [Low-Priority Features](#low-priority-features) + * [Features with Active Gateway API Enhancement Proposals (GEPs)](#features-with-active-gateway-api-enhancement-proposals--geps-) + * [Grouping the Features](#grouping-the-features) + * [API](#api) + * [Gateway Settings](#gateway-settings) + * [Future Work](#future-work) + * [Alternatives](#alternatives) + * [Response Modification](#response-modification) + * [Future Work](#future-work-1) + * [Alternatives](#alternatives-1) + * [TLS Settings](#tls-settings) + * [Future Work](#future-work-2) + * [Alternatives](#alternatives-2) + * [Client Settings](#client-settings) + * [Future Work](#future-work-3) + * [Alternatives](#alternatives-3) + * [Upstream Settings](#upstream-settings) + * [Alternatives](#alternatives-4) + * [Authentication](#authentication) + * [Future Work](#future-work-4) + * [Alternatives](#alternatives-5) + * [Observability](#observability) + * [Future Work](#future-work-5) + * [Alternatives](#alternatives-6) + * [Proxy Settings](#proxy-settings) + * [Future Work](#future-work-6) + * [Alternatives](#alternatives-7) + * [Circuit Breaker/ Backup service](#circuit-breaker-backup-service) + * [Alternatives](#alternatives-8) + * [Testing](#testing) + * [Security Considerations](#security-considerations) + * [Alternatives Considered](#alternatives-considered) + * [References](#references) + + ## Goals - Identify the set of NGINX features to deliver to users. From 4d5575c93ca2a30dedc295446d9ab629438f749c Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:46:37 -0700 Subject: [PATCH 04/33] Fix spacing --- docs/proposals/nginx-extensions.md | 69 +++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 5d1fc7a19..d68beef5e 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -77,17 +77,22 @@ NGINX is highly configurable and offers rich features that can benefit our users - Design the API of every extension. This design work will be completed for each extension before implementation. - Design an API that will allow the user to insert raw NGINX config into the NGINX config that NGINX Gateway Fabric generates (e.g. [snippets in NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-snippets/)). -## Gateway API Extension Points +## Gateway API Extension -The Gateway API provides many extension points that implementations can leverage to deliver features that a general-purpose API cannot address. This section provides a summary of these extension points. +The Gateway API provides many extension that implementations can leverage to deliver features that the general-purpose API cannot address. This section provides a summary of these extension. ### GatewayClass Parameters Ref **Role(s)**: Infrastructure Provider + **Resource(s)**: GatewayClass + **Status**: Completed + **Channel**: Standard + **Conformance Level**: Implementation-specific + **Example(s)**: [EnvoyProxy CRD](https://gateway.envoyproxy.io/v0.6.0/user/customize-envoyproxy/) First-class API field on the `GatewayClass.spec`. The field refers to a resource containing the configuration parameters corresponding to the GatewayClass. The resource referenced can be a standard Kubernetes resource, a CRD, or a ConfigMap. While GatewayClasses are cluster-scoped, resources referenced by `GatewayClass.spec.parametersRef` can be namespaced-scoped or cluster-scoped. The configuration parameters contained in the referenced resource are applied to all Gateways attached to the GatewayClass. @@ -124,9 +129,13 @@ spec: ### Infrastructure API **Role(s)**: Cluster Operator, and Infrastructure Provider + **Resource(s)**: Gateway, GatewayClass (planned) + **Status**: Experimental + **Channel**: Experimental + **Conformance Level**: Core First-class infrastructure API on Gateway and GatewayClass. Several GEPs are related to this API: [GEP-1867](https://gateway-api.sigs.k8s.io/geps/gep-1867/), [GEP-1762](https://gateway-api.sigs.k8s.io/geps/gep-1762/), and [GEP-1651](https://gateway-api.sigs.k8s.io/geps/gep-1651/). @@ -156,10 +165,15 @@ There are plans to add a `parametersRef` field to the infrastructure API on the ### TLS Options **Role(s)**: Cluster Operator + **Resource(s)**: Gateway + **Status**: Completed + **Channel**: Standard + **Conformance Level**: Implementation-specific + **Example(s)**: [GKE pre-shared certs](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-listeners-tls-options) TLS options are a list of key/value pairs to enable extended TLS configuration for an implementation. This field is part of the [GatewayTLSConfig](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.GatewayTLSConfig) defined on a Gateway Listener. Currently, there are no standard keys for TLS options, but the API may define a set of standard keys in the future. @@ -191,10 +205,15 @@ spec: ### Filters **Role(s)**: Application Developer + **Resource(s)**: HTTPRoute, GRPCRoute + **Status**: Completed + **Channel**: Standard + **Conformance Level**: Implementation-specific + **Example(s)**: [Easegress Filters](https://megaease.com/blog/2023/12/05/enhancing-k8s-gateway-api-with-easegress-without-changing-a-single-line-of-code/). Filters define processing steps that must be completed during the request or response lifecycle. They can be applied on the `route.rule` or the `route.rule.backendRef`. If applied on the `backendRef`, the filter should be executed if and only if the request is being forwarded. @@ -237,10 +256,15 @@ spec: ### BackendRef **Role(s)**: Application Developer + **Resource(s)**: xRoute + **Status**: Completed + **Channel**: Standard + **Conformance Level**: Implementation-specific + **Example(s)**: [ServiceImport GKE](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-rules-backendrefs), [ServiceImport Envoy Gateway](https://gateway.envoyproxy.io/v0.6.0/user/multicluster-service/). BackendRefs defines the backend(s) where matching requests should be sent. The Gateway API supports BackendRefs of type Kubernetes Service. An implementation can add support for other types of backends. This extension point should be used for forwarding traffic to network endpoints other than Kubernetes Services. @@ -272,10 +296,15 @@ spec: ### Policy **Role(s)**: All roles + **Resource(s)**: All resources + **Status**: Experimental + **Channel**: Experimental + **Conformance Level**: Extended/Implementation-specific + **Example(s)**: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. Policies can use the `sectioName` field of the `TargetRef` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. @@ -517,9 +546,13 @@ The following section proposes an extension type (Policy, Filter, etc.), extensi ### Gateway Settings **Extension type:** ParametersRef + **Resource type:** CRD + **Role(s):** Cluster Operator + **Attaches to:** GatewayClass or Gateway + **NGINX Context(s):** main, http, stream Features: @@ -562,9 +595,13 @@ Add support for: ### Response Modification **Extension type:** Filter + **Resource type:** CRD + **Role(s):** Application Developer + **Attaches to:** HTTPRoute + **NGINX Context(s):** location Features: @@ -587,9 +624,13 @@ NGINX directives: ### TLS Settings **Extension type:** TLS Options + **Resource type:** N/A. We will need to document supported key-values. + **Role(s):** Cluster Operator + **Attaches to:** Gateway + **NGINX Context(s):** server Features: @@ -618,9 +659,13 @@ These features are grouped because they are all TLS-related settings. TLS option ### Client Settings **Extension type:** Inherited Policy + **Resource type:** CRD + **Role(s):** Cluster Operator + **Attaches to:** Gateway, Gateway Listener, HTTPRoute + **NGINX context(s)**: http, server, location Features: @@ -650,9 +695,13 @@ These features are grouped because they all deal with client traffic. An Inherit ### Upstream Settings **Extension type:** Direct Policy + **Resource type:** CRD + **Role(s):** Application Developer + **Attaches to:** Backend + **NGINX Context(s):** upstream, location (for active health checks) OSS Features: @@ -698,9 +747,13 @@ These features are grouped because they all apply to the upstream context and ma ### Authentication **Extension type:** Inherited Policy + **Resource type:** CRD + **Role(s):** Cluster Operator, Application Developer + **Attaches to:** Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) + **NGINX context(s):** http, server, location OSS Features: @@ -737,9 +790,13 @@ NGINX Plus directives: ### Observability **Extension type:** Direct Policy + **Resource type:** CRD + **Role(s):** Application Developer + **Attaches to:** HTTPRoute, HTTPRoute rule + **NGINX context(s):** http, server, location Features: @@ -768,9 +825,13 @@ Add support for: ### Proxy Settings **Extension type:** Inherited Policy + **Resource type:** CRD + **Role(s):** Cluster Operator, Application Developer + **Attaches to:** Gateway, HTTPRoute, HTTPRoute Rule + **NGINX context(s):** http, server, location Features: @@ -800,9 +861,13 @@ NGINX directives: ### Circuit Breaker/ Backup service **Extension type:** Direct Policy/Filter + **Resource type:** CRD + **Role(s):** Application Developer + **Attaches to:** Backend/HTTPRoute Rule + **NGINX context(s):** upstream Features: From f92398b4ecc771937449684216efc3843b0ed8ef Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:47:18 -0700 Subject: [PATCH 05/33] Update TOC --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index d68beef5e..965970dd7 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -16,7 +16,7 @@ NGINX is highly configurable and offers rich features that can benefit our users * [Table of Contents](#table-of-contents) * [Goals](#goals) * [Non-Goals](#non-goals) - * [Gateway API Extension Points](#gateway-api-extension-points) + * [Gateway API Extension](#gateway-api-extension) * [GatewayClass Parameters Ref](#gatewayclass-parameters-ref) * [Issues with `parametersRef`](#issues-with-parametersref) * [Infrastructure API](#infrastructure-api) From ddc95ff9d620106e11c01cf67b5818d4a3c36593 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:49:21 -0700 Subject: [PATCH 06/33] Change to italics --- docs/proposals/nginx-extensions.md | 160 ++++++++++++++--------------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 965970dd7..d7e7e57a7 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -83,17 +83,17 @@ The Gateway API provides many extension that implementations can leverage to del ### GatewayClass Parameters Ref -**Role(s)**: Infrastructure Provider +_Role(s)_: Infrastructure Provider -**Resource(s)**: GatewayClass +_Resource(s)_: GatewayClass -**Status**: Completed +_Status_: Completed -**Channel**: Standard +_Channel_: Standard -**Conformance Level**: Implementation-specific +_Conformance Level_: Implementation-specific -**Example(s)**: [EnvoyProxy CRD](https://gateway.envoyproxy.io/v0.6.0/user/customize-envoyproxy/) +_Example(s)_: [EnvoyProxy CRD](https://gateway.envoyproxy.io/v0.6.0/user/customize-envoyproxy/) First-class API field on the `GatewayClass.spec`. The field refers to a resource containing the configuration parameters corresponding to the GatewayClass. The resource referenced can be a standard Kubernetes resource, a CRD, or a ConfigMap. While GatewayClasses are cluster-scoped, resources referenced by `GatewayClass.spec.parametersRef` can be namespaced-scoped or cluster-scoped. The configuration parameters contained in the referenced resource are applied to all Gateways attached to the GatewayClass. @@ -128,15 +128,15 @@ spec: ### Infrastructure API -**Role(s)**: Cluster Operator, and Infrastructure Provider +_Role(s)_: Cluster Operator, and Infrastructure Provider -**Resource(s)**: Gateway, GatewayClass (planned) +_Resource(s)_: Gateway, GatewayClass (planned) -**Status**: Experimental +_Status_: Experimental -**Channel**: Experimental +_Channel_: Experimental -**Conformance Level**: Core +_Conformance Level_: Core First-class infrastructure API on Gateway and GatewayClass. Several GEPs are related to this API: [GEP-1867](https://gateway-api.sigs.k8s.io/geps/gep-1867/), [GEP-1762](https://gateway-api.sigs.k8s.io/geps/gep-1762/), and [GEP-1651](https://gateway-api.sigs.k8s.io/geps/gep-1651/). @@ -164,17 +164,17 @@ There are plans to add a `parametersRef` field to the infrastructure API on the ### TLS Options -**Role(s)**: Cluster Operator +_Role(s)_: Cluster Operator -**Resource(s)**: Gateway +_Resource(s)_: Gateway -**Status**: Completed +_Status_: Completed -**Channel**: Standard +_Channel_: Standard -**Conformance Level**: Implementation-specific +_Conformance Level_: Implementation-specific -**Example(s)**: [GKE pre-shared certs](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-listeners-tls-options) +_Example(s)_: [GKE pre-shared certs](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-listeners-tls-options) TLS options are a list of key/value pairs to enable extended TLS configuration for an implementation. This field is part of the [GatewayTLSConfig](https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io%2fv1.GatewayTLSConfig) defined on a Gateway Listener. Currently, there are no standard keys for TLS options, but the API may define a set of standard keys in the future. @@ -204,17 +204,17 @@ spec: ### Filters -**Role(s)**: Application Developer +_Role(s)_: Application Developer -**Resource(s)**: HTTPRoute, GRPCRoute +_Resource(s)_: HTTPRoute, GRPCRoute -**Status**: Completed +_Status_: Completed -**Channel**: Standard +_Channel_: Standard -**Conformance Level**: Implementation-specific +_Conformance Level_: Implementation-specific -**Example(s)**: [Easegress Filters](https://megaease.com/blog/2023/12/05/enhancing-k8s-gateway-api-with-easegress-without-changing-a-single-line-of-code/). +_Example(s)_: [Easegress Filters](https://megaease.com/blog/2023/12/05/enhancing-k8s-gateway-api-with-easegress-without-changing-a-single-line-of-code/). Filters define processing steps that must be completed during the request or response lifecycle. They can be applied on the `route.rule` or the `route.rule.backendRef`. If applied on the `backendRef`, the filter should be executed if and only if the request is being forwarded. @@ -255,17 +255,17 @@ spec: ### BackendRef -**Role(s)**: Application Developer +_Role(s)_: Application Developer -**Resource(s)**: xRoute +_Resource(s)_: xRoute -**Status**: Completed +_Status_: Completed -**Channel**: Standard +_Channel_: Standard -**Conformance Level**: Implementation-specific +_Conformance Level_: Implementation-specific -**Example(s)**: [ServiceImport GKE](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-rules-backendrefs), [ServiceImport Envoy Gateway](https://gateway.envoyproxy.io/v0.6.0/user/multicluster-service/). +_Example(s)_: [ServiceImport GKE](https://cloud.google.com/kubernetes-engine/docs/how-to/gatewayclass-capabilities#spec-rules-backendrefs), [ServiceImport Envoy Gateway](https://gateway.envoyproxy.io/v0.6.0/user/multicluster-service/). BackendRefs defines the backend(s) where matching requests should be sent. The Gateway API supports BackendRefs of type Kubernetes Service. An implementation can add support for other types of backends. This extension point should be used for forwarding traffic to network endpoints other than Kubernetes Services. @@ -295,17 +295,17 @@ spec: ### Policy -**Role(s)**: All roles +_Role(s)_: All roles -**Resource(s)**: All resources +_Resource(s)_: All resources -**Status**: Experimental +_Status_: Experimental -**Channel**: Experimental +_Channel_: Experimental -**Conformance Level**: Extended/Implementation-specific +_Conformance Level_: Extended/Implementation-specific -**Example(s)**: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) +_Example(s)_: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. Policies can use the `sectioName` field of the `TargetRef` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. @@ -545,15 +545,15 @@ The following section proposes an extension type (Policy, Filter, etc.), extensi ### Gateway Settings -**Extension type:** ParametersRef +_Extension type:_ ParametersRef -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Cluster Operator +_Role(s):_ Cluster Operator -**Attaches to:** GatewayClass or Gateway +_Attaches to:_ GatewayClass or Gateway -**NGINX Context(s):** main, http, stream +_NGINX Context(s):_ main, http, stream Features: @@ -594,15 +594,15 @@ Add support for: ### Response Modification -**Extension type:** Filter +_Extension type:_ Filter -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Application Developer +_Role(s):_ Application Developer -**Attaches to:** HTTPRoute +_Attaches to:_ HTTPRoute -**NGINX Context(s):** location +_NGINX Context(s):_ location Features: @@ -623,15 +623,15 @@ NGINX directives: ### TLS Settings -**Extension type:** TLS Options +_Extension type:_ TLS Options -**Resource type:** N/A. We will need to document supported key-values. +_Resource type:_ N/A. We will need to document supported key-values. -**Role(s):** Cluster Operator +_Role(s):_ Cluster Operator -**Attaches to:** Gateway +_Attaches to:_ Gateway -**NGINX Context(s):** server +_NGINX Context(s):_ server Features: @@ -658,15 +658,15 @@ These features are grouped because they are all TLS-related settings. TLS option ### Client Settings -**Extension type:** Inherited Policy +_Extension type:_ Inherited Policy -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Cluster Operator +_Role(s):_ Cluster Operator -**Attaches to:** Gateway, Gateway Listener, HTTPRoute +_Attaches to:_ Gateway, Gateway Listener, HTTPRoute -**NGINX context(s)**: http, server, location +_NGINX context(s)_: http, server, location Features: @@ -694,15 +694,15 @@ These features are grouped because they all deal with client traffic. An Inherit ### Upstream Settings -**Extension type:** Direct Policy +_Extension type:_ Direct Policy -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Application Developer +_Role(s):_ Application Developer -**Attaches to:** Backend +_Attaches to:_ Backend -**NGINX Context(s):** upstream, location (for active health checks) +_NGINX Context(s):_ upstream, location (for active health checks) OSS Features: @@ -746,15 +746,15 @@ These features are grouped because they all apply to the upstream context and ma ### Authentication -**Extension type:** Inherited Policy +_Extension type:_ Inherited Policy -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Cluster Operator, Application Developer +_Role(s):_ Cluster Operator, Application Developer -**Attaches to:** Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) +_Attaches to:_ Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) -**NGINX context(s):** http, server, location +_NGINX context(s):_ http, server, location OSS Features: @@ -789,15 +789,15 @@ NGINX Plus directives: ### Observability -**Extension type:** Direct Policy +_Extension type:_ Direct Policy -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Application Developer +_Role(s):_ Application Developer -**Attaches to:** HTTPRoute, HTTPRoute rule +_Attaches to:_ HTTPRoute, HTTPRoute rule -**NGINX context(s):** http, server, location +_NGINX context(s):_ http, server, location Features: @@ -824,15 +824,15 @@ Add support for: ### Proxy Settings -**Extension type:** Inherited Policy +_Extension type:_ Inherited Policy -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Cluster Operator, Application Developer +_Role(s):_ Cluster Operator, Application Developer -**Attaches to:** Gateway, HTTPRoute, HTTPRoute Rule +_Attaches to:_ Gateway, HTTPRoute, HTTPRoute Rule -**NGINX context(s):** http, server, location +_NGINX context(s):_ http, server, location Features: @@ -860,15 +860,15 @@ NGINX directives: ### Circuit Breaker/ Backup service -**Extension type:** Direct Policy/Filter +_Extension type:_ Direct Policy/Filter -**Resource type:** CRD +_Resource type:_ CRD -**Role(s):** Application Developer +_Role(s):_ Application Developer -**Attaches to:** Backend/HTTPRoute Rule +_Attaches to:_ Backend/HTTPRoute Rule -**NGINX context(s):** upstream +_NGINX context(s):_ upstream Features: From a74d3ce982e36743b3ea340b359ef04a84f528fd Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:51:07 -0700 Subject: [PATCH 07/33] Fix headings --- docs/proposals/nginx-extensions.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index d7e7e57a7..c691beebf 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -53,7 +53,7 @@ NGINX is highly configurable and offers rich features that can benefit our users * [Future Work](#future-work-4) * [Alternatives](#alternatives-5) * [Observability](#observability) - * [Future Work](#future-work-5) + * [Future Work](#future-work-5) * [Alternatives](#alternatives-6) * [Proxy Settings](#proxy-settings) * [Future Work](#future-work-6) @@ -64,9 +64,7 @@ NGINX is highly configurable and offers rich features that can benefit our users * [Security Considerations](#security-considerations) * [Alternatives Considered](#alternatives-considered) * [References](#references) - - -## Goals +als - Identify the set of NGINX features to deliver to users. - Group these features to reduce the number of APIs and improve user experience. @@ -810,7 +808,7 @@ NGINX directives: - [`otel_span_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_name) - [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr) -### Future Work +#### Future Work Add support for: From 4c518544898eccf506a70aeca7737e66420fe2f5 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 16:52:12 -0700 Subject: [PATCH 08/33] Add back goals --- docs/proposals/nginx-extensions.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index c691beebf..4ae192ff1 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -64,7 +64,9 @@ NGINX is highly configurable and offers rich features that can benefit our users * [Security Considerations](#security-considerations) * [Alternatives Considered](#alternatives-considered) * [References](#references) -als + + +## Goals - Identify the set of NGINX features to deliver to users. - Group these features to reduce the number of APIs and improve user experience. From 61c622a74983a100128b42e07eb92a14ceb4e2a9 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 17:22:21 -0700 Subject: [PATCH 09/33] More fixes --- docs/proposals/nginx-extensions.md | 65 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 4ae192ff1..59370d4d7 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -157,7 +157,7 @@ spec: name: my-annotation ``` -Infrastructure labels and annotations should be applied to any resources created in response to the Gateway. This only applies to _automated deployments_ (i.e., provisioner mode), implementations that automatically deploy the data plane based on a Gateway. +Infrastructure labels and annotations should be applied to all resources created in response to the Gateway. This only applies to _automated deployments_ (i.e., provisioner mode), implementations that automatically deploy the data plane based on a Gateway. Other use cases for this API are Service type, Service IP, CPU memory requests, affinity rules, and Gateway routability (public, private, and cluster). There are plans to add a `parametersRef` field to the infrastructure API on the Gateway. This field would function similarly to the GatewayClass `parametersRef` but would not have the same issues highlighted in the section above. @@ -307,7 +307,7 @@ _Conformance Level_: Extended/Implementation-specific _Example(s)_: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) -Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. Policies can use the `sectioName` field of the `TargetRef` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. +Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. Policies can use the `sectionName` field of the `TargetRef` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. Policies do not need to support attaching to all resource Kinds. Implementations can choose which resources the Policy can be attached to. @@ -442,17 +442,11 @@ Policies are complex to implement because they can affect many objects in variou _Subject to change_ -The Metaresources and Policy Attachment GEP is experimental. There's no guarantee that Policy Attachment will stay the same as the Gateway API receives feedback from implementors on the feasibility of Policies. +The Metaresources and Policy Attachment GEP is experimental. There's no guarantee that Policy Attachment will stay the same as the Gateway API receives feedback from implementors. ## Prioritized NGINX Features -To identify the set of NGINX directives and parameters NGINX Gateway Fabric should implement first, we first identified the highest priority features using the following criteria: - -1. Customer requested features. -2. Most popular features of the NGINX Ingress Controller. -3. Features without active Gateway Enhancement Proposals (GEPs). - -From this list of features, we prioritized them into four categories: high-priority, medium-priority, low-priority, and active GEPs. +To identify the set of NGINX directives and parameters NGINX Gateway Fabric should implement first, we considered the features that the directives and parameters delivered, using the NGINX Ingress Controller's features as a guide. Once we had a list of features, we prioritized them into four categories: high-priority, medium-priority, low-priority, and active GEPs. ### High-Priority Features @@ -527,7 +521,11 @@ The status field in the table describes the status of the GEP using the followin ## Grouping the Features -To reduce the number of CRDs NGINX Gateway Fabric must maintain and users have to create, we grouped the high and medium-priority features into configuration categories. Once the features are grouped, we can begin implementation by focusing on the high-priority features of each group. Then, once the high-priority features are complete, we can move on to the medium-priority features. The low-priority features are out of scope for the rest of the Enhancement Proposal but may be revisited once we make progress on the higher-priority features. In addition, most features with active GEPs are not included in the groups as we want to help move the GEPs forward toward standardization instead of creating our bespoke solutions. +To reduce the number of CRDs NGINX Gateway Fabric must maintain and users have to create, we grouped the high and medium-priority features into configuration categories. + +For each group, we will begin implementation by focusing on the high-priority features of each group. Then, once the high-priority features are complete, we can move on to the medium-priority features. + +The low-priority features are out of scope for the rest of the Enhancement Proposal but may be revisited once we make progress on the higher-priority features. In addition, most features with active GEPs are not included in the groups as we want to help move the GEPs forward toward standardization instead of creating our bespoke solutions. When grouping the features, we considered the following factors: @@ -541,7 +539,7 @@ The following picture shows the nine groups we came up with: ## API -The following section proposes an extension type (Policy, Filter, etc.), extension point (GatewayClass, HTTPRoute, etc.), and Gateway API role for all the groups of features. The goal of this Enhancement Proposal is not to design each extension but to propose a strategy for delivering critical NGINX features to our customers. +The following section proposes an extension type (Policy, Filter, etc.), extension point (GatewayClass, HTTPRoute, etc.), and Gateway API role for all the groups. The goal of this Enhancement Proposal is not to design each extension but to propose a strategy for delivering critical NGINX features to our customers. ### Gateway Settings @@ -551,7 +549,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator -_Attaches to:_ GatewayClass or Gateway +_Extension point:_ GatewayClass or Gateway _NGINX Context(s):_ main, http, stream @@ -577,7 +575,7 @@ NGINX directives: These features are grouped because they are all the responsibility of the Cluster Operator and should not be set or changed by Application Developers. -Currently, `parametersRef` is only available on the GatewayClass, which means all Gateways attached to the GatewayClass will inherit these settings. This is acceptable since NGINX Gateway Fabric supports a single Gateway per GatewayClass. However, once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/144) and `parametersRef` is added to the Gateway Infrastructure API, then we will want to support referencing this CRD on individual Gateways. +Currently, `parametersRef` is only available on the GatewayClass, which means all Gateways attached to the GatewayClass will inherit these settings. This is acceptable since NGINX Gateway Fabric supports a single Gateway per GatewayClass. However, once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/1443) and `parametersRef` is added to the Gateway Infrastructure API, then we will want to support referencing this CRD on individual Gateways. #### Future Work @@ -600,7 +598,7 @@ _Resource type:_ CRD _Role(s):_ Application Developer -_Attaches to:_ HTTPRoute +_Extension point:_ HTTPRoute _NGINX Context(s):_ location @@ -629,7 +627,7 @@ _Resource type:_ N/A. We will need to document supported key-values. _Role(s):_ Cluster Operator -_Attaches to:_ Gateway +_Extension point:_ Gateway _NGINX Context(s):_ server @@ -664,7 +662,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator -_Attaches to:_ Gateway, Gateway Listener, HTTPRoute +_Extension point:_ Gateway, Gateway Listener, HTTPRoute _NGINX context(s)_: http, server, location @@ -675,14 +673,14 @@ Features: NGINX directives: -- [`client_max_body_size`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size): http, server, location -- [`client_body_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout): http, server, location -- [`keepalive_requests`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests): http, server, location -- [`keepalive_time`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time): http, server, location -- [`keepalive_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout): http, server, location -- [`keepalive_disable`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_disable): http, server, location +- [`client_max_body_size`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size) +- [`client_body_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout) +- [`keepalive_requests`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_requests) +- [`keepalive_time`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_time) +- [`keepalive_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout) +- [`keepalive_disable`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_disable) -These features are grouped because they all deal with client traffic. An Inherited Policy fits this group best because there is a use case where the ClusterOperator sets a sane default for client max body size or client keepalives that has to be overridden by an Application Developer because of the unique attributes of the service they own. +These features are grouped because they all deal with client traffic. An Inherited Policy fits this group best because there is a use case where the ClusterOperator sets a sane default for client max body size or client keepalives that has to be overridden by an Application Developer because of the unique attributes of the Service they own. #### Future Work @@ -700,7 +698,7 @@ _Resource type:_ CRD _Role(s):_ Application Developer -_Attaches to:_ Backend +_Extension point:_ Backend _NGINX Context(s):_ upstream, location (for active health checks) @@ -752,7 +750,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator, Application Developer -_Attaches to:_ Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) +_Extension point:_ Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) _NGINX context(s):_ http, server, location @@ -795,7 +793,7 @@ _Resource type:_ CRD _Role(s):_ Application Developer -_Attaches to:_ HTTPRoute, HTTPRoute rule +_Extension point:_ HTTPRoute, HTTPRoute rule _NGINX context(s):_ http, server, location @@ -830,7 +828,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator, Application Developer -_Attaches to:_ Gateway, HTTPRoute, HTTPRoute Rule +_Extension point:_ Gateway, HTTPRoute, HTTPRoute Rule _NGINX context(s):_ http, server, location @@ -866,7 +864,7 @@ _Resource type:_ CRD _Role(s):_ Application Developer -_Attaches to:_ Backend/HTTPRoute Rule +_Extension point:_ Backend/HTTPRoute Rule _NGINX context(s):_ upstream @@ -882,11 +880,13 @@ NGINX upstream server parameters: This [NGINX blog post](https://www.nginx.com/blog/microservices-reference-architecture-nginx-circuit-breaker-pattern/) describes the circuit breaker pattern and how to implement it with NGINX plus. The solution involves active health checks, rate-limiting, caching, and the `backup` directive. While this might be a complete solution, it is likely too heavyweight for NGINX Gateway Fabric. -The NGINX Kubernetes projects, NGINX Service Mesh and NGINX Ingress Controller offer two alternatives to circuit breaker. +The NGINX Kubernetes projects, NGINX Service Mesh and NGINX Ingress Controller offer alternatives to this solution. NGINX Ingress Controller supports setting a [backup Service](https://github.com/nginxinc/kubernetes-ingress/tree/release-3.4/examples/custom-resources/backup-directive/virtual-server) that will be used when the primary servers are unavailable. The backup service must be of type ExternalName. -NGINX Service Mesh implements circuit breaking with the following [CRD](https://github.com/nginxinc/nginx-service-mesh/blob/main/pkg/apis/specs/v1alpha1/circuit_breaker.go): +NGINX Service Mesh implements circuit breaking with the a [CRD](https://github.com/nginxinc/nginx-service-mesh/blob/main/pkg/apis/specs/v1alpha1/circuit_breaker.go). + +Here's an example: ```yaml apiVersion: specs.smi.nginx.com/v1alpha1 @@ -930,7 +930,8 @@ Each extension will need validation to prevent malicious or invalid NGINX config 1. Security. The configuration cannot be validated before it is applied. This means that invalid or even malicious configuration can be injected. As a result, not every Cluster Operator would want this functionality turned on. So, for some users, this functionality would not be available. 2. Requires NGINX knowledge. Without a first-class API exposing and abstracting away NGINX configuration, the users must be knowledgeable about NGINX. This will be great for NGINX power users but much more complicated for those unfamiliar with NGINX. 3. Lack of status. No helpful status is set, and users must parse NGINX error messages—potential for frustration and bad user experiences. - Problems aside, this feature will still be useful for our users and is something we should implement. Still, it does not eliminate the need for the extension APIs proposed in this document and should not be a higher priority. + + Problems aside, this feature will still be useful for our users and is something we should implement. Still, it does not eliminate the need for the extension APIs proposed in this document and should not be a higher priority. ## References From de7543dca8f15d7e33419791f4a981cf3241b0f6 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Mon, 12 Feb 2024 17:31:22 -0700 Subject: [PATCH 10/33] Appease linters --- docs/proposals/nginx-extensions.md | 117 +++++++++++++++-------------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 59370d4d7..b85f8ade4 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -1,5 +1,5 @@ -# Enhancement Proposal #1411: Extensions for NGINX Features +# Extensions for NGINX Features - Issue: #1566 - Status: Provisional @@ -11,59 +11,60 @@ NGINX is highly configurable and offers rich features that can benefit our users ## Table of Contents -* [Enhancement Proposal #1411: Extensions for NGINX Features](#enhancement-proposal-1411--extensions-for-nginx-features) - * [Summary](#summary) - * [Table of Contents](#table-of-contents) - * [Goals](#goals) - * [Non-Goals](#non-goals) - * [Gateway API Extension](#gateway-api-extension) - * [GatewayClass Parameters Ref](#gatewayclass-parameters-ref) - * [Issues with `parametersRef`](#issues-with-parametersref) - * [Infrastructure API](#infrastructure-api) - * [TLS Options](#tls-options) - * [Filters](#filters) - * [BackendRef](#backendref) - * [Policy](#policy) - * [Direct Policy Attachment](#direct-policy-attachment) - * [Inherited Policy Attachment](#inherited-policy-attachment) - * [Hierarchy](#hierarchy) - * [Challenges of Policy Attachment](#challenges-of-policy-attachment) - * [Prioritized NGINX Features](#prioritized-nginx-features) - * [High-Priority Features](#high-priority-features) - * [Medium-Priority Features](#medium-priority-features) - * [Low-Priority Features](#low-priority-features) - * [Features with Active Gateway API Enhancement Proposals (GEPs)](#features-with-active-gateway-api-enhancement-proposals--geps-) - * [Grouping the Features](#grouping-the-features) - * [API](#api) - * [Gateway Settings](#gateway-settings) - * [Future Work](#future-work) - * [Alternatives](#alternatives) - * [Response Modification](#response-modification) - * [Future Work](#future-work-1) - * [Alternatives](#alternatives-1) - * [TLS Settings](#tls-settings) - * [Future Work](#future-work-2) - * [Alternatives](#alternatives-2) - * [Client Settings](#client-settings) - * [Future Work](#future-work-3) - * [Alternatives](#alternatives-3) - * [Upstream Settings](#upstream-settings) - * [Alternatives](#alternatives-4) - * [Authentication](#authentication) - * [Future Work](#future-work-4) - * [Alternatives](#alternatives-5) - * [Observability](#observability) - * [Future Work](#future-work-5) - * [Alternatives](#alternatives-6) - * [Proxy Settings](#proxy-settings) - * [Future Work](#future-work-6) - * [Alternatives](#alternatives-7) - * [Circuit Breaker/ Backup service](#circuit-breaker-backup-service) - * [Alternatives](#alternatives-8) - * [Testing](#testing) - * [Security Considerations](#security-considerations) - * [Alternatives Considered](#alternatives-considered) - * [References](#references) +- [Extensions for NGINX Features](#extensions-for-nginx-features) + - [Summary](#summary) + - [Table of Contents](#table-of-contents) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Gateway API Extension](#gateway-api-extension) + - [GatewayClass Parameters Ref](#gatewayclass-parameters-ref) + - [Issues with `parametersRef`](#issues-with-parametersref) + - [Infrastructure API](#infrastructure-api) + - [TLS Options](#tls-options) + - [Filters](#filters) + - [BackendRef](#backendref) + - [Policy](#policy) + - [Direct Policy Attachment](#direct-policy-attachment) + - [Inherited Policy Attachment](#inherited-policy-attachment) + - [Hierarchy](#hierarchy) + - [Challenges of Policy Attachment](#challenges-of-policy-attachment) + - [Prioritized NGINX Features](#prioritized-nginx-features) + - [High-Priority Features](#high-priority-features) + - [Medium-Priority Features](#medium-priority-features) + - [Low-Priority Features](#low-priority-features) + - [Features with Active Gateway API Enhancement Proposals](#features-with-active-gateway-api-enhancement-proposals) + - [Grouping the Features](#grouping-the-features) + - [API](#api) + - [Gateway Settings](#gateway-settings) + - [Future Work](#future-work) + - [Alternatives](#alternatives) + - [Response Modification](#response-modification) + - [Future Work](#future-work-1) + - [Alternatives](#alternatives-1) + - [TLS Settings](#tls-settings) + - [Future Work](#future-work-2) + - [Alternatives](#alternatives-2) + - [Client Settings](#client-settings) + - [Future Work](#future-work-3) + - [Alternatives](#alternatives-3) + - [Upstream Settings](#upstream-settings) + - [Alternatives](#alternatives-4) + - [Authentication](#authentication) + - [Future Work](#future-work-4) + - [Alternatives](#alternatives-5) + - [Observability](#observability) + - [Future Work](#future-work-5) + - [Alternatives](#alternatives-6) + - [Proxy Settings](#proxy-settings) + - [Future Work](#future-work-6) + - [Alternatives](#alternatives-7) + - [Circuit Breaker/ Backup service](#circuit-breaker-backup-service) + - [Alternatives](#alternatives-8) + - [Testing](#testing) + - [Security Considerations](#security-considerations) + - [Alternatives Considered](#alternatives-considered) + - [References](#references) + ## Goals @@ -501,7 +502,7 @@ To identify the set of NGINX directives and parameters NGINX Gateway Fabric shou | Remote authentication request | | | Timeout for unresponsive clients | | -### Features with Active Gateway API Enhancement Proposals (GEPs) +### Features with Active Gateway API Enhancement Proposals The status field in the table describes the status of the GEP using the following terms: @@ -521,9 +522,9 @@ The status field in the table describes the status of the GEP using the followin ## Grouping the Features -To reduce the number of CRDs NGINX Gateway Fabric must maintain and users have to create, we grouped the high and medium-priority features into configuration categories. +To reduce the number of CRDs NGINX Gateway Fabric must maintain and users have to create, we grouped the high and medium-priority features into configuration categories. -For each group, we will begin implementation by focusing on the high-priority features of each group. Then, once the high-priority features are complete, we can move on to the medium-priority features. +For each group, we will begin implementation by focusing on the high-priority features of each group. Then, once the high-priority features are complete, we can move on to the medium-priority features. The low-priority features are out of scope for the rest of the Enhancement Proposal but may be revisited once we make progress on the higher-priority features. In addition, most features with active GEPs are not included in the groups as we want to help move the GEPs forward toward standardization instead of creating our bespoke solutions. @@ -930,7 +931,7 @@ Each extension will need validation to prevent malicious or invalid NGINX config 1. Security. The configuration cannot be validated before it is applied. This means that invalid or even malicious configuration can be injected. As a result, not every Cluster Operator would want this functionality turned on. So, for some users, this functionality would not be available. 2. Requires NGINX knowledge. Without a first-class API exposing and abstracting away NGINX configuration, the users must be knowledgeable about NGINX. This will be great for NGINX power users but much more complicated for those unfamiliar with NGINX. 3. Lack of status. No helpful status is set, and users must parse NGINX error messages—potential for frustration and bad user experiences. - + Problems aside, this feature will still be useful for our users and is something we should implement. Still, it does not eliminate the need for the extension APIs proposed in this document and should not be a higher priority. ## References From fdb4313574bd0a70ed1f63ab17d61264508d7193 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 14 Feb 2024 09:46:41 -0700 Subject: [PATCH 11/33] Fix typos --- docs/proposals/nginx-extensions.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index b85f8ade4..4446d7f8c 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -16,7 +16,7 @@ NGINX is highly configurable and offers rich features that can benefit our users - [Table of Contents](#table-of-contents) - [Goals](#goals) - [Non-Goals](#non-goals) - - [Gateway API Extension](#gateway-api-extension) + - [Gateway API Extensions](#gateway-api-extensions) - [GatewayClass Parameters Ref](#gatewayclass-parameters-ref) - [Issues with `parametersRef`](#issues-with-parametersref) - [Infrastructure API](#infrastructure-api) @@ -78,9 +78,9 @@ NGINX is highly configurable and offers rich features that can benefit our users - Design the API of every extension. This design work will be completed for each extension before implementation. - Design an API that will allow the user to insert raw NGINX config into the NGINX config that NGINX Gateway Fabric generates (e.g. [snippets in NGINX Ingress Controller](https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-snippets/)). -## Gateway API Extension +## Gateway API Extensions -The Gateway API provides many extension that implementations can leverage to deliver features that the general-purpose API cannot address. This section provides a summary of these extension. +The Gateway API provides many extensions that implementations can leverage to deliver features that the general-purpose API cannot address. This section provides a summary of these extensions. ### GatewayClass Parameters Ref @@ -885,7 +885,7 @@ The NGINX Kubernetes projects, NGINX Service Mesh and NGINX Ingress Controller o NGINX Ingress Controller supports setting a [backup Service](https://github.com/nginxinc/kubernetes-ingress/tree/release-3.4/examples/custom-resources/backup-directive/virtual-server) that will be used when the primary servers are unavailable. The backup service must be of type ExternalName. -NGINX Service Mesh implements circuit breaking with the a [CRD](https://github.com/nginxinc/nginx-service-mesh/blob/main/pkg/apis/specs/v1alpha1/circuit_breaker.go). +NGINX Service Mesh implements circuit breaking with a [CRD](https://github.com/nginxinc/nginx-service-mesh/blob/main/pkg/apis/specs/v1alpha1/circuit_breaker.go). Here's an example: From 39e14a395d85caf121cd5fba68ff72f4e31d8b18 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 14 Feb 2024 10:08:19 -0700 Subject: [PATCH 12/33] Add more detail on target refs --- docs/proposals/nginx-extensions.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 4446d7f8c..7094afbf5 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -308,7 +308,30 @@ _Conformance Level_: Extended/Implementation-specific _Example(s)_: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) -Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. Policies can use the `sectionName` field of the `TargetRef` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. +Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. This `TargetRef` can include a `sectionName` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. + +Example of a TargetRef that targets an entire Gateway: + +```yaml +targetRef: + group: gateway.networking.k8s.io + kind: Gateway + name: my-gateway + namespace: default +``` + +Example of a TargetRef that targets the `http` listener on a Gateway: + +```yaml +targetRef: + group: gateway.networking.k8s.io + kind: Gateway + name: my-gateway + sectionName: http + namespace: default +``` + +There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. Policies do not need to support attaching to all resource Kinds. Implementations can choose which resources the Policy can be attached to. From 274c065b82e64c35b07021852e93b254cb5f1f8e Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 15 Feb 2024 16:37:27 -0700 Subject: [PATCH 13/33] Fix link --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 7094afbf5..3bca3627a 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -758,7 +758,7 @@ NGINX Plus directives/parameters: - [`slow_start`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) - [`queue`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#queue) - [`health_check`](https://nginx.org/en/docs/http/ngx_http_upstream_hc_module.html#health_check) -- [`least_time`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash) +- [`least_time`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#least_time) These features are grouped because they all apply to the upstream context and make sense when attached to a Backend. From 0f6c990150ddbb5d8956d4c99f46412f0c5f3332 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 15 Feb 2024 16:47:59 -0700 Subject: [PATCH 14/33] Update security section --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 3bca3627a..6daaf339a 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -944,7 +944,7 @@ Each extension will be tested with a combination of unit and system tests. The d ## Security Considerations -Each extension will need validation to prevent malicious or invalid NGINX configuration. The details of this validation are outside the scope of this Enhancement Proposal. +At a minimum, all extension points will need validation to prevent malicious or invalid NGINX configuration. In addition, each extension will have unique security considerations based on its behavior and design. The details of validation and other security concerns are out of scope for this Enhancement Proposal and will be provided in future Enhancement Proposals on a per-extension basis. ## Alternatives Considered From f0770273312fd2a341d6cedc3ee9c6e0f7c683f3 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Fri, 16 Feb 2024 13:12:28 -0700 Subject: [PATCH 15/33] Update Circuit Breaker --- docs/proposals/nginx-extensions.md | 51 ++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 6daaf339a..8799666fe 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -59,7 +59,7 @@ NGINX is highly configurable and offers rich features that can benefit our users - [Future Work](#future-work-6) - [Alternatives](#alternatives-7) - [Circuit Breaker/ Backup service](#circuit-breaker-backup-service) - - [Alternatives](#alternatives-8) + - [Options](#options) - [Testing](#testing) - [Security Considerations](#security-considerations) - [Alternatives Considered](#alternatives-considered) @@ -882,13 +882,13 @@ NGINX directives: ### Circuit Breaker/ Backup service -_Extension type:_ Direct Policy/Filter +_Extension type:_ BackendRef/Direct Policy _Resource type:_ CRD _Role(s):_ Application Developer -_Extension point:_ Backend/HTTPRoute Rule +_Extension point:_ Backend _NGINX context(s):_ upstream @@ -899,9 +899,14 @@ Features: NGINX upstream server parameters: - [`backup`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) + +Circuit Breaker also relies on the following NGINX upstream server parameters: + - [`fail_timeout`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) - [`max_fails`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +However, these parameters are also used in passive health checks, which is a part of the Upstream Settings Policy. We can either expose these settings in both extensions (not recommended by the Gateway API), or the Circuit Breaker extensions can use the values of these parameters set by the Upstream Settings Policy. + This [NGINX blog post](https://www.nginx.com/blog/microservices-reference-architecture-nginx-circuit-breaker-pattern/) describes the circuit breaker pattern and how to implement it with NGINX plus. The solution involves active health checks, rate-limiting, caching, and the `backup` directive. While this might be a complete solution, it is likely too heavyweight for NGINX Gateway Fabric. The NGINX Kubernetes projects, NGINX Service Mesh and NGINX Ingress Controller offer alternatives to this solution. @@ -932,11 +937,45 @@ spec: The `spec.destination` field is similar to `targetRef` in that it attaches the CircuitBreaker setting to an object. This example configures a circuit breaker that will trip when there are three errors within 30 seconds. If the circuit breaker trips, requests to the destination Service will be routed to the fallback Service. After 30 seconds, the circuit breaker will reset, and the requests will be routed to the destination Service again. This implementation uses the NGINX `max_fails`, `fail_timeout`, and `backup` upstream server parameters. -NGINX Gateway Fabric could choose one of these approaches or design something new. It's difficult to propose an extension type for circuit breaker without more discussion and design. A Direct Policy that attaches to Backends or an HTTPRoute Filter could both work. Which one we choose will depend on the design of the circuit breaker and whether circuit breakers should be applied per Backend or Route. +NGINX Gateway Fabric could choose one of these approaches or design something new. It's difficult to propose an extension type for circuit breaker without more discussion and design. The next section outlines some options. -#### Alternatives +#### Options + +- Add `backup` to Upstream Settings Policy: The `fail_timeout` and `max_fails` directives are also used in passive health checks, which is a part of the Upstream Settings Policy. Including circuit breaking -- or just the `backup` directive -- might make more sense in this Policy. This approach is similar to the NGINX Ingress Controller solution. +- Direct Policy: A Direct Policy, similar to the NGINX Service Mesh example. This Policy would target a Backend and would define a fallback Service. Optionally, this Policy could also include the `fail_timeout` and `max_fails` settings, but this could cause conflicts with the Upstream Settings Policy. +- Custom BackendRef: Allow users to configure a primary and fallback Service via a custom BackendRef that they can reference in an xRoute: -- Include in the Upstream Settings Policy: The `fail_timeout` and `max_fails` directives are also used in passive health checks, which is a part of the Upstream Settings Policy. Including circuit breaking -- or just the `backup` directive -- might make more sense in this Policy. + ```yaml + apiVersion: gateway.nginx.org/v1alpha1 + kind: CircuitBreaker + metadata: + name: circuit-breaker-example + spec: + primary: + service: coffee-primary + port: 80 + fallback: + service: coffee-backup + port: 80 + --- + apiVersion: gateway.networking.k8s.io/v1 + kind: HTTPRoute + metadata: + name: custom-backend + spec: + hostnames: + - "example.com" + rules: + - matches: + - path: + type: PathPrefix + value: / + backendRefs: + - group: gateway.nginx.org/v1alpha1 + kind: CircuitBreaker + name: circuit-breaker-example + port: 80 + ``` ## Testing From e4e61def7229aaf45d066e4c86c8cab9d094fa7d Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Fri, 16 Feb 2024 13:20:21 -0700 Subject: [PATCH 16/33] Update OTel --- docs/proposals/nginx-extensions.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 8799666fe..aa06227b4 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -582,7 +582,7 @@ Features: - Error log level - Access log settings: format and disable - PROXY protocol -- OTEL Tracing: global settings such as exporter configuration and global enable/disable. +- OTel Tracing: Exporter configuration which includes endpoint, interval, batch size, and batch count. - External Routing: enable/disable routing to ExternalName Services and set DNS resolver addresses. NGINX directives: @@ -593,7 +593,7 @@ NGINX directives: - [`log_format`](https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) - [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_exporter) - [`otel_service_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_service_name) -- [`otel_trace`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) +- [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) - [`resolver`](https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) @@ -823,26 +823,28 @@ _NGINX context(s):_ http, server, location Features: -- OTEL Tracing: enable/disable by Route or routing rule. Set span name, attributes, and context. +- OTel Tracing: enable tracing, set sampler rate, span name, attributes, and context. NGINX directives: -- [`otel_trace`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) +- [`otel_trace`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace): enable tracing and set sampler rate - [`otel_trace_context`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace_context) - [`otel_span_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_name) - [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr) +Tracing will be disabled by default. The Application Developer will be able to use this Policy to enable and configure tracing for their routes. This Policy will only be applied if the OTel endpoint as been set by the Cluster Operator on the [Gateway Settings](#gateway-settings). + #### Future Work Add support for: -- OTEL logging +- OTel logging - Metrics #### Alternatives -- Combine with OTEL settings in Gateway Settings for one OTEL Policy: Rather than splitting tracing across two Policies, we could create a single tracing Policy. The issue with this approach is that some tracing settings -- such as exporter endpoint -- should be restricted to Cluster Operators, while settings like attributes should be available to Application Developers. If we combine these settings, RBAC will not be sufficient to restrict access across the settings. We will have to disallow certain fields based on the resource the Policy is attached to. This is a bad user experience. -- Inherited Policy: An Inherited Policy would be useful if there is a use case for the Cluster Operator enforcing or defaulting the OTEL tracing settings included in this policy. +- Combine with OTel settings in Gateway Settings for one OTel Policy: Rather than splitting tracing across two Policies, we could create a single tracing Policy. The issue with this approach is that some tracing settings -- such as exporter endpoint -- should be restricted to Cluster Operators, while settings like attributes should be available to Application Developers. If we combine these settings, RBAC will not be sufficient to restrict access across the settings. We will have to disallow certain fields based on the resource the Policy is attached to. This is a bad user experience. +- Inherited Policy: An Inherited Policy would be useful if there is a use case for the Cluster Operator enforcing or defaulting the OTel tracing settings included in this policy. ### Proxy Settings From 0121fc02affa7e2d4b718fea27b7096bcf67e909 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Fri, 16 Feb 2024 13:22:40 -0700 Subject: [PATCH 17/33] Resolver as plus only --- docs/proposals/nginx-extensions.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index aa06227b4..851c7b80b 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -577,15 +577,14 @@ _Extension point:_ GatewayClass or Gateway _NGINX Context(s):_ main, http, stream -Features: +NGINX OSS features: - Error log level - Access log settings: format and disable - PROXY protocol - OTel Tracing: Exporter configuration which includes endpoint, interval, batch size, and batch count. -- External Routing: enable/disable routing to ExternalName Services and set DNS resolver addresses. -NGINX directives: +NGINX OSS directives: - [`proxy_protocol`](https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html#proxy_protocol) - [`access_log`](https://nginx.org/en/docs/http/ngx_http_log_module.html#access_log) @@ -594,8 +593,14 @@ NGINX directives: - [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_exporter) - [`otel_service_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_service_name) - [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) -- [`resolver`](https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) +NGINX Plus features: + +- External Routing: enable/disable routing to ExternalName Services and set DNS resolver addresses. + +NGINX Plus directives: + +- [`resolver`](https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver) These features are grouped because they are all the responsibility of the Cluster Operator and should not be set or changed by Application Developers. From b1217c89063790d41e0c798abb59b67ea1b178e5 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Fri, 16 Feb 2024 13:28:17 -0700 Subject: [PATCH 18/33] Add note about GatewayClass role --- docs/proposals/nginx-extensions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 851c7b80b..a372f282e 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -84,7 +84,7 @@ The Gateway API provides many extensions that implementations can leverage to de ### GatewayClass Parameters Ref -_Role(s)_: Infrastructure Provider +_Role(s)_: Infrastructure Provider or Cluster Operator. For NGINX Gateway Fabric, this will be the responsibility of the Cluster Operator, as the Infrastructure Provider role only applies to cloud or PaaS providers. _Resource(s)_: GatewayClass @@ -98,6 +98,7 @@ _Example(s)_: [EnvoyProxy CRD](https://gateway.envoyproxy.io/v0.6.0/user/customi First-class API field on the `GatewayClass.spec`. The field refers to a resource containing the configuration parameters corresponding to the GatewayClass. The resource referenced can be a standard Kubernetes resource, a CRD, or a ConfigMap. While GatewayClasses are cluster-scoped, resources referenced by `GatewayClass.spec.parametersRef` can be namespaced-scoped or cluster-scoped. The configuration parameters contained in the referenced resource are applied to all Gateways attached to the GatewayClass. + Example: ```yaml From cb01a6901420b696a1449488cda6e6aadda4f77f Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Fri, 16 Feb 2024 13:34:20 -0700 Subject: [PATCH 19/33] Remove Gateway parameters ref --- docs/proposals/nginx-extensions.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index a372f282e..2443601fb 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -64,7 +64,6 @@ NGINX is highly configurable and offers rich features that can benefit our users - [Security Considerations](#security-considerations) - [Alternatives Considered](#alternatives-considered) - [References](#references) - ## Goals @@ -98,7 +97,6 @@ _Example(s)_: [EnvoyProxy CRD](https://gateway.envoyproxy.io/v0.6.0/user/customi First-class API field on the `GatewayClass.spec`. The field refers to a resource containing the configuration parameters corresponding to the GatewayClass. The resource referenced can be a standard Kubernetes resource, a CRD, or a ConfigMap. While GatewayClasses are cluster-scoped, resources referenced by `GatewayClass.spec.parametersRef` can be namespaced-scoped or cluster-scoped. The configuration parameters contained in the referenced resource are applied to all Gateways attached to the GatewayClass. - Example: ```yaml @@ -162,8 +160,6 @@ spec: Infrastructure labels and annotations should be applied to all resources created in response to the Gateway. This only applies to _automated deployments_ (i.e., provisioner mode), implementations that automatically deploy the data plane based on a Gateway. Other use cases for this API are Service type, Service IP, CPU memory requests, affinity rules, and Gateway routability (public, private, and cluster). -There are plans to add a `parametersRef` field to the infrastructure API on the Gateway. This field would function similarly to the GatewayClass `parametersRef` but would not have the same issues highlighted in the section above. - ### TLS Options _Role(s)_: Cluster Operator @@ -574,7 +570,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator -_Extension point:_ GatewayClass or Gateway +_Extension point:_ GatewayClass _NGINX Context(s):_ main, http, stream @@ -605,7 +601,7 @@ NGINX Plus directives: These features are grouped because they are all the responsibility of the Cluster Operator and should not be set or changed by Application Developers. -Currently, `parametersRef` is only available on the GatewayClass, which means all Gateways attached to the GatewayClass will inherit these settings. This is acceptable since NGINX Gateway Fabric supports a single Gateway per GatewayClass. However, once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/1443) and `parametersRef` is added to the Gateway Infrastructure API, then we will want to support referencing this CRD on individual Gateways. +All the Gateways attached to the GatewayClass will inherit these settings. This is acceptable since NGINX Gateway Fabric supports a single Gateway per GatewayClass. However, once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/1443), this could become an issue. It may force users to create multiple GatewayClasses in order to create Gateways with different settings. #### Future Work @@ -618,7 +614,7 @@ Add support for: #### Alternatives - ParametersRef with ConfigMap: A ConfigMap is another resource type where a user can provide configuration options. However, unlike CRDs, ConfigMaps do not have built-in schema validation, versioning, or conversion webhooks. -- Direct Policy: A Direct Policy may also work for Gateway Settings. It can be attached to a Gateway and scoped to Cluster Operators through RBAC. However, `parametersRef` provides better visibility as it is directly referenced in the Gateway resource and will be easier to manage. +- Direct Policy: A Direct Policy may also work for Gateway Settings. It can be attached to a Gateway and scoped to Cluster Operators through RBAC. It will Cluster Operators to apply settings for specific Gateways, instead of all Gateways. ### Response Modification From 5faf17c87625a43a71023f630ee210532494d71f Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Fri, 16 Feb 2024 13:38:19 -0700 Subject: [PATCH 20/33] Add note about rate limiting --- docs/proposals/nginx-extensions.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 2443601fb..f0e2702fb 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -805,6 +805,7 @@ NGINX Plus directives: #### Future Work - Add support for remote authentication or other authentication strategies. +- Consider interoperability between authentication and rate limiting, so that we can rate limit on per-user basis. #### Alternatives From 7ef572d2d0c127b9007e41578024e5d45bfed276 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 21 Feb 2024 15:33:49 -0700 Subject: [PATCH 21/33] Update authentication extension to filter --- docs/proposals/nginx-extensions.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index f0e2702fb..fb6ef55f8 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -770,15 +770,15 @@ These features are grouped because they all apply to the upstream context and ma ### Authentication -_Extension type:_ Inherited Policy +_Extension type:_ Filter _Resource type:_ CRD -_Role(s):_ Cluster Operator, Application Developer +_Role(s):_ Application Developer -_Extension point:_ Gateway, Gateway Listener, HTTPRoute Rule (once it's supported) +_Extension point:_ HTTPRoute Rule -_NGINX context(s):_ http, server, location +_NGINX context(s):_ location OSS Features: @@ -802,6 +802,10 @@ NGINX Plus directives: - [`auth_jwt_key_file`](https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html#auth_jwt_key_file) - [`auth_jwt_key_request`](https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html#auth_jwt_key_request) +While there might be a strong use case for defaults and overrides for authentication, we should begin by adding an authentication Filter, instead of jumping right to an Inherited Policy. This would allow us to roll out an authentication solution quickly to support the core use case for Application Developers. The use case for Cluster Operators applying authentication Policies is less well-known than the Application Developer's use case. Instead of leading with the Cluster Operator use case, we can begin with a Filter and wait for user feedback. Later, we can add a Policy and define how the Filter and Policy interact. + +In addition, since a Filter is referenced from a routing rule, it makes it clear to the Application Developer that authentication is applied to the route, whereas due to the discoverability issues around Policies, it wouldn't be clear to the Application Developer that authentication exists for their routes. Furthermore, if the referenced Filter does not exist, NGINX will return a 502 and the protected path will not be exposed. This isn't the case for a Policy, since a missing Policy would have no effect on routes and the protected path will be exposed to all users. + #### Future Work - Add support for remote authentication or other authentication strategies. @@ -809,7 +813,7 @@ NGINX Plus directives: #### Alternatives -- Begin with a Filter: Rather than beginning with an Inherited Policy, which is complex, we could start by adding an authentication Filter. This would allow us to roll out an authentication solution quickly to support the core use case for Application Developers. The use case for Cluster Operators applying authentication Policies is less well-known than the Application Developer's use case. Instead of leading with the Cluster Operator use case, we can begin with a Filter and wait for user feedback. Later, we can add a Policy and define how the Filter and Policy interact. +- Inherited Policy that attaches to Gateways and HTTPRoutes. Implementing authentication with an Inherited Policy will allow Cluster Operators to apply global authentication policies for applications and Application Developers to override that policy on a per-route basis. This would be more convenient for applications that use one authentication method for all of their routes. However, it may not be straightforward to apply the inheritance concepts (overrides/defaults) to some authentication methods. For example, JWT authentication may contain multiple fields: secret, realm, and token. These fields are interdependent and should not be overridden separately, but that may be difficult to enforce under the current Inheritance Policy guidelines. - Wait for Gateway API GEP on authentication: There is an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/1494) for authentication in the Gateway API repository. Instead of rolling out our own authentication solution, we could wait or even champion this GEP. The advantages of waiting are that if the GEP is implemented, we won't have to deprecate our bespoke authentication Policy in favor of the GEP's implementation, and we won't have to maintain an additional Policy. However, we don't know how long it will take the GEP to move from open to implementable. Authentication is a critical feature, and it may not be prudent to wait. ### Observability From fae899cd220d6de974cf261d164284ef585b67db Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 21 Feb 2024 15:37:57 -0700 Subject: [PATCH 22/33] Remove otel trace from gateway settings --- docs/proposals/nginx-extensions.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index fb6ef55f8..7e625a582 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -589,7 +589,6 @@ NGINX OSS directives: - [`log_format`](https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) - [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_exporter) - [`otel_service_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_service_name) -- [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace) NGINX Plus features: From c4cbe9c4f120e214968a50aaf5dc356a9c344664 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 21 Feb 2024 15:38:47 -0700 Subject: [PATCH 23/33] ClusterOperator -> Cluster Operator --- docs/proposals/nginx-extensions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 7e625a582..8f1ee3af6 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -677,7 +677,7 @@ These features are grouped because they are all TLS-related settings. TLS option #### Alternatives - Policy: A TLS or Security Policy that attaches to Gateway listeners may also work. However, that would involve maintaining an additional CRD, whereas with TLS options, we only need to document and validate a few key-value pairs. -- ParametersRef: While ParametersRef is also scoped to the ClusterOperator, it applies to all Gateways attached to the GatewayClass. Gateways can have multiple listeners with different protocols, and the TLS settings may not apply to all listeners. In addition, ClusterOperators may want to enforce different TLS settings for different TLS listeners. +- ParametersRef: While ParametersRef is also scoped to the Cluster Operator, it applies to all Gateways attached to the GatewayClass. Gateways can have multiple listeners with different protocols, and the TLS settings may not apply to all listeners. In addition, Cluster Operators may want to enforce different TLS settings for different TLS listeners. ### Client Settings @@ -705,7 +705,7 @@ NGINX directives: - [`keepalive_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout) - [`keepalive_disable`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_disable) -These features are grouped because they all deal with client traffic. An Inherited Policy fits this group best because there is a use case where the ClusterOperator sets a sane default for client max body size or client keepalives that has to be overridden by an Application Developer because of the unique attributes of the Service they own. +These features are grouped because they all deal with client traffic. An Inherited Policy fits this group best because there is a use case where the Cluster Operator sets a sane default for client max body size or client keepalives that has to be overridden by an Application Developer because of the unique attributes of the Service they own. #### Future Work From 904438aa3ae4f01271a6bf97232725a5c46c2347 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 21 Feb 2024 15:42:46 -0700 Subject: [PATCH 24/33] Add note about propagating changes from GC to gateways --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 8f1ee3af6..a5b06b404 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -124,7 +124,7 @@ spec: 1. _Permissions_: To make declarative changes to a Gateway, the Gateway owner (who has RBAC permissions to a specific Gateway) must have access to GatewayClass, a cluster-scoped resource. 2. _Scope_: If a change is made on a GatewayClass, _all_ Gateways are affected by that change. This will become an issue once we [support multiple Gateways](https://github.com/nginxinc/nginx-gateway-fabric/issues/1443). -3. _Dynamic Changes_: GatewayClasses are meant to be templates, so changes made to the GatewayClass are not expected to change deployed Gateways. This means the configuration is not dynamic. +3. _Dynamic Changes_: GatewayClasses are meant to be templates, so changes made to the GatewayClass are not expected to change deployed Gateways. This means the configuration is not dynamic. However, this is just a recommendation by the spec and is not required. If we propagate the changes from a GatewayClass to existing Gateways, we must clearly document this behavior. ### Infrastructure API From 869974e4644b7bd12015a008c781b08ba7382534 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 22 Feb 2024 11:49:53 -0700 Subject: [PATCH 25/33] Add otel span attr to gateway settings --- docs/proposals/nginx-extensions.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index a5b06b404..76b49bdb8 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -589,6 +589,7 @@ NGINX OSS directives: - [`log_format`](https://nginx.org/en/docs/http/ngx_http_log_module.html#log_format) - [`otel_exporter`](https://nginx.org/en/docs/ngx_otel_module.html#otel_exporter) - [`otel_service_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_service_name) +- [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr): set global span attributes that will be merged with the span attributes set in the [Observability extension](#observability). NGINX Plus features: From 5da37a08dada49767b1d3206ec2652f93e6f8cad Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 22 Feb 2024 11:52:28 -0700 Subject: [PATCH 26/33] Add note about target ref restrictions in Policy section --- docs/proposals/nginx-extensions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 76b49bdb8..4ce65c2b3 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -305,7 +305,7 @@ _Conformance Level_: Extended/Implementation-specific _Example(s)_: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) -Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a `TargetRef` struct in the `spec` to identify how and where to apply the Policy. This `TargetRef` can include a `sectionName` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. +Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a _single_ `TargetRef` struct in the `spec` to identify how and where to apply the Policy. This `TargetRef` can include a `sectionName` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. Example of a TargetRef that targets an entire Gateway: @@ -328,7 +328,7 @@ targetRef: namespace: default ``` -There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. +There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. The Policy GEP _may_ be extended to supported multiple `TargetRefs` and/or label selectors. Policies do not need to support attaching to all resource Kinds. Implementations can choose which resources the Policy can be attached to. From f9a69945accdac41facdbe80ca437067b2b3fe5d Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 22 Feb 2024 12:03:38 -0700 Subject: [PATCH 27/33] Add note about OTel architecture documentation --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 4ce65c2b3..fad16121b 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -839,7 +839,7 @@ NGINX directives: - [`otel_span_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_name) - [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr) -Tracing will be disabled by default. The Application Developer will be able to use this Policy to enable and configure tracing for their routes. This Policy will only be applied if the OTel endpoint as been set by the Cluster Operator on the [Gateway Settings](#gateway-settings). +Tracing will be disabled by default. The Application Developer will be able to use this Policy to enable and configure tracing for their routes. This Policy will only be applied if the OTel endpoint as been set by the Cluster Operator on the [Gateway Settings](#gateway-settings). We will also need to document that the collector architecture we support, where there is a single collector (receiver) but there can be many exporters and processors. #### Future Work From 2424ed194a5f0d154a0a55b96ec272910bd2dd95 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 22 Feb 2024 12:09:15 -0700 Subject: [PATCH 28/33] Add namespace to observability future work --- docs/proposals/nginx-extensions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index fad16121b..d30fd04ae 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -839,7 +839,7 @@ NGINX directives: - [`otel_span_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_name) - [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr) -Tracing will be disabled by default. The Application Developer will be able to use this Policy to enable and configure tracing for their routes. This Policy will only be applied if the OTel endpoint as been set by the Cluster Operator on the [Gateway Settings](#gateway-settings). We will also need to document that the collector architecture we support, where there is a single collector (receiver) but there can be many exporters and processors. +Tracing will be disabled by default. The Application Developer will be able to use this Policy to enable and configure tracing for their routes. This Policy will only be applied if the OTel endpoint as been set by the Cluster Operator on the [Gateway Settings](#gateway-settings). We will also need to document that the collector architecture we support, where there is a single collector (receiver) but there can be many exporters and processors. #### Future Work @@ -847,6 +847,7 @@ Add support for: - OTel logging - Metrics +- Allow attaching to Namespaces. With the current approach, every HTTPRoute will need its own Observability Policy. In other words, there is no way for multiple HTTPRoutes to share the same Observability Policy. If we allow attaching to Namespaces, all HTTPRoutes in a Namespace can share an Observability Policy. #### Alternatives From 5102683ca2e9abf5f53d165d2325421788371e0e Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 22 Feb 2024 13:04:06 -0700 Subject: [PATCH 29/33] Call out propagate as a trace context option --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index d30fd04ae..617c844aa 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -835,7 +835,7 @@ Features: NGINX directives: - [`otel_trace`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace): enable tracing and set sampler rate -- [`otel_trace_context`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace_context) +- [`otel_trace_context`](https://nginx.org/en/docs/ngx_otel_module.html#otel_trace_context): export, inject, propagate, ignore. - [`otel_span_name`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_name) - [`otel_span_attr`](https://nginx.org/en/docs/ngx_otel_module.html#otel_span_attr) From 06aadc0e58e3e8b7e08cfa6bf60ef77283234e8c Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Thu, 22 Feb 2024 13:06:17 -0700 Subject: [PATCH 30/33] Move timeouts to high priority --- docs/proposals/nginx-extensions.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 617c844aa..e1a92427e 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -484,6 +484,8 @@ To identify the set of NGINX directives and parameters NGINX Gateway Fabric shou | Client keepalives | | | TLS settings. For example, TLS protocols and server ciphers | | | OpenTelemetry tracing | | +| Connection timeouts | | + ### Medium-Priority Features @@ -503,7 +505,6 @@ To identify the set of NGINX directives and parameters NGINX Gateway Fabric shou | API Key authentication | | | Next upstream retries. NGINX retries by trying the _next_ server in the upstream group | | | Proxy Buffering | | -| Connection timeouts | | ### Low-Priority Features From 75da747acce5a551a1005a1ab5b1ad75dd781468 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 28 Feb 2024 11:50:31 -0700 Subject: [PATCH 31/33] May instead of must for defaults/overrides --- docs/proposals/nginx-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index e1a92427e..6e9356a5f 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -372,7 +372,7 @@ The Policy defines which resource Kinds it can be attached to. #### Inherited Policy Attachment -Inherited Policy Attachment is designed to allow settings to flow down a hierarchy. Inherited Policies must have the following fields in their specs: +Inherited Policy Attachment is designed to allow settings to flow down a hierarchy. Inherited Policies _may_ have the following fields in their specs: - `defaults`: set the default value. Can be overridden by _lower_ objects. Ex. A connection timeout default policy on a Gateway may be overridden by a connection timeout policy on an HTTPRoute. From 321f7ae1014c2be1a1057cfb0f01df82fb8bf078 Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 28 Feb 2024 12:44:26 -0700 Subject: [PATCH 32/33] Remove circuit breaker API and add backup server to upstream settings --- docs/images/nginx-functionality-groups.png | Bin 152161 -> 118132 bytes docs/proposals/nginx-extensions.md | 103 +-------------------- 2 files changed, 3 insertions(+), 100 deletions(-) diff --git a/docs/images/nginx-functionality-groups.png b/docs/images/nginx-functionality-groups.png index a0d82f9243ffa8442dacfdc237f8510dc2f27aeb..cae6111d5904eb25fc61ec352a9c75c07abcf9cd 100644 GIT binary patch literal 118132 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%0DyUWT4<7Ha^7fZ(YKJT1~$i?@<7Rkv;LP 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

w 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 Rr&QT|9}x5%`P-k5{4d@6d(Qv> literal 152161 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%0Drlx}T5k^5(7MgWO~AIT$b?+H;@mWhPbqC1>69 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 }~+HnqH56{s;41;qFu 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 AxBvhE diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index 6e9356a5f..c7d18f3cc 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -58,8 +58,6 @@ NGINX is highly configurable and offers rich features that can benefit our users - [Proxy Settings](#proxy-settings) - [Future Work](#future-work-6) - [Alternatives](#alternatives-7) - - [Circuit Breaker/ Backup service](#circuit-breaker-backup-service) - - [Options](#options) - [Testing](#testing) - [Security Considerations](#security-considerations) - [Alternatives Considered](#alternatives-considered) @@ -491,7 +489,7 @@ To identify the set of NGINX directives and parameters NGINX Gateway Fabric shou | Features | Requires NGINX Plus | |----------------------------------------------------------------------------------------|---------------------| -| Circuit breaker | | +| Backup server | | | Load-balancing method | | | Load-balancing method (least time) | X | | Limit connections to a server | | @@ -736,6 +734,7 @@ OSS Features: - Load-balancing method (all except `least_time`) - Limit connections to server - Passive health checks +- Backup server OSS NGINX directives/parameters: @@ -748,6 +747,7 @@ OSS NGINX directives/parameters: - [`max_conns`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) - [`fail_timeout`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) - [`max_fails`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) +- [`backup`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) NGINX Plus Features: @@ -891,103 +891,6 @@ NGINX directives: - Direct Policy: If there's no strong use case for the Cluster Operator setting sane defaults for these settings, then we can use a Direct Policy. The Direct Policy could attach to an HTTPRoute or HTTPRoute Rule, and the NGINX contexts would be server and location. -### Circuit Breaker/ Backup service - -_Extension type:_ BackendRef/Direct Policy - -_Resource type:_ CRD - -_Role(s):_ Application Developer - -_Extension point:_ Backend - -_NGINX context(s):_ upstream - -Features: - -- Backup service/circuit breaker - -NGINX upstream server parameters: - -- [`backup`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) - -Circuit Breaker also relies on the following NGINX upstream server parameters: - -- [`fail_timeout`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) -- [`max_fails`](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server) - -However, these parameters are also used in passive health checks, which is a part of the Upstream Settings Policy. We can either expose these settings in both extensions (not recommended by the Gateway API), or the Circuit Breaker extensions can use the values of these parameters set by the Upstream Settings Policy. - -This [NGINX blog post](https://www.nginx.com/blog/microservices-reference-architecture-nginx-circuit-breaker-pattern/) describes the circuit breaker pattern and how to implement it with NGINX plus. The solution involves active health checks, rate-limiting, caching, and the `backup` directive. While this might be a complete solution, it is likely too heavyweight for NGINX Gateway Fabric. - -The NGINX Kubernetes projects, NGINX Service Mesh and NGINX Ingress Controller offer alternatives to this solution. - -NGINX Ingress Controller supports setting a [backup Service](https://github.com/nginxinc/kubernetes-ingress/tree/release-3.4/examples/custom-resources/backup-directive/virtual-server) that will be used when the primary servers are unavailable. The backup service must be of type ExternalName. - -NGINX Service Mesh implements circuit breaking with a [CRD](https://github.com/nginxinc/nginx-service-mesh/blob/main/pkg/apis/specs/v1alpha1/circuit_breaker.go). - -Here's an example: - -```yaml -apiVersion: specs.smi.nginx.com/v1alpha1 -kind: CircuitBreaker -metadata: - name: circuit-breaker-example - namespace: default -spec: - destination: - kind: Service - name: target-svc - namespace: default - errors: 3 - timeoutSeconds: 30 - fallback: - service: default/target-backup - port: 80 -``` - -The `spec.destination` field is similar to `targetRef` in that it attaches the CircuitBreaker setting to an object. This example configures a circuit breaker that will trip when there are three errors within 30 seconds. If the circuit breaker trips, requests to the destination Service will be routed to the fallback Service. After 30 seconds, the circuit breaker will reset, and the requests will be routed to the destination Service again. This implementation uses the NGINX `max_fails`, `fail_timeout`, and `backup` upstream server parameters. - -NGINX Gateway Fabric could choose one of these approaches or design something new. It's difficult to propose an extension type for circuit breaker without more discussion and design. The next section outlines some options. - -#### Options - -- Add `backup` to Upstream Settings Policy: The `fail_timeout` and `max_fails` directives are also used in passive health checks, which is a part of the Upstream Settings Policy. Including circuit breaking -- or just the `backup` directive -- might make more sense in this Policy. This approach is similar to the NGINX Ingress Controller solution. -- Direct Policy: A Direct Policy, similar to the NGINX Service Mesh example. This Policy would target a Backend and would define a fallback Service. Optionally, this Policy could also include the `fail_timeout` and `max_fails` settings, but this could cause conflicts with the Upstream Settings Policy. -- Custom BackendRef: Allow users to configure a primary and fallback Service via a custom BackendRef that they can reference in an xRoute: - - ```yaml - apiVersion: gateway.nginx.org/v1alpha1 - kind: CircuitBreaker - metadata: - name: circuit-breaker-example - spec: - primary: - service: coffee-primary - port: 80 - fallback: - service: coffee-backup - port: 80 - --- - apiVersion: gateway.networking.k8s.io/v1 - kind: HTTPRoute - metadata: - name: custom-backend - spec: - hostnames: - - "example.com" - rules: - - matches: - - path: - type: PathPrefix - value: / - backendRefs: - - group: gateway.nginx.org/v1alpha1 - kind: CircuitBreaker - name: circuit-breaker-example - port: 80 - ``` - ## Testing Each extension will be tested with a combination of unit and system tests. The details of the tests are out of scope for this Enhancement Proposal. From f6399592578c1edccb619bf166169e1386a9dafd Mon Sep 17 00:00:00 2001 From: Kate Osborn Date: Wed, 28 Feb 2024 14:11:22 -0700 Subject: [PATCH 33/33] Update client and proxy settings policies --- docs/proposals/nginx-extensions.md | 57 ++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/docs/proposals/nginx-extensions.md b/docs/proposals/nginx-extensions.md index c7d18f3cc..694037c3c 100644 --- a/docs/proposals/nginx-extensions.md +++ b/docs/proposals/nginx-extensions.md @@ -303,7 +303,15 @@ _Conformance Level_: Extended/Implementation-specific _Example(s)_: [Envoy Gateway BackendTrafficPolicy](https://gateway.envoyproxy.io/v0.6.0/api/extension_types/#backendtrafficpolicy), [GKE HealthCheckPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/configure-gateway-resources), [BackendTLSPolicy](https://gateway-api.sigs.k8s.io/api-types/backendtlspolicy/) -Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a _single_ `TargetRef` struct in the `spec` to identify how and where to apply the Policy. This `TargetRef` can include a `sectionName` to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. +Policies are a Kubernetes object that augments the behavior of an object in a standard way. Policies can be attached to one object ("Direct Policy Attachment") or objects in a hierarchy ("Inherited Policy Attachment"). In both cases, Policies are implemented as CRDs, and they must include a _single_ `TargetRef` struct in the `spec` to identify how and where to apply the Policy. The Policy GEP _may_ be extended to supported multiple `TargetRefs` and/or label selectors. + +Policies do not need to support attaching to all resource Kinds. Implementations can choose which resources the Policy can be attached to. + +#### 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. + +A Direct Policy _may_ target a subsection of a resource using the `sectionName` field of the `targetRef`. This allows the Policy to target specific matches within nested objects, such as a Listener within a Gateway or a specific Port on a Service. Example of a TargetRef that targets an entire Gateway: @@ -326,15 +334,9 @@ targetRef: namespace: default ``` -There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. The Policy GEP _may_ be extended to supported multiple `TargetRefs` and/or label selectors. - -Policies do not need to support attaching to all resource Kinds. Implementations can choose which resources the Policy can be attached to. - -#### 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 only modifies the behavior of the object that it's bound to. +There's also an open [GEP issue](https://github.com/kubernetes-sigs/gateway-api/issues/995) to add a name field to HTTPRouteRule and HTTPRouteMatch structs to allow users to identify different routes. Once implemented, Policies can target a specific rule or match in an HTTPRoute. -Example: +The BackendTLSPolicy is an example of a Direct Policy Attachment: ```yaml apiVersion: gateway.networking.k8s.io/v1alpha2 @@ -355,7 +357,7 @@ spec: hostname: secure-app.example.com ``` -This BackendTLSPolicy is an example of a Direct Policy Attachment. It targets the `secure-app` Service in the `default` Namespace. The TLS configuration in the `backend-tls` Policy will be applied for all Routes that reference the `secure-app` Service. +This example targets the `secure-app` Service in the `default` Namespace. The TLS configuration in the `backend-tls` Policy will be applied for all Routes that reference the `secure-app` Service. When to use Direct Policy Attachment: @@ -445,6 +447,19 @@ Default values are given precedence from the bottom up. A default attached to a Inherited Policies do not need to support policy attachment to each resource shown in the hierarchy. Implementations can choose which resources the Policy can attach to. +#### Direct or Indirect? + +| Direct | Indirect | +|-------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------| +| Affects ONLY the object it targets | Affects more objects that the targeted object | +| Requires no extra knowledge beyond the Policy and target object | Requires knowledge of resources other than the Policy and target object to understand the state of the system | +| Does not include defaults or overrides | May include defaults and/or overrides | +| Should only support attaching to a single Kind | Can support attaching to multiple Kinds | +| May target a subsection of a resource using the `sectionName` field of the `targetRef` struct | Does not target a subsection of a resource | + + +> If a Policy can be used as an Inherited Policy, it MUST be treated as an Inherited Policy, regardless of whether a specific instance of the Policy is only affecting a single object. + #### Challenges of Policy Attachment _Status and the Discoverability problem_ @@ -687,7 +702,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator -_Extension point:_ Gateway, Gateway Listener, HTTPRoute +_Extension point:_ Gateway, HTTPRoute _NGINX context(s)_: http, server, location @@ -705,7 +720,14 @@ NGINX directives: - [`keepalive_timeout`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_timeout) - [`keepalive_disable`](https://nginx.org/en/docs/http/ngx_http_core_module.html#keepalive_disable) -These features are grouped because they all deal with client traffic. An Inherited Policy fits this group best because there is a use case where the Cluster Operator sets a sane default for client max body size or client keepalives that has to be overridden by an Application Developer because of the unique attributes of the Service they own. +These features are grouped because they all deal with client traffic. + +An Inherited Policy fits this group best for the following reasons: + +- A Cluster Operator may want to set defaults for client max body size or client keepalives. +- An Application Developer may want to override these defaults because of the unique attributes of their applications. +- Since these settings are available in the http, server, and location contexts, there is already inheritance involved. For example, setting the client max body size in the http context, sets the client max body size of all the servers and locations. While setting the client max body size of server `example.com` will override the size set in the http context. +- If this policy is applied to a Gateway is will affect all the Routes attached to the Gateway, which is one of the traits of an Inherited Policy. #### Future Work @@ -713,7 +735,7 @@ These features are grouped because they all deal with client traffic. An Inherit #### Alternatives -- Direct Policy: A Direct Policy isn't a good fit for client settings because it does not support overrides and defaults. +- Direct Policy: A Direct Policy isn't a good fit because the NGINX directives included in this policy are available at the http, server, and location contexts. NGINX's inheritance behavior among these contexts does not suit Direct Policy attachment. A client settings policy attached to a Gateway will affect all the Routes attached to the Gateway. This violates the Direct Policy requirement that the policy should only affect the object it attaches to. If we only support attaching this policy to an HTTPRoute, we could use a Direct Policy. However, we want to allow the Cluster Operator to configure defaults for these client settings, which means we need to support attaching to Gateways as well as HTTPRoutes. ### Upstream Settings @@ -863,7 +885,7 @@ _Resource type:_ CRD _Role(s):_ Cluster Operator, Application Developer -_Extension point:_ Gateway, HTTPRoute, HTTPRoute Rule +_Extension point:_ Gateway, HTTPRoute _NGINX context(s):_ http, server, location @@ -883,6 +905,13 @@ NGINX directives: - [`proxy_next_upstream_retries`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream_tries) - [`proxy_buffering`](https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering) +An Inherited Policy fits this group best for the following reasons (same reasons as [Client Settings](#client-settings): + +- A Cluster Operator may want to set defaults for proxy settings. +- An Application Developer may want to override these defaults because of the unique attributes of their application. +- Since these settings are available in the http, server, and location contexts, there is already inheritance involved. For example, setting the proxy connect timeout in the http context, sets the proxy connect timeout of all the servers and locations. While setting the proxy connect timeout of server `example.com` will override the size set in the http context. +- If this policy is applied to a Gateway is will affect all the Routes attached to the Gateway, which is one of the traits of an Inherited Policy. + #### Future Work - Add other `proxy_*` directives