Deploy NetScaler Kubernetes Gateway Controller for MCP
NetScaler Kubernetes Gateway Controller supports deploying an MCP (Model Context Protocol) Gateway that fronts your MCP servers. The controller programs the NetScaler instance from Kubernetes-native resources, so you configure MCP routing, profiles, access control, rate limiting, credential injection, and observability without manual CLI or GUI configuration on the NetScaler instance.
You can enable NetScaler® MCP Gateway capabilities using either of the following deployment options, depending on where your traffic originates:
-
NetScaler Kubernetes Gateway Controller with NetScaler VPX/MPX/BLX — NetScaler Kubernetes Gateway Controller runs in the cluster and configures an external NetScaler VPX/MPX/BLX. The front end can terminate TLS (HTTPS) at the edge, and the VIP is a static or IPAM-allocated address.
-
NetScaler CPX with Gateway Controller — NetScaler CPX and NetScaler Kubernetes Gateway Controller run together inside the cluster. The front end can be HTTP or HTTPS (TLS termination), and the VIP is the CPX pod IP.
Note:
OAuth 2.1 client authentication (the AAA-governed authentication path) is available for MCP only with NetScaler VPX/MPX/BLX. It is not available for MCP on NetScaler CPX. All other MCP Gateway capabilities — header-based routing, mcpprofile host and URL replacement, ExternalName backends, server access control, tool-based rate limiting, gateway credential injection, and Splunk observability — are supported on both form factors.
Prerequisites
-
A Kubernetes cluster with
kubectlconfigured. -
Helm 3.x or later.
-
Gateway API CRDs installed from the official standard channel.
-
NetScaler 14.1 or later on the managed NetScaler VPX/MPX/BLX, or a NetScaler CPX image based on NetScaler 14.1 or later.
Note:
Helm adds the CRDs of a chart only when you run
helm install, and only the CRDs that are not in the cluster yet. helm upgrade does not add new CRDs or update existing ones.
If you upgrade an existing NetScaler Kubernetes Gateway Controller to release 2.3.0, or if the cluster already has NetScaler CRDs from an earlier release or from another NetScaler Helm chart (for example, NetScaler Ingress Controller), apply the CRD file of the chart before you create MCP resources. The file adds or updates the CRDs that MCP Gateway uses, such as
mcpprofile, mcproute, authpolicy, and ratelimit:
kubectl apply -f https://raw.githubusercontent.com/netscaler/netscaler-helm-charts/master/netscaler-kubernetes-gateway-controller/crds/crds.yaml
For NetScaler CPX with Gateway Controller, apply the CRD file of the
netscaler-cpx-with-gateway-controller chart instead:
kubectl apply -f https://raw.githubusercontent.com/netscaler/netscaler-helm-charts/master/netscaler-cpx-with-gateway-controller/crds/crds.yaml
Deploy NetScaler Kubernetes Gateway Controller with NetScaler VPX/MPX/BLX
Use this option when NetScaler Kubernetes Gateway Controller manages an external NetScaler VPX/MPX/BLX.
Install NetScaler Kubernetes Gateway Controller
To install the chart with the release name,
my-release, use the following command:
helm install my-release netscaler/netscaler-kubernetes-gateway-controller --set license.accept=yes,gatewayController.gatewayControllerName=<controllerName>,gatewayController.entityPrefix=<prefix>,netscaler.nsIP=<NSIP>,netscaler.adcCredentialSecret=<Secret-for-NetScaler-credentials>
Note:
By default, the chart installs the recommended RBAC roles and role bindings.
The command deploys NetScaler Kubernetes Gateway Controller on Kubernetes cluster with the default configuration. The configuration section lists the mandatory and optional parameters that you can configure during installation.
Create the GatewayClass
After the NetScaler Kubernetes Gateway Controller is installed, create a
GatewayClass that binds to the controller. The controllerName must match the gatewayController.gatewayControllerName value used during installation.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: mcpgwclass
spec:
controllerName: citrix.com/nsgw-controller
EOF
Deploy NetScaler CPX with Gateway Controller
Use this option to run NetScaler CPX and the Gateway Controller together inside the cluster.
Install NetScaler CPX with Gateway Controller
To install the chart with the release name
my-release:
helm install my-release netscaler/netscaler-cpx-with-gateway-controller --set license.accept=yes,gatewayController.gatewayControllerName=<controllerName>
Note:
By default the chart installs the recommended RBAC roles and role bindings.
The command deploys NetScaler CPX with NetScaler Kubernetes Gateway Controller as a sidecar on the Kubernetes cluster with the default configuration. The configuration section lists the mandatory and optional parameters that you can configure during installation.
Create the GatewayClass
After NetScaler CPX with Gateway Controller is installed, create a
GatewayClass that binds to the controller. The controllerName must match the gatewayController.gatewayControllerName value used during installation.
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: mcpgwclass
spec:
controllerName: citrix.com/nscpxgw-controller
EOF
Note:
Every MCP Gateway resource — the
Gateway, mcpprofile, and mcproute — must belong to the GatewayClass created here (mcpgwclass). Set the Gateway spec.gatewayClassName to mcpgwclass. The mcpprofile attaches to that Gateway through infrastructure.parametersRef (or to a route through an ExtensionRef filter), and the mcproute attaches through parentRefs — so both are governed by the same GatewayClass.
Verify the deployment
Confirm that the controller is running and the
GatewayClass is accepted before you apply MCP Gateway resources.
kubectl get pods
kubectl get gatewayclass mcpgwclass
The controller pod must show
STATUS Running (for CPX, the pod shows READY 2/2), and the GatewayClass must show ACCEPTED True.