You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/aks/use-network-policies.md
+79-9Lines changed: 79 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -16,7 +16,7 @@ This article shows you how to install the Network Policy engine and create Kuber
16
16
17
17
## Before you begin
18
18
19
-
You need the Azure CLI version 2.0.61 or later installed and configured. Run`az --version` to find the version. If you need to install or upgrade, see[Install Azure CLI][install-azure-cli].
19
+
You need the Azure CLI version 2.0.61 or later installed and configured. Run`az --version` to find the version. If you need to install or upgrade, see[Install Azure CLI][install-azure-cli].
20
20
21
21
## Overview of Network Policy
22
22
@@ -33,19 +33,31 @@ Azure provides two ways to implement Network Policy. You choose a Network Policy
33
33
* Azure's own implementation, called *Azure Network Policy Manager (NPM)*.
34
34
**Calico Network Policies*, an open-source network and network security solution founded by [Tigera][tigera].
35
35
36
-
Azure NPM for Linux uses Linux *IPTables* to enforce the specified policies. Policies are translated into sets of allowed and disallowed IP pairs. These pairs are then programmed as IPTable filter rules.
36
+
Azure NPM for Linux uses Linux *IPTables*and Azure NPM for Windows uses *Host Network Service (HNS) ACLPolicies*to enforce the specified policies. Policies are translated into sets of allowed and disallowed IP pairs. These pairs are then programmed as IPTable/HNS ACLPolicy filter rules.
37
37
38
38
## Differences between Azure NPM and Calico Network Policy and their capabilities
| Supported platforms | Linux | Linux, Windows Server 2019 and 2022 |
42
+
| Supported platforms | Linux, Windows Server 2022 | Linux, Windows Server 2019 and 2022 |
43
43
| Supported networking options | Azure CNI | Azure CNI (Linux, Windows Server 2019 and 2022) and kubenet (Linux) |
44
44
| Compliance with Kubernetes specification | All policy types supported | All policy types supported |
45
45
| Additional features | None | Extended policy model consisting of Global Network Policy, Global Network Set, and Host Endpoint. For more information on using the `calicoctl` CLI to manage these extended features, see [calicoctl user reference][calicoctl]. |
46
46
| Support | Supported by Azure support and Engineering team | Calico community support. For more information on additional paid support, see [Project Calico support options][calico-support]. |
47
47
| Logging | Logs available with **kubectl log -n kube-system <network-policy-pod>** command | For more information, see [Calico component logs][calico-logs]|
48
48
49
+
## Limitations:
50
+
51
+
Azure Network Policy Manager(NPM) doesn't support IPv6. Otherwise, Azure NPM fully supports the network policy spec in Linux.
52
+
* In Windows, Azure NPM doesn't support the following:
53
+
* named ports
54
+
* SCTP protocol
55
+
* negative match label or namespace selectors (e.g. all labels except "debug=true")
56
+
* "except" CIDR blocks (a CIDR with exceptions)
57
+
58
+
>[!NOTE]
59
+
> * Azure NPM pod logs will record an error if an unsupported policy is created.
60
+
49
61
## Create an AKS cluster and enable Network Policy
50
62
51
63
To see network policies in action, let's create an AKS cluster that supports network policy and then work on adding policies.
@@ -63,9 +75,9 @@ The following example script:
63
75
64
76
Instead of using a system-assigned identity, you can also use a user-assigned identity. For more information, see [Use managed identities](use-managed-identity.md).
65
77
66
-
### Create an AKS cluster with Azure NPM enabled
78
+
### Create an AKS cluster with Azure NPM enabled - Linux only
67
79
68
-
In this section, we will work on creating a cluster with Linux node pools and Azure NPM enabled.
80
+
In this section, we'll work on creating a cluster with Linux node pools and Azure NPM enabled.
69
81
70
82
To begin, you should replace the values for *$RESOURCE_GROUP_NAME* and *$CLUSTER_NAME* variables.
71
83
@@ -87,6 +99,64 @@ az aks create \
87
99
--network-policy azure
88
100
```
89
101
102
+
### Create an AKS cluster with Azure NPM enabled - Windows Server 2022 (Preview)
103
+
104
+
In this section, we'll work on creating a cluster with Windows node pools and Azure NPM enabled.
105
+
106
+
Please execute the following commands prior to creating a cluster:
107
+
108
+
```azurecli
109
+
az extension add --name aks-preview
110
+
az extension update --name aks-preview
111
+
az feature register --namespace Microsoft.ContainerService --name AKSWindows2022Preview
112
+
az feature register --namespace Microsoft.ContainerService --name WindowsNetworkPolicyPreview
113
+
az provider register -n Microsoft.ContainerService
114
+
```
115
+
116
+
> [!NOTE]
117
+
> At this time, Azure NPM with Windows nodes is available on Windows Server 2022 only
118
+
>
119
+
120
+
Now, you should replace the values for *$RESOURCE_GROUP_NAME*, *$CLUSTER_NAME* and *$WINDOWS_USERNAME* variables.
121
+
122
+
```azurecli-interactive
123
+
$RESOURCE_GROUP_NAME=myResourceGroup-NP
124
+
$CLUSTER_NAME=myAKSCluster
125
+
$WINDOWS_USERNAME=myWindowsUserName
126
+
$LOCATION=canadaeast
127
+
```
128
+
129
+
Create a username to use as administrator credentials for your Windows Server containers on your cluster. The following command prompts you for a username. Set it to `$WINDOWS_USERNAME`(remember that the commands in this article are entered into a BASH shell).
130
+
131
+
```azurecli-interactive
132
+
echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME
133
+
```
134
+
135
+
Use the following command to create a cluster:
136
+
137
+
```azurecli
138
+
az aks create \
139
+
--resource-group $RESOURCE_GROUP_NAME \
140
+
--name $CLUSTER_NAME \
141
+
--node-count 1 \
142
+
--windows-admin-username $WINDOWS_USERNAME \
143
+
--network-plugin azure \
144
+
--network-policy azure
145
+
```
146
+
147
+
It takes a few minutes to create the cluster. By default, your cluster is created with only a Linux node pool. If you would like to use Windows node pools, you can add one. For example:
148
+
149
+
```azurecli
150
+
az aks nodepool add \
151
+
--resource-group $RESOURCE_GROUP_NAME \
152
+
--cluster-name $CLUSTER_NAME \
153
+
--os-type Windows \
154
+
--name npwin \
155
+
--node-count 1
156
+
```
157
+
158
+
[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
159
+
90
160
### Create an AKS cluster for Calico network policies
91
161
92
162
Create the AKS cluster and specify *azure* for the network plugin, and *calico* for the Network Policy. Using *calico* as the Network Policy enables Calico networking on both Linux and Windows node pools.
@@ -132,15 +202,15 @@ When the cluster is ready, configure `kubectl` to connect to your Kubernetes clu
132
202
```azurecli-interactive
133
203
az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
134
204
```
135
-
To begin verification of Network Policy, we will create a sample application and set traffic rules.
205
+
To begin verification of Network Policy, we'll create a sample application and set traffic rules.
136
206
137
207
Firstly, let's create a namespace called *demo* to run the example pods:
138
208
139
209
```console
140
210
kubectl create namespace demo
141
211
```
142
212
143
-
We will now create two pods in the cluster named *client* and *server*.
213
+
We'll now create two pods in the cluster named *client* and *server*.
144
214
145
215
>[!NOTE]
146
216
> If you want to schedule the *client* or *server* on a particular node, add the following bit before the *--command* argument in the pod creation [kubectl run][kubectl-run] command:
@@ -214,7 +284,7 @@ Now, in the client's shell, verify connectivity with the server by executing the
Connectivity with traffic will be blocked since the server is labeled with app=server, but the client is not labeled. The connect command above will yield this output:
287
+
Connectivity with traffic will be blocked since the server is labeled with app=server, but the client isn't labeled. The connect command above will yield this output:
218
288
219
289
```output
220
290
TIMEOUT
@@ -265,4 +335,4 @@ To learn more about policies, see [Kubernetes network policies][kubernetes-netwo
Azure NPM implementation works in conjunction with the Azure CNI that provides VNet integration for containers. NPM is supported only on Linux today. The implementation enforces traffic filtering by configuring allow and deny IP rules in Linux IPTables based on the defined policies. These rules are grouped together using Linux IPSets.
29
+
Azure NPM implementation works with the Azure CNI that provides VNet integration for containers. NPM is supported only on Linux today. The implementation enforces traffic filtering by configuring allow and deny IP rules in Linux IPTables based on the defined policies. These rules are grouped together using Linux IPSets.
30
30
31
31
## Planning security for your Kubernetes cluster
32
32
When implementing security for your cluster, use network security groups (NSGs) to filter traffic entering and leaving your cluster subnet (North-South traffic). Use Azure NPM for traffic between pods in your cluster (East-West traffic).
@@ -75,8 +75,8 @@ See a [configuration for these alerts](#set-up-alerts-for-alertmanager) below.
75
75
76
76
##### Visualizations and Debugging via our Grafana Dashboard or Azure Monitor Workbook
77
77
1. See how many IPTables rules your policies create (having a massive amount of IPTables rules may increase latency slightly).
78
-
2. Correlate cluster counts (e.g. ACLs) to execution times.
79
-
3. Get the human-friendly name of an ipset in a given IPTables rule (e.g. "azure-npm-487392" represents "podlabel-role:database").
78
+
2. Correlate cluster counts (for example, ACLs) to execution times.
79
+
3. Get the human-friendly name of an ipset in a given IPTables rule (for example, "azure-npm-487392" represents "podlabel-role:database").
80
80
81
81
### All supported metrics
82
82
The following is the list of supported metrics. Any `quantile` label has possible values `0.5`, `0.9`, and `0.99`. Any `had_error` label has possible values `false` and `true`, representing whether the operation succeeded or failed.
@@ -137,7 +137,7 @@ The dashboard has visuals similar to the Azure Workbook. You can add panels to c
137
137
### Set up for Prometheus Server
138
138
Some users may choose to collect metrics with a Prometheus Server instead of Azure Monitor for containers. You merely need to add two jobs to your scrape config to collect NPM metrics.
139
139
140
-
To install a simple Prometheus Server, add this helm repo on your cluster
140
+
To install a Prometheus Server, add this helm repo on your cluster
@@ -199,7 +198,7 @@ You can also replace the `azure-npm-node-metrics` job with the content below or
199
198
```
200
199
201
200
#### Set up Alerts for AlertManager
202
-
If you use a Prometheus Server, you can set up an AlertManager like so. Here is an example config for [the two alerting rules described above](#alerts-via-a-prometheus-alertmanager):
201
+
If you use a Prometheus Server, you can set up an AlertManager like so. Here's an example config for [the two alerting rules described above](#alerts-via-a-prometheus-alertmanager):
203
202
```
204
203
groups:
205
204
- name: npm.rules
@@ -263,7 +262,6 @@ Following are some sample dashboard for NPM metrics in Container Insights (CI) a
0 commit comments