SSL Passthrough support in Listener
SSL Passthrough is a network configuration where the incoming SSL/TLS request is not decrypted by the Load Balancer (NetScaler). Instead, the encrypted traffic is forwarded directly to the designated backend server (the application pod) for decryption.
-
While the NetScaler does not decrypt the traffic, binding a certificate to the Listener is still mandatory.
-
The NetScaler performs Server Name Indication (SNI) matching on the client's initial Client Hello message before forwarding the request. This provides an extra layer of routing and security verification.
-
SSL Passthrough is now supported for any Listener whenever it is referenced as an annotation in the Listener.
-
This support includes multicluster deployments.
-
If the passthrough feature is enabled in a multicluster listener in one cluster, it must be enabled in all other clusters participating in the multicluster solution.
-
-
Passthrough is set at the listener level. All Ingresses referring to the listener will have passthrough enabled.
The Listener CRD controls the behavior of the front end virtual IP (VIP) on the NetScaler. The following parameter must be included in the Listener spec:
| Parameter | Value | Default | Description |
|---|---|---|---|
| passthrough | True | False | Enables the SSL Passthrough for this Listener's VIP and port. |
Example Listener CRD
apiVersion: citrix.com/v1
kind: Listener
metadata:
name: listener-https-passthrough
namespace: default
spec:
multicluster: true # Required for this feature to be active
vip: '1.2.3.4'
port: 443
protocol: https
passthrough: true # Enables SSL Passthrough
certificates:
- secret:
name: app-secret # Mandatory certificate binding
Ingress YAML
No changes are required in the Ingress YAML definition to enable SSL Passthrough. The passthrough behavior is entirely controlled by the Listener CRD.
Here is a sample Ingress definition that refers to the configured Listener:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: https-ingress
annotations:
ingress.citrix.com/listener: listener-https-passthrough
spec:
ingressClassName: "cic-vpx"
rules:
- host: httpsapp-netscaler.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: https-app
port:
number: 80
SSL Passthrough in multicluster mode
In multicluster mode, several clusters share one NetScaler and a single front-end VIP. Each cluster runs its own NetScaler Ingress Controller instance, and all of them share the same virtual server for the front-end VIP. SSL Passthrough behaves the same way as in a single cluster. NetScaler forwards the encrypted traffic to the backend pods in the cluster that owns the application, without decrypting it.
To enable SSL Passthrough on a shared VIP, deploy the same Listener in every cluster that shares the NetScaler. The following Listener fields must be identical in each cluster:
| Field | Value | Description |
|---|---|---|
| vip | Shared front-end IP address | The single VIP that fronts all the clusters. |
| port | Listener port, for example 443 |
Must be the same in every cluster. |
| protocol | https | Must be the same in every cluster. |
| passthrough | true | Enables SSL Passthrough. Must be enabled in every cluster. |
| multicluster | true | Marks the Listener as part of the multicluster solution. |
You must also set the same multi-cluster prefix (
multiClusterPrefix, for example mc) on every NetScaler Ingress Controller instance so that all of them share the same virtual server. For more information, see Multi-cluster ingress.
Deploy the following Listener in each cluster. Keep the
vip, port, protocol, and passthrough values the same everywhere:
apiVersion: citrix.com/v1
kind: Listener
metadata:
name: listener-https-passthrough
namespace: default
spec:
multicluster: true # Required in every cluster
vip: '1.2.3.4' # Same shared VIP in every cluster
port: 443
protocol: https
passthrough: true # Enable in every cluster
certificates:
- secret:
name: app-secret # Certificate binding is mandatory
The Ingress resources in each cluster refer to this Listener with the
ingress.citrix.com/listener annotation, exactly as in a single-cluster deployment. No passthrough-specific changes are needed in the Ingress.
Points to note:
-
Passthrough must be enabled on the Listener in all clusters that share the VIP. Do not mix passthrough and non-passthrough Listeners for the same shared VIP.
-
Binding a certificate to the Listener is mandatory, even though the NetScaler does not decrypt the traffic. The certificate is used for SNI matching.
-
The shared virtual server for the VIP stays up as long as at least one cluster still uses it. It is removed only after the last cluster withdraws its Listener and Ingress, so removing the application from one cluster does not disrupt the others.
-
A shared passthrough application is tracked across all the clusters that use it and is removed from the NetScaler only when the last cluster stops using it.