Skip to main content
The chart can generate NetworkPolicy objects for the Admin Server and the Admin UI. They are off by default and recommended for production. They are off by default because a cluster whose CNI does not implement NetworkPolicy accepts the objects and enforces nothing. Shipping them enabled would advertise isolation that some clusters silently do not provide. Enable them once you have confirmed your CNI enforces policy.

What the policies allow

Both policies set policyTypes: [Ingress, Egress], so everything not listed below is denied. Namespaces are matched on the kubernetes.io/metadata.name label, which Kubernetes sets on every namespace from version 1.21 onward. You do not need to label your ingress controller or monitoring namespaces by hand. Prometheus scrapes /metrics on the same port that serves the API, so the monitoring rule opens no additional port.

Flows that deliberately have no rule

The Admin UI container serves static files. It never proxies to the API — your browser calls the Admin Server directly through the ingress. The Admin UI therefore needs no egress rule to the Admin Server, and the generated policy denies that path.
The Admin Server reads database metrics and logs through the API server’s pods/proxy and pods/log endpoints, not by connecting to database pods. All of that traffic is already covered by the API server egress rule, so no rule to the database pod range is generated.
Readiness and health probes originate on the node, and every CNI that enforces NetworkPolicy permits them so that pods can pass their probes. No rule is required and none is generated.

Narrowing external egress

networkPolicy.externalEgress covers two destinations that a policy cannot name: the Kubernetes API server and, when adminServer.env.oauthProvider is set, the identity provider. NetworkPolicy matches on CIDR only. It has no concept of a host name, so neither destination is expressible by name. The default is deliberately wide:
The chart cannot know your control plane endpoint, and a wrong guess locks the Admin Server out of the API server entirely, which breaks every operation it performs. Narrow it yourself once you know both addresses:
Find your control plane endpoint with:
On a managed cluster this address can change when the control plane is replaced. If you pin it, treat it as something to re-check at upgrade time.

Identity provider egress

Each provider’s requirements are listed with its setup instructions:

Google OAuth

Egress requirements and the Private Google Access address ranges.

Microsoft Entra ID

Egress requirements for Entra ID and Microsoft Graph.
Only the server-to-server calls need an egress rule. The redirect to the provider’s sign-in page happens in your browser, not from the Admin Server pod, so those host names never appear in the policy.

Extra rules

Anything the generated rules do not cover goes in the extraIngress and extraEgress lists, which are appended verbatim as additional items under ingress: and egress:. Each entry is therefore a complete rule with its own from/to and ports, not a bare peer:

Verify enforcement

First confirm your CNI enforces policy at all. Create two pods, deny traffic to one, and check that the connection stops working:
That should print the nginx welcome page. Now deny it:
The second request must fail. If it still returns the welcome page, your CNI is not enforcing policy and enabling networkPolicy.enabled will not protect anything.
Then check the generated policies against your release:
If the Admin Server stops working after you enable policies, the first thing to check is whether it can still reach the API server:
A timeout there means networkPolicy.externalEgress does not cover your control plane endpoint.