Skip to content
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

Migrate access control example to documentation website #6572

Merged
merged 25 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
23d2617
Migrate access control example to documentation website
ADubhlaoich Oct 2, 2024
e8dda9a
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 2, 2024
fabb850
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 2, 2024
03da540
Update Markdown heading for linter compliance
ADubhlaoich Oct 2, 2024
c1070a8
Merge branch 'docs/example-migration' of github.com:nginxinc/kubernet…
ADubhlaoich Oct 2, 2024
969ddf2
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 2, 2024
91387ef
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 2, 2024
56ca0c4
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 3, 2024
1db65ae
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 3, 2024
866d847
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 3, 2024
a09099d
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 8, 2024
a8f7c41
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 10, 2024
d74164c
Apply suggestions from code review
ADubhlaoich Oct 10, 2024
f4484fe
Update formatting
ADubhlaoich Oct 10, 2024
a502e04
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 10, 2024
d66dc22
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 10, 2024
8d90d1a
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 11, 2024
692716c
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 14, 2024
d52a8f1
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 14, 2024
b1dbd5b
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 15, 2024
49b41ad
Merge branch 'main' into docs/example-migration
vepatel Oct 15, 2024
e836299
Merge branch 'main' into docs/example-migration
vepatel Oct 16, 2024
1754688
Merge branch 'main' into docs/example-migration
jjngx Oct 17, 2024
aed5fbd
Merge branch 'main' into docs/example-migration
ADubhlaoich Oct 21, 2024
0825f18
Update document to shift the subject focus the Policy object
ADubhlaoich Oct 21, 2024
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
97 changes: 2 additions & 95 deletions examples/custom-resources/access-control/README.md
Original file line number Diff line number Diff line change
@@ -1,96 +1,3 @@
# Access Control
# Deploy a Policy for access control

In this example, we deploy a web application; configure load balancing for it via a VirtualServer; and apply access
control policies to deny and allow traffic from a specific subnet.

## Prerequisites

1. Follow the [installation](https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/)
instructions to deploy the Ingress Controller.
1. Save the public IP address of the Ingress Controller into a shell variable:

```console
IC_IP=XXX.YYY.ZZZ.III
```

1. Save the HTTP port of the Ingress Controller into a shell variable:

```console
IC_HTTP_PORT=<port number>
```

## Step 1 - Deploy a Web Application

Create the application deployment and service:

```console
kubectl apply -f webapp.yaml
```

## Step 2 - Deploy an Access Control Policy

In this step, we create a policy with the name `webapp-policy` that denies requests from clients with an IP that belongs
to the subnet `10.0.0.0/8`. This is the subnet that our test client in Steps 4 and 6 will belong to. Make sure to change
the `deny` field of the `access-control-policy-deny.yaml` according to your environment (use the subnet of your
machine).

Create the policy:

```console
kubectl apply -f access-control-policy-deny.yaml
```

## Step 3 - Configure Load Balancing

Create a VirtualServer resource for the web application:

```console
kubectl apply -f virtual-server.yaml
```

Note that the VirtualServer references the policy `webapp-policy` created in Step 2.

## Step 4 - Test the Configuration

Let's access the application:

```console
curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
```

```text
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
```

We got a 403 response from NGINX, which means that our policy successfully blocked our request.

## Step 5 - Update the Policy

In this step, we update the policy to allow requests from clients from the subnet `10.0.0.0/8`. Make sure to change the
`allow` field of the `access-control-policy-allow.yaml` according to your environment.

Update the policy:

```console
kubectl apply -f access-control-policy-allow.yaml
```

## Step 6 - Test the Configuration

Let's access the application again:

```console
curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
```

```text
Server address: 10.64.0.13:8080
Server name: webapp-5cbbc7bd78-wf85w
```

In contrast with Step 4, we got a 200 response, which means that our updated policy successfully allowed our request.
This is the example code used in the [Deploy a Policy for access control](https://docs.nginx.com/nginx-ingress-controller/configuration/access-control/) documentation.
120 changes: 120 additions & 0 deletions site/content/configuration/access-control.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
---
title: Deploy a Policy for access control
weight: 900
toc: true
docs: DOCS-000
---

This topic describes how to use F5 NGINX Ingress Controller to apply and update a Policy for access control. It demonstrates it using an example application and a [VirtualServer custom resource]({{< ref "/configuration/virtualserver-and-virtualserverroute-resources.md" >}}).

---

## Before you begin

You should have a [working NGINX Ingress Controller]({{< ref "/installation/installing-nic/installation-with-helm.md" >}}) instance.

For ease of use in shell commands, set two shell variables:

1. The public IP address for your NGINX Ingress Controller instance.

```shell
IC_IP=<ip-address>
```

2. The HTTP port of the same instance.

```shell
IC_HTTP_PORT=<port number>
```

---

## Deploy the example application

Create the file _webapp.yaml_ with the following contents:

{{< ghcode "https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/refs/heads/main/examples/custom-resources/access-control/webapp.yaml" >}}

Apply it using `kubectl`:

```shell
kubectl apply -f webapp.yaml
```

---

## Deploy a Policy to create a deny rule

Create a file named _access-control-policy-deny.yaml_. The highlighted _deny_ field will be used by the example application, and should be changed to the subnet of your machine.

{{< ghcode "https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/refs/heads/main/examples/custom-resources/access-control/access-control-policy-deny.yaml" "hl_lines=7-8" >}}

Apply the policy:

```shell
kubectl apply -f access-control-policy-deny.yaml
```

---

## Configure load balancing

Create a file named _virtual-server.yaml_ for the VirtualServer resource. The _policies_ field references the access control Policy created in the previous section.

{{< ghcode "https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/refs/heads/main/examples/custom-resources/access-control/virtual-server.yaml" "hl_lines=7-8" >}}

Apply the policy:

```shell
kubectl apply -f virtual-server.yaml
```

---

## Test the example application

Use `curl` to attempt to access the application:

```shell
curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
```
```text
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
```

The *403* response is expected, successfully blocking your machine.

---

## Update the Policy to create an allow rule

Update the Policy with the file _access-control-policy-allow.yaml_, setting the _allow_ field to the subnet of your machine.

{{< ghcode "https://raw.githubusercontent.com/nginxinc/kubernetes-ingress/refs/heads/main/examples/custom-resources/access-control/access-control-policy-allow.yaml" "hl_lines=7-8" >}}

Apply the Policy:

```shell
kubectl apply -f access-control-policy-allow.yaml
```

----

## Verify the Policy update

Attempt to access the application again:

```shell
curl --resolve webapp.example.com:$IC_HTTP_PORT:$IC_IP http://webapp.example.com:$IC_HTTP_PORT
```
```text
Server address: 10.64.0.13:8080
Server name: webapp-5cbbc7bd78-wf85w
```

The successful response demonstrates that the policy has been updated.
6 changes: 2 additions & 4 deletions site/content/configuration/host-and-listener-collisions.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
---
docs: DOCS-590
doctypes:
- ''
title: Host and Listener collisions
toc: true
weight: 1700
weight: 800
docs: DOCS-590
---

This document explains how F5 NGINX Ingress Controller handles host and listener collisions between resources.
Expand Down
6 changes: 2 additions & 4 deletions site/content/configuration/policy-resource.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
---
docs: DOCS-596
doctypes:
- ''
title: Policy resources
toc: true
weight: 600
weight: 500
docs: DOCS-596
---

The Policy resource allows you to configure features like access control and rate-limiting, which you can add to your [VirtualServer and VirtualServerRoute resources](/nginx-ingress-controller/configuration/virtualserver-and-virtualserverroute-resources/).
Expand Down
6 changes: 2 additions & 4 deletions site/content/configuration/transportserver-resource.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
---
docs: DOCS-598
doctypes:
- ''
title: TransportServer resources
toc: true
weight: 700
weight: 600
docs: DOCS-598
---

This document is reference material for the TransportServer resource used by F5 NGINX Ingress Controller.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
---
docs: DOCS-599
doctypes:
- ''
title: VirtualServer and VirtualServerRoute resources
toc: true
weight: 1600
weight: 700
docs: DOCS-599
---

This document is reference material for the VirtualServer and VirtualServerRoute resources used by F5 NGINX Ingress Controller.
Expand Down