Skip to content

feature: incorporate NIC into NGINX 1 Console (not yet for NGF) #736

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion content/nginx-one/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ nd-product: NGINX One
{{<card title="Set up metrics" titleUrl="/nginx-one/metrics/">}}
Review your deployments in a dashboard
{{</card >}}
{{<card title="Connect Kubernetes deployments" titleUrl="/nginx-one/k8s/">}}
Monitor deployments for control planes
{{</card >}}
{{<card title="Organize users with RBAC" titleUrl="/nginx-one/rbac/">}}
Assign responsibilities with role-based access control
{{</card >}}
Expand Down Expand Up @@ -72,4 +75,4 @@ nd-product: NGINX One
Defend, adapt, and mitigate against Layer 7 denial-of-service attacks on your apps and APIs.
{{</ card >}}
{{</ card-section >}}
{{</card-layout>}}
{{</card-layout>}}
2 changes: 1 addition & 1 deletion content/nginx-one/api/_index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Automate with the NGINX One API
description:
weight: 700
weight: 800
url: /nginx-one/api
---
9 changes: 9 additions & 0 deletions content/nginx-one/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@ h2 {

Stay up-to-date with what's new and improved in the F5 NGINX One Console.

## June 30, 2025

### Monitor F5 NGINX Ingress Controller deployments

You can now monitor your NGINX Ingress Controller deployments. For details, see how
you can [Connect to NGINX One Console]({{< ref "/nginx-one/k8s/add-nic.md" >}}).

Unlike other NGINX instances, when you connect NGINX Ingress Controller to NGINX One Console, access is read-only. Refer to our [NGINX Ingress Controller]({{< ref "/nic/" >}}) for details on how to modify these instances.

## May 19, 2025

### Import and export your Staged Configs
Expand Down
5 changes: 2 additions & 3 deletions content/nginx-one/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@ description: ''
nd-docs: DOCS-1396
title: Glossary
toc: true
weight: 800
type:
- reference
weight: 1000
nd-content-type: reference
---

This glossary defines terms used in the F5 NGINX One Console and F5 Distributed Cloud.
Expand Down
8 changes: 8 additions & 0 deletions content/nginx-one/k8s/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
title: Connect Kubernetes deployments
description:
weight: 700
url: /nginx-one/k8s
nd-product: NGINX One
---

159 changes: 159 additions & 0 deletions content/nginx-one/k8s/add-nic.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
---
title: Connect to NGINX One Console
toc: true
weight: 200
nd-content-type: how-to
nd-product: NGINX One
---

This document explains how to connect F5 NGINX Ingress Controller <!-- and F5 NGINX Gateway Fabric -->to F5 NGINX One Console using NGINX Agent.
Connecting NGINX Ingress Controller to NGINX One Console enables centralized monitoring of all controller instances.

Once connected, you'll see a **read-only** configuration of NGINX Ingress Controller. For each instance, you can review:

- Read-only configuration file
- Unmanaged SSL/TLS certificates for Control Planes

## Before you begin

Before connecting NGINX Ingress Controller to NGINX One Console, you need to create a Kubernetes Secret with the data plane key. Use the following command:

```shell
kubectl create secret generic dataplane-key \
--from-literal=dataplane.key=<Your Dataplane Key> \
-n <namespace>
```

When you create a Kubernetes Secret, use the same namespace where NGINX Ingress Controller is running.
If you use [`-watch-namespace`]({{< ref "/nic/configuration/global-configuration/command-line-arguments.md#watch-namespace-string" >}}) or [`watch-secret-namespace`]({{< ref "/nic/configuration/global-configuration/command-line-arguments.md#watch-secret-namespace-string" >}}) arguments with NGINX Ingress Controller,
you need to add the dataplane key secret to the watched namespaces. This secret will take approximately 60 - 90 seconds to reload on the pod.

{{<note>}}
You can also create a data plane key through the NGINX One Console. Once loggged in, select **Manage > Control Planes > Add Control Plane**, and follow the steps shown.
{{</note>}}

## Deploy NGINX Ingress Controller with NGINX Agent

{{<tabs name="deploy-config-resource">}}
{{%tab name="Helm"%}}

Edit your `values.yaml` file to enable NGINX Agent and configure it to connect to NGINX One Console:

```yaml
nginxAgent:
enable: true
dataplaneKeySecretName: "<data_plane_key_secret_name>"
```

The `dataplaneKeySecretName` is used to authenticate the agent with NGINX One Console. See the [NGINX One Console Docs]({{< ref "/nginx-one/connect-instances/create-manage-data-plane-keys.md" >}})
for instructions on how to generate your dataplane key from the NGINX One Console.

Follow the [Installation with Helm]({{< ref "/nic/installation/installing-nic/installation-with-helm.md" >}}) instructions to deploy NGINX Ingress Controller.

{{%/tab%}}
{{%tab name="Manifests"%}}

Add the following flag to the Deployment/DaemonSet file of NGINX Ingress Controller:

```yaml
args:
- -agent=true
```

Create a `ConfigMap` with an `nginx-agent.conf` file:

```yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-agent-config
namespace: <namespace>
data:
nginx-agent.conf: |-
log:
# set log level (error, info, debug; default "info")
level: info
# set log path. if empty, don't log to file.
path: ""

allowed_directories:
- /etc/nginx
- /usr/lib/nginx/modules

features:
- certificates
- connection
- metrics
- file-watcher

## command server settings
command:
server:
host: product.connect.nginx.com
port: 443
auth:
tokenpath: "/etc/nginx-agent/secrets/dataplane.key"
tls:
skip_verify: false
```

Make sure to set the namespace in the nginx-agent.config to the same namespace as NGINX Ingress Controller.
Mount the ConfigMap to the Deployment/DaemonSet file of NGINX Ingress Controller:

```yaml
volumeMounts:
- name: nginx-agent-config
mountPath: /etc/nginx-agent/nginx-agent.conf
subPath: nginx-agent.conf
- name: dataplane-key
mountPath: /etc/nginx-agent/secrets
volumes:
- name: nginx-agent-config
configMap:
name: nginx-agent-config
- name: dataplane-key
secret:
secretName: "<data_plane_key_secret_name>"
```

Follow the [Installation with Manifests]({{< ref "/nic/installation/installing-nic/installation-with-manifests.md" >}}) instructions to deploy NGINX Ingress Controller.

{{%/tab%}}
{{</tabs>}}

## Verify a connection to NGINX One Console

After deploying NGINX Ingress Controller <!-- or NGINX Gateway Fabric --> with NGINX Agent, you can verify the connection to NGINX One Console.
Log in to your F5 Distributed Cloud Console account. Select **NGINX One > Visit Service**. In the dashboard, go to **Manage > Instances**. You should see your instances listed by name. The instance name matches both the hostname and the pod name.

## Troubleshooting

If you encounter issues connecting your instances to NGINX One Console, try the following commands:

Check the NGINX Agent version:

```shell
kubectl exec -it -n <namespace> <nginx_ingress_pod_name> -- nginx-agent -v
```

If nginx-agent version is v3, continue with the following steps.
Otherwise, make sure you are using an image that does not include NGINX App Protect.

Check the NGINX Agent configuration:

```shell
kubectl exec -it -n <namespace> <nginx_ingress_pod_name> -- cat /etc/nginx-agent/nginx-agent.conf
```

Check NGINX Agent logs:

```shell
kubectl exec -it -n <namespace> <nginx_ingress_pod_name> -- nginx-agent
```

Select the instance associated with your deployment of NGINX Ingress Controller. Under the **Details** tab, you'll see information associated with:

- Unmanaged SSL/TLS certificates for Control Planes
- Configuration recommendations

Under the **Configuration** tab, you'll see a **read-only** view of the configuration files.
19 changes: 19 additions & 0 deletions content/nginx-one/k8s/overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
# We use sentence case and present imperative tone
title: "Integrate Kubernetes control planes"
# Weights are assigned in increments of 100: determines sorting order
weight: 100
# Creates a table of contents and sidebar, useful for large documents
toc: false
# Types have a 1:1 relationship with Hugo archetypes, so you shouldn't need to change this
nd-content-type: concept
# Intended for internal catalogue and search, case sensitive:
# Agent, N4Azure, NIC, NIM, NGF, NAP-DOS, NAP-WAF, NGINX One, NGINX+, Solutions, Unit
nd-product: NGINX One
---

You can now include Kubernetes systems through the [control plane](https://www.f5.com/glossary/control-plane). In related documentation, you can learn how to:

- Set up a connection to F5 NGINX One Console through a data plane key.
- Review the NGINX Ingress Controller instances that are part of your fleet.

Loading