Skip to content

Commit d57bd02

Browse files
authored
Merge pull request #1975 from wallarm/f5-nginx-ic-positioning
F5 nginx ic positioning
2 parents 9bff01e + 24d256f commit d57bd02

File tree

8 files changed

+282
-103
lines changed

8 files changed

+282
-103
lines changed

docs/6.x/admin-en/configure-kubernetes-en.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,15 @@
33

44
# Fine‑tuning of NGINX-based Wallarm Ingress Controller
55

6+
!!! warning "Community-based NGINX Ingress Controller — end of support"
7+
Official support of the Community-based NGINX Ingress Controller ends in **April 2026**. This controller will remain functional but will no longer receive updates, bug fixes, or security patches.
8+
9+
Wallarm has released a **new Ingress Controller** based on the [F5 NGINX Ingress Controller](https://docs.wallarm.com/7.x/admin-en/installation-kubernetes-en/). We strongly recommend migrating to this version for continued support and security updates.
10+
11+
[Deploy the new F5-based Ingress Controller →](https://docs.wallarm.com/7.x/admin-en/installation-kubernetes-en/)
12+
13+
[Migration guide →](https://docs.wallarm.com/7.x/updating-migrating/ingress-controller/)
14+
615
Learn fine-tuning options available for the self-hosted Wallarm Ingress controller to get the most out of the Wallarm solution.
716

817
!!! info "Official documentation for NGINX Ingress Controller"

docs/6.x/admin-en/installation-kubernetes-en.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,18 @@
1818

1919
# Deploying NGINX Ingress Controller with Integrated Wallarm Services
2020

21-
These instructions provide you with the steps to deploy the Wallarm NGINX-based Ingress controller to your K8s cluster. The solution is deployed from the Wallarm Helm chart.
21+
!!! warning "Community-based NGINX Ingress Controller — end of support"
22+
Official support of the Community-based NGINX Ingress Controller ends in **April 2026**. This controller will remain functional but will no longer receive updates, bug fixes, or security patches.
2223

23-
The solution is built on the [Community Ingress NGINX Controller](https://github.com/kubernetes/ingress-nginx) with integrated Wallarm services. The latest version uses Community Ingress NGINX Controller 1.15.0 with NGINX stable 1.27.1, the upstream Helm chart 4.15.0, and Alpine Linux 3.23.3 as the base image.
24+
Wallarm has released a **new Ingress Controller** based on the [F5 NGINX Ingress Controller](https://docs.wallarm.com/7.x/admin-en/installation-kubernetes-en/). We strongly recommend migrating to this version for continued support and security updates.
2425

25-
!!! warning
26-
The Kubernetes community will [retire the Community Ingress NGINX in March 2026](https://blog.nginx.org/blog/the-ingress-nginx-alternative-open-source-nginx-ingress-controller-for-the-long-term). The Wallarm NGINX Ingress Controller based on this project will be supported through the same date. You can continue using it until then, and it will remain fully functional during the support window.
26+
[Deploy the new F5-based Ingress Controller →](https://docs.wallarm.com/7.x/admin-en/installation-kubernetes-en/)
2727

28-
Wallarm will provide alternative deployment options and migration guidance as they become available. [Details][nginx-ingress-retirement-plan]
28+
[Migration guide →](https://docs.wallarm.com/7.x/updating-migrating/ingress-controller/)
2929

30-
An [Envoy/Istio-based connector][envoy-connector] is also available today for environments already using Envoy.
30+
These instructions provide you with the steps to deploy the Wallarm NGINX-based Ingress controller to your K8s cluster. The solution is deployed from the Wallarm Helm chart.
31+
32+
The solution is built on the [Community Ingress NGINX Controller](https://github.com/kubernetes/ingress-nginx) with integrated Wallarm services. The latest version uses Community Ingress NGINX Controller 1.15.0 with NGINX stable 1.27.1, the upstream Helm chart 4.15.0, and Alpine Linux 3.23.3 as the base image.
3133

3234
It has the following architecture:
3335

docs/latest/admin-en/configure-kubernetes-en.md

Lines changed: 109 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ config:
4040
existingSecret:
4141
enabled: false
4242
fallback: "on"
43+
wstoreMaxConns: 2
4344

4445
wcliPostanalytics:
4546
logLevel: "WARN"
@@ -111,6 +112,10 @@ controller:
111112

112113
annotations: {}
113114

115+
nginxReloadTimeout: 60000
116+
117+
enableConfigSafety: false
118+
114119
wallarm:
115120
metrics:
116121
enabled: false
@@ -168,6 +173,13 @@ controller:
168173
metricRelabelings: []
169174
extraEnvs: []
170175

176+
apiFirewall:
177+
resources: {}
178+
securityContext: {}
179+
livenessProbeEnabled: false
180+
readinessProbeEnabled: false
181+
extraEnvs: []
182+
171183
extraVolumes: []
172184

173185
extraVolumeMounts: []
@@ -423,6 +435,7 @@ postanalytics:
423435
serviceAddress: "0.0.0.0:3313"
424436
serviceProtocol: "tcp4"
425437
resources: {}
438+
securityContext: {}
426439
livenessProbe:
427440
failureThreshold: 3
428441
initialDelaySeconds: 5
@@ -533,6 +546,8 @@ prometheusExtended:
533546
port: 10113
534547
portName: prom-ext
535548
endpointPath: "/vts-status"
549+
# detailedCodes: ""
550+
# shmSize: ""
536551
service:
537552
create: false
538553
annotations: {}
@@ -671,6 +686,12 @@ Controls [fallback behavior][fallback] when Wallarm data (for example, [`proton.
671686

672687
**Default value**: `"on"`
673688

689+
#### config.wallarm.wstoreMaxConns
690+
691+
Maximum number of simultaneous connections to the wstore upstream. Do not change unless advised by Wallarm support.
692+
693+
**Default value**: `2`
694+
674695
### Wallarm wcli parameters
675696

676697
#### config.wcliPostanalytics.logLevel
@@ -1111,13 +1132,63 @@ postanalytics:
11111132
| `mutualTLS.enabled` | Enables mutual TLS (mTLS), where both the Filtering Node and the postanalytics module verify each other's identity via certificates. By default, `false` (disabled). | No |
11121133
| `mutualTLS.clientCACertFile` | Specifies the path to a trusted Certificate Authority (CA) certificate used to validate the TLS certificate presented by the Filtering Node. | Yes if using a custom CA |
11131134

1114-
### Other parameters
1135+
### Controller parameters
1136+
1137+
#### controller.nginxReloadTimeout
1138+
1139+
Timeout in milliseconds which the Ingress Controller will wait for a successful NGINX reload after a configuration change or at the initial start. Increase this value if you have a large number of Ingress resources that cause slow reloads.
1140+
1141+
**Default value**: `60000`
1142+
1143+
#### controller.enableConfigSafety
1144+
1145+
Enables NGINX configuration validation before applying a reload. When enabled, the controller verifies the generated config with `nginx -t` prior to reloading, preventing broken configurations from being applied.
1146+
1147+
**Default value**: `false`
1148+
1149+
### API Specification Enforcement container parameters
1150+
1151+
#### controller.wallarm.apiFirewall.resources
1152+
1153+
Kubernetes resource requests and limits for the [API Specification Enforcement][api-firewall] container running in the `controller` pod. Set these to ensure proper resource allocation in production.
1154+
1155+
**Default value**: `{}`
1156+
1157+
#### controller.wallarm.apiFirewall.securityContext
1158+
1159+
Kubernetes security context for the [API Specification Enforcement][api-firewall] container.
1160+
1161+
**Default value**: `{}`
1162+
1163+
#### controller.wallarm.apiFirewall.livenessProbeEnabled
11151164

1116-
#### controller.wallarm.initContainer.extraEnvs
1165+
Enables the liveness probe for the [API Specification Enforcement][api-firewall] container. When enabled, Kubernetes periodically checks the health endpoint and restarts the container if it becomes unresponsive.
1166+
1167+
**Default value**: `false`
11171168

1118-
Additional environment variables to pass to the init container.
1169+
#### controller.wallarm.apiFirewall.readinessProbeEnabled
1170+
1171+
Enables the readiness probe for the [API Specification Enforcement][api-firewall] container. When enabled, the container is only marked as ready after passing the readiness check.
1172+
1173+
**Default value**: `false`
11191174

1120-
The example below shows how to pass the `https_proxy` and `no_proxy` variables. This setup directs outgoing HTTPS traffic through a designated proxy, while local traffic bypasses it. This configuration is important when external traffic, such as to the Wallarm API, must go through a proxy for security reasons.
1175+
### Extra environment variables for containers
1176+
1177+
You can pass additional environment variables to any Wallarm container. This is useful for configuring proxy settings, custom logging, or injecting secrets.
1178+
1179+
The following containers support the `extraEnvs` parameter:
1180+
1181+
| Parameter | Container |
1182+
| --------- | --------- |
1183+
| `controller.wallarm.initContainer.extraEnvs` | Init container (node registration) in the controller pod |
1184+
| `controller.wallarm.wcli.extraEnvs` | Wallarm CLI container in the controller pod |
1185+
| `controller.wallarm.apiFirewall.extraEnvs` | API Specification Enforcement container in the controller pod |
1186+
| `postanalytics.extraEnvs` | Wstore container in the postanalytics pod |
1187+
| `postanalytics.initContainer.extraEnvs` | Init container in the postanalytics pod |
1188+
| `postanalytics.wcli.extraEnvs` | Wallarm CLI container in the postanalytics pod |
1189+
| `postanalytics.appstructure.extraEnvs` | Appstructure container in the postanalytics pod |
1190+
1191+
Example — passing proxy settings to the init container:
11211192

11221193
```yaml
11231194
controller:
@@ -1129,6 +1200,32 @@ controller:
11291200
value: https://1.1.1.1:3128
11301201
```
11311202

1203+
### Postanalytics security context
1204+
1205+
#### postanalytics.securityContext
1206+
1207+
Kubernetes security context for the wstore container. Use this to configure security constraints in restricted environments (e.g., OpenShift, Pod Security Standards).
1208+
1209+
**Default value**: `{}`
1210+
1211+
### Extended Prometheus metrics parameters
1212+
1213+
#### prometheusExtended.shmSize
1214+
1215+
Shared memory zone size for the VTS (Virtual Host Traffic Status) module. Controls how much data can be stored for extended metrics collection. Increase this if you have a large number of virtual hosts or upstreams and see VTS-related errors in NGINX logs.
1216+
1217+
Examples: `"1m"`, `"10m"`, `"32m"`.
1218+
1219+
**Default value**: `"10m"` (if not set)
1220+
1221+
#### prometheusExtended.detailedCodes
1222+
1223+
Specifies which HTTP status codes to track in detail. By default, VTS aggregates response codes into classes (2xx, 3xx, etc.). This parameter allows tracking individual status codes.
1224+
1225+
Examples: `"all"`, `"200 301 302 400 403 404 500 502 503"`.
1226+
1227+
**Default value**: not set (codes are aggregated by class)
1228+
11321229
### Annotation validation
11331230

11341231
NGINX Ingress Controller validates annotations by itself. If an Ingress has invalid annotation values, the controller rejects/ignores that Ingress configuration and reports it via Kubernetes Events (for example, a Rejected event). [See "Advanced configuration with Annotations"](https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations/).
@@ -1166,18 +1263,18 @@ Besides the Wallarm-specific annotations described below, [standard NGINX Ingres
11661263
!!! info "Annotation prefix"
11671264
In the F5-based controller, annotations use the `nginx.org/*` prefix instead of `nginx.ingress.kubernetes.io/*`. This applies to both general NGINX annotations and Wallarm-specific annotations. [See more details][new-annotations].
11681265

1169-
| Annotation | Description |
1170-
| --- | --- |
1171-
| `nginx.org/wallarm-mode` | [Traffic filtration mode](../admin-en/configure-wallarm-mode.md): `monitoring` (default), `safe_blocking`, `block` or `off`. |
1172-
| `nginx.org/wallarm-mode-allow-override` | Manages the [ability to override the `wallarm_mode values` via settings in the Cloud](../admin-en/configure-wallarm-mode.md#prioritization-of-methods): `on` (default), `off` or `strict`. |
1173-
| `nginx.org/wallarm-fallback` | [Wallarm fallback mode](../admin-en/configure-parameters-en.md#wallarm_fallback) : `on` (default) or `off`. |
1266+
| Annotation | Description |
1267+
| --- | --- |
1268+
| `nginx.org/wallarm-mode` | [Traffic filtration mode](../admin-en/configure-wallarm-mode.md): `monitoring` (default), `safe_blocking`, `block` or `off`. |
1269+
| `nginx.org/wallarm-mode-allow-override` | Manages the [ability to override the `wallarm_mode values` via settings in the Cloud](../admin-en/configure-wallarm-mode.md#prioritization-of-methods): `on` (default), `off` or `strict`. |
1270+
| `nginx.org/wallarm-fallback` | [Wallarm fallback mode](../admin-en/configure-parameters-en.md#wallarm_fallback) : `on` (default) or `off`. |
11741271
| `nginx.org/wallarm-application` | [Wallarm application ID](../user-guides/settings/applications.md). |
11751272
| `nginx.org/wallarm-block-page` | [Blocking page and error code](../admin-en/configuration-guides/configure-block-page-and-code.md) to return to blocked requests. |
11761273
| `nginx.org/wallarm-unpack-response` | Whether to decompress compressed data returned in the application response: `on` (default) or `off`. |
11771274
| `nginx.org/wallarm-parse-response` | Whether to analyze the application responses for attacks: `on` (default) or `off`. Response analysis is required for vulnerability detection during [passive detection](../about-wallarm/detecting-vulnerabilities.md#passive-detection) and [threat replay testing](../about-wallarm/detecting-vulnerabilities.md#threat-replay-testing-trt). |
11781275
| `nginx.org/wallarm-parse-websocket` | Wallarm has full WebSockets support. By default, the WebSockets' messages are not analyzed for attacks. To force the feature, activate the API Security [subscription plan](../about-wallarm/subscription-plans.md#core-subscription-plans) and use this annotation: `on` or `off` (default). |
11791276
| `nginx.org/wallarm-parser-disable` | Allows to disable [parsers](../user-guides/rules/request-processing.md). The directive values correspond to the name of the parser to be disabled, e.g. `json`. Multiple parsers can be specified, dividing by semicolon, e.g. `json;base64`. |
1180-
| `nginx.org/wallarm-partner-client-uuid` | Partner client [UUID](../updating-migrating/older-versions/multi-tenant.md#get-uuids-of-your-tenants) for multi-tenant setups. |
1277+
| `nginx.org/wallarm-partner-client-uuid` | Partner client [UUID](../updating-migrating/older-versions/multi-tenant.md#get-uuids-of-your-tenants) for multi-tenant setups. |
11811278

11821279
### Applying annotation to the Ingress resource
11831280

@@ -1226,7 +1323,7 @@ You can control the [**libdetection**](../admin-en/configure-parameters-en.md#wa
12261323
* (Cluster‑wide) Uses the controller `ConfigMap` (via `controller.config.entries`) to apply the setting globally to the Ingress Controller:
12271324

12281325
```bash
1229-
helm upgrade --reuse-values <INGRESS_CONTROLLER_RELEASE_NAME> ./charts/nginx-ingress -n <KUBERNETES_NAMESPACE> \
1326+
helm upgrade --reuse-values <INGRESS_CONTROLLER_RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE> \
12301327
--set-string controller.config.entries.server-snippets="wallarm_enable_libdetection off;"
12311328
```
12321329

@@ -1235,7 +1332,7 @@ You can control the [**libdetection**](../admin-en/configure-parameters-en.md#wa
12351332

12361333
## Wallarm policy custom resource definition (CRD)
12371334

1238-
The F5-based controller supports [Custom Resource Definitions](https://docs.nginx.com/nginx-ingress-controller/configuration/virtualserver-and-virtualserverroute-resources/) as an alternative to standard Ingress resources for advanced routing (canary deployments, traffic splitting, header-based routing).
1335+
The F5-based controller supports [Custom Resource Definitions](https://docs.nginx.com/nginx-ingress-controller/configuration/virtualserver-and-virtualserverroute-resources/) as an alternative to standard Ingress resources for advanced routing (canary deployments, traffic splitting, header-based routing). All [standard F5 NGINX Ingress Controller CRDs](https://docs.nginx.com/nginx-ingress-controller/configuration/global-configuration/custom-resources/) are available.
12391336

12401337
When using CRDs, Wallarm settings are configured via the **Policy** resource instead of annotations. Wallarm patches the upstream Policy CRD to add an optional `spec.wallarm` block — an alternative to Wallarm annotations that provides the same set of settings through a dedicated resource. The Policy is then referenced from `VirtualServer` or `VirtualServerRoute` routes.
12411338

docs/latest/admin-en/installation-kubernetes-en.md

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
These instructions provide you with the steps to deploy the Wallarm NGINX-based Ingress controller to your K8s cluster. The solution is deployed from the Wallarm Helm chart.
2222

23-
The solution is based on the [F5 NGINX Ingress Controller][new-ic] with integrated Wallarm services. It uses the NGINX Ingress Controller image version 5.3.3. The Wallarm controller image is built on NGINX stable 1.29.x and uses Alpine Linux 3.23 as the base image.
23+
The solution is based on the [F5 NGINX Ingress Controller][new-ic] with integrated Wallarm services. It uses the NGINX Ingress Controller image version 5.4.0. The Wallarm controller image is built on NGINX stable 1.29.x and uses Alpine Linux 3.23 as the base image.
2424

2525
!!! info "Migrating from Community-based solution"
2626
If you currently have the Wallarm NGINX Ingress Controller based on the Community NGINX Ingress Controller, refer to the [migration guide][migration-doc] for instructions on migrating to this F5-based solution.
@@ -48,10 +48,6 @@ Among all supported [Wallarm deployment options][deployment-platform-docs], this
4848

4949
--8<-- "../include/waf/installation/requirements-nginx-ingress-controller-latest-7.x.md"
5050

51-
!!! info "See also"
52-
* [What is Ingress?](https://kubernetes.io/docs/concepts/services-networking/ingress/)
53-
* [Installation of Helm](https://helm.sh/docs/intro/install/)
54-
5551
## Known restrictions
5652

5753
* Operation without the Postanalytics module is not supported.
@@ -119,7 +115,7 @@ Generate a [Node API token][node-token-types]:
119115
1. Install the Wallarm packages:
120116
121117
```bash
122-
helm install --version 7.0.0-rc1 <RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE> -f <PATH_TO_VALUES>
118+
helm install --version 7.0.0 <RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE> -f <PATH_TO_VALUES>
123119
```
124120
125121
* `<RELEASE_NAME>` is the name for the Helm release of the Ingress controller chart

0 commit comments

Comments
 (0)