Skip to content

Commit 05f7f25

Browse files
authored
Merge branch 'main' into n4a-landing
2 parents c073d82 + 44bd9f6 commit 05f7f25

File tree

27 files changed

+2854
-785
lines changed

27 files changed

+2854
-785
lines changed

_banners/eos-acm.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{{< banner "warning" "End of Sale Notice:" >}}
2+
<br>
3+
F5 NGINX is announcing the <strong>End of Sale (EoS)</strong> for NGINX Management Suite API Connectivity Manager Module, <strong>effective January 1, 2024</strong>.
4+
<br><br>
5+
F5 maintains generous lifecycle policies that allow customers to continue support and receive product updates. Existing API Connectivity Manager Module customers can continue to use the product past the EoS date. <strong>License renewals are not available after September 30, 2024.</strong>
6+
<br><br>
7+
See our <a href="https://my.f5.com/manage/s/article/K000137989">End of Sale announcement</a> for more details.
8+
{{</ banner >}}

_banners/eos-mesh.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{{< banner "warning" "End of Sale Notice:" >}}
2-
<br>
3-
F5 NGINX is announcing the <strong>End of Sale (EoS)</strong> for NGINX Management Suite API Connectivity Manager Module, <strong>effective January 1, 2024</strong>.
4-
<br><br>
5-
F5 maintains generous lifecycle policies that allow customers to continue support and receive product updates. Existing API Connectivity Manager Module customers can continue to use the product past the EoS date. <strong>License renewals are not available after September 30, 2024.</strong>
6-
<br><br>
7-
See our <a href="https://my.f5.com/manage/s/article/K000137989">End of Sale announcement</a> for more details.
2+
<p>
3+
Commercial support for NGINX Service Mesh is available to customers who currently have active NGINX Microservices Bundle subscriptions. F5 NGINX announced the End of Sale (EoS) for the NGINX Microservices Bundles as of <strong>July 1, 2023</strong>.
4+
</p>
5+
<p>
6+
See our <a href="https://my.f5.com/manage/s/article/K000135468">End of Sale announcement</a> for more details.
7+
</p>
88
{{</ banner >}}

content/includes/nap-waf/config/common/nginx-app-protect-waf-terminology.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
---
22
nd-docs: "DOCS-1605"
3+
files:
4+
- content/nap-waf/v5/configuration-guide/configuration.md
5+
- content/nginx-one/glossary.md
36
---
47

58
This guide assumes that you have some familiarity with various Layer 7 (L7) Hypertext Transfer Protocol (HTTP) concepts, such as Uniform Resource Identifier (URI)/Uniform Resource Locator (URL), method, header, cookie, status code, request, response, and parameters.
@@ -26,4 +29,4 @@ This guide assumes that you have some familiarity with various Layer 7 (L7) Hype
2629
|Tuning | Making manual changes to an existing security policy to reduce false positives and increase the policy’s security level. |
2730
|URI/URL | The Uniform Resource Identifier (URI) specifies the name of a web object in a request. A Uniform Resource Locator (URL) specifies the location of an object on the Internet. For example, in the web address, `http://www.siterequest.com/index.html`, index.html is the URI, and the URL is `http://www.siterequest.com/index.html`. In NGINX App Protect WAF, the terms URI and URL are used interchangeably. |
2831
|Violation | Violations occur when some aspect of a request or response does not comply with the security policy. You can configure the blocking settings for any violation in a security policy. When a violation occurs, the system can Alarm or Block a request (blocking is only available when the enforcement mode is set to Blocking). |
29-
{{</bootstrap-table>}}
32+
{{</bootstrap-table>}}

content/ngf/get-started.md

Lines changed: 128 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,76 @@ The YAML code in the following sections can be found in the [cafe-example folder
132132

133133
### Create the application resources
134134

135-
Create the file _cafe.yaml_ with the following contents:
136-
137-
{{< ghcode `https://raw.githubusercontent.com/nginx/nginx-gateway-fabric/refs/heads/main/examples/cafe-example/cafe.yaml`>}}
138-
139-
Apply it using `kubectl`:
140-
141-
```shell
135+
Run the following command to create the file _cafe.yaml_, which is then used to deploy the *coffee* application to your cluster:
136+
137+
```yaml
138+
cat <<EOF > cafe.yaml
139+
apiVersion: apps/v1
140+
kind: Deployment
141+
metadata:
142+
name: coffee
143+
spec:
144+
replicas: 1
145+
selector:
146+
matchLabels:
147+
app: coffee
148+
template:
149+
metadata:
150+
labels:
151+
app: coffee
152+
spec:
153+
containers:
154+
- name: coffee
155+
image: nginxdemos/nginx-hello:plain-text
156+
ports:
157+
- containerPort: 8080
158+
---
159+
apiVersion: v1
160+
kind: Service
161+
metadata:
162+
name: coffee
163+
spec:
164+
ports:
165+
- port: 80
166+
targetPort: 8080
167+
protocol: TCP
168+
name: http
169+
selector:
170+
app: coffee
171+
---
172+
apiVersion: apps/v1
173+
kind: Deployment
174+
metadata:
175+
name: tea
176+
spec:
177+
replicas: 1
178+
selector:
179+
matchLabels:
180+
app: tea
181+
template:
182+
metadata:
183+
labels:
184+
app: tea
185+
spec:
186+
containers:
187+
- name: tea
188+
image: nginxdemos/nginx-hello:plain-text
189+
ports:
190+
- containerPort: 8080
191+
---
192+
apiVersion: v1
193+
kind: Service
194+
metadata:
195+
name: tea
196+
spec:
197+
ports:
198+
- port: 80
199+
targetPort: 8080
200+
protocol: TCP
201+
name: http
202+
selector:
203+
app: tea
204+
EOF
142205
kubectl apply -f cafe.yaml
143206
```
144207

@@ -163,13 +226,22 @@ tea-6fbfdcb95d-9lhbj 1/1 Running 0 9s
163226

164227
### Create Gateway and HTTPRoute resources
165228

166-
Create the file _gateway.yaml_ with the following contents:
167-
168-
{{< ghcode `https://raw.githubusercontent.com/nginx/nginx-gateway-fabric/refs/heads/main/examples/cafe-example/gateway.yaml`>}}
169-
170-
Apply it using `kubectl`:
171-
172-
```shell
229+
Run the following command to create the file _gateway.yaml_, which is then used to deploy a Gateway to your cluster:
230+
231+
```yaml
232+
cat <<EOF > gateway.yaml
233+
apiVersion: gateway.networking.k8s.io/v1
234+
kind: Gateway
235+
metadata:
236+
name: gateway
237+
spec:
238+
gatewayClassName: nginx
239+
listeners:
240+
- name: http
241+
port: 80
242+
protocol: HTTP
243+
hostname: "*.example.com"
244+
EOF
173245
kubectl apply -f gateway.yaml
174246
```
175247

@@ -190,13 +262,48 @@ gateway-nginx-66b5d78f8f-4fmtb 1/1 Running 0 13s
190262
tea-6fbfdcb95d-9lhbj 1/1 Running 0 31s
191263
```
192264

193-
Create the file _cafe-routes.yaml_ with the following contents:
194-
195-
{{< ghcode `https://raw.githubusercontent.com/nginx/nginx-gateway-fabric/refs/heads/main/examples/cafe-example/cafe-routes.yaml`>}}
196-
197-
Apply it using `kubectl`:
198-
199-
```shell
265+
Run the following command to create the file _cafe-routes.yaml_. It is then used to deploy two *HTTPRoute* resources in your cluster: one each for _/coffee_ and _/tea_.
266+
267+
```yaml
268+
cat <<EOF > cafe-routes.yaml
269+
apiVersion: gateway.networking.k8s.io/v1
270+
kind: HTTPRoute
271+
metadata:
272+
name: coffee
273+
spec:
274+
parentRefs:
275+
- name: gateway
276+
sectionName: http
277+
hostnames:
278+
- "cafe.example.com"
279+
rules:
280+
- matches:
281+
- path:
282+
type: PathPrefix
283+
value: /coffee
284+
backendRefs:
285+
- name: coffee
286+
port: 80
287+
---
288+
apiVersion: gateway.networking.k8s.io/v1
289+
kind: HTTPRoute
290+
metadata:
291+
name: tea
292+
spec:
293+
parentRefs:
294+
- name: gateway
295+
sectionName: http
296+
hostnames:
297+
- "cafe.example.com"
298+
rules:
299+
- matches:
300+
- path:
301+
type: Exact
302+
value: /tea
303+
backendRefs:
304+
- name: tea
305+
port: 80
306+
EOF
200307
kubectl apply -f cafe-routes.yaml
201308
```
202309

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
title: Permissions
3+
description: NGINX Gateway Fabric permissions required by components.
4+
weight: 300
5+
toc: true
6+
type: reference
7+
product: NGF
8+
---
9+
10+
## Overview
11+
12+
NGINX Gateway Fabric uses a split-plane architecture with three components that require different permissions:
13+
14+
- **Control Plane**: Manages Kubernetes APIs and data plane deployments. Needs broad API access but handles no user traffic.
15+
- **Data Plane**: Processes user traffic. Requires minimal permissions since configuration comes from control plane via secure gRPC.
16+
- **Certificate Generator**: One-time job that creates TLS certificates for inter-plane communication.
17+
18+
## Security Context
19+
20+
All components share these security settings:
21+
22+
- **User ID**: 101 (non-root)
23+
- **Group ID**: 1001
24+
- **Capabilities**: All dropped (`drop: ALL`)
25+
- **Root Filesystem**: Read-only except for specific writable volumes
26+
- **Seccomp**: Runtime default profile
27+
28+
## Control Plane
29+
30+
Runs as a single container in the `nginx-gateway` deployment.
31+
32+
**Additional Security Settings:**
33+
- **Privilege Escalation**: Disabled
34+
35+
**Volumes:**
36+
- Secret mounts for TLS certificates
37+
38+
**RBAC Permissions:**
39+
- **Secrets, ConfigMaps, Services**: Create, update, delete, list, get, watch
40+
- **Deployments, DaemonSets**: Create, update, delete, list, get, watch
41+
- **ServiceAccounts**: Create, update, delete, list, get, watch
42+
- **Namespaces, Pods**: Get, list, watch
43+
- **Events**: Create, patch
44+
- **EndpointSlices**: List, watch
45+
- **Gateway API resources**: List, watch (read-only) + update status subresources only
46+
- **NGF Custom resources**: Get, list, watch (read-only) + update status subresources only
47+
- **Leases**: Create, get, update (for leader election)
48+
- **CustomResourceDefinitions**: List, watch
49+
- **TokenReviews**: Create (for authentication)
50+
51+
## Data Plane
52+
53+
NGINX containers managed by the control plane. No RBAC permissions needed since configuration comes via secure gRPC.
54+
55+
**Additional Security Settings:**
56+
- **Privilege Escalation**: Disabled
57+
- **Sysctl**: `net.ipv4.ip_unprivileged_port_start=0` (enables binding to ports < 1024)
58+
59+
**Volumes:**
60+
- EmptyDir volumes for NGINX configuration, runtime files, logs, and cache
61+
- Secret mounts for TLS certificates and the NGINX Plus JWT token
62+
- Projected token mounts for service account authentication
63+
64+
**Volume Permissions:**
65+
- **EmptyDir**: Read-write (required for NGINX operation)
66+
- **Secret/ConfigMap/Projected**: Read-only
67+
68+
## Certificate Generator
69+
70+
Kubernetes Job that creates initial TLS certificates.
71+
72+
**RBAC Permissions:**
73+
- **Secrets**: Create, update, get (control plane namespace only)
74+
75+
## Platform-Specific Considerations
76+
77+
### OpenShift Compatibility
78+
79+
NGINX Gateway Fabric includes Security Context Constraints (SCCs) for OpenShift:
80+
81+
**Control Plane SCC:**
82+
- **Privilege Escalation**: Disabled
83+
- **Host Access**: Disabled (network, IPC, PID, ports)
84+
- **User ID Range**: 101-101 (fixed)
85+
- **Group ID Range**: 1001-1001 (fixed)
86+
- **Volumes**: Secret only
87+
88+
**Data Plane SCC:**
89+
Same restrictions as control plane, plus additional volume types:
90+
- **Additional Volumes**: EmptyDir, ConfigMap, Projected
91+
92+
### Linux Capabilities
93+
94+
NGINX Gateway Fabric drops ALL Linux capabilities and adds none, following security best practices.
95+
96+
**How It Works Without Capabilities:**
97+
- **Process Management**: Standard Unix signals (no elevated privileges needed)
98+
- **Port Binding**: Uses sysctl `net.ipv4.ip_unprivileged_port_start=0` for ports < 1024
99+
- **File Operations**: Volume mounts provide necessary write access
100+
101+
102+
## Security Features
103+
104+
- **Separation of concerns**: Control plane (API access, no traffic) vs data plane (traffic, no API access)
105+
- **Non-root execution**: All components run as unprivileged user (UID 101)
106+
- **Zero capabilities**: All Linux capabilities dropped
107+
- **Read-only root filesystem**: Prevents runtime modifications
108+
- **Ephemeral storage**: Temporary volumes only, no persistent storage
109+
- **Least privilege RBAC**: Minimal required permissions per component
110+
- **Secure communication**: mTLS-encrypted gRPC (TLS 1.3+) between planes

content/nginx-one/_index.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ F5 NGINX One Console makes it easy to manage NGINX instances across locations an
1919
[//]: # "You can add a maximum of three cards: any extra will not display."
2020
[//]: # "One card will take full width page: two will take half width each. Three will stack like an inverse pyramid."
2121
[//]: # "Some examples of content could be the latest release note, the most common install path, and a popular new feature."
22+
2223
{{<card-layout>}}
2324
{{<card-section showAsCards="true" isFeaturedSection="true">}}
2425
{{<card title="Get started" titleUrl="/nginx-one/getting-started/" isFeatured="true" icon="unplug">}}
@@ -36,6 +37,12 @@ F5 NGINX One Console makes it easy to manage NGINX instances across locations an
3637
{{<card title="Manage your NGINX instances" titleUrl="/nginx-one/nginx-configs/" >}}
3738
Manage one instance or groups of instances. Monitor certificates. Set up metrics.
3839
{{</card>}}
40+
{{<card title="Secure with NGINX App Protect" titleUrl="/nginx-one/nap-integration/" >}}
41+
Manage one instance or groups of instances. Monitor certificates. Set up metrics.
42+
{{</card>}}
43+
{{<card title="Connect Kubernetes deployments" titleUrl="/nginx-one/k8s/">}}
44+
Monitor deployments for CVEs and certificates
45+
{{</ card >}}
3946
{{<card title="Organize users with RBAC" titleUrl="/nginx-one/rbac/" >}}
4047
Assign responsibilities with role-based access control
4148
{{</card>}}
@@ -58,10 +65,23 @@ F5 NGINX One Console makes it easy to manage NGINX instances across locations an
5865
{{</card-section>}}
5966
{{</card-layout>}}
6067

68+
### More information
69+
70+
{{<card-layout>}}
71+
{{<card-section showAsCards="true" >}}
72+
{{<card title="Glossary" titleUrl="/nginx-one/glossary/" >}}
73+
See latest updates: New features, improvements, and bug fixes
74+
{{</card>}}
75+
{{<card title="Changelog" titleUrl="/nginx-one/changelog/" icon="clock-alert">}}
76+
See latest updates: New features, improvements, and bug fixes
77+
{{</card>}}
78+
{{</card-section>}}
79+
{{</card-layout>}}
80+
6181
## NGINX One components
6282
[//]: # "You can add any extra content for the page here, such as additional cards, diagrams or text."
6383

64-
{{< card-layout >}}
84+
{{<card-layout>}}
6585
{{< card-section title="Kubernetes Solutions">}}
6686
{{< card title="NGINX Ingress Controller" titleUrl="/nginx-ingress-controller/" brandIcon="NGINX-Ingress-Controller-product-icon">}}
6787
Kubernetes traffic management with API gateway, identity, and observability features.

content/nginx-one/api/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
title: Automate with the NGINX One API
33
description:
4-
weight: 700
4+
weight: 800
55
url: /nginx-one/api
66
---

0 commit comments

Comments
 (0)