The istio module implements a Service Mesh based on Istio for centralized management of network traffic in Deckhouse Platform (DP). The module provides mTLS (Mutual Transport Layer Security), request authorization, traffic routing, load balancing, and observability of interactions between applications.
The istio module allows several Istio versions to run at the same time. The module’s globalVersion parameter specifies which Istio version is used by default for namespaces labeled istio-injection: enabled. If a namespace needs to use an Istio version other than the default one, it is labeled with the label corresponding to the Istio revision instead, for example, istio.io/rev: v1x27.
The module works with the following custom resources.
Resources managed directly by the module (the deckhouse.io group):
- IngressIstioController: Describes an Istio ingress gateway instance serving the selected gateway class.
- IstioFederation: Marks one or more remote clusters as trusted for mesh federation (available in the Enterprise Edition and Ultimate).
- IstioMulticluster: Marks one or more remote clusters as trusted for a multicluster configuration (available in the Enterprise Edition and Ultimate).
- WaypointInstance: Describes a waypoint ambient proxy created by the waypoint-controller component (available in the Enterprise Edition and Ultimate).
The module also installs and uses the standard Istio custom resources (the networking.istio.io, security.istio.io, telemetry.istio.io, and extensions.istio.io groups — VirtualService, DestinationRule, Gateway, PeerAuthentication, and others). For more details, see the Istio custom resource reference.
DP only supports operator-based management for Istio version 1.25. All later versions run without the operator. Istio 1.25 is deprecated and will be removed in a future update.
If an Istio version with operator support is requested, the following Sail Operator custom resources of the sailoperator.io group are installed and used:
- Istio: Represents an Istio Service Mesh deployment consisting of one or more control planes.
- IstioRevision: Represents a single revision of the Istio control plane.
The set of module components and its architecture depend on the DP edition. The Enterprise Edition (EE) and Ultimate adds cross-cluster service mesh federation, periodic service mesh configuration analysis, and support for Istio ambient mode.
For more details about module configuration, refer to the corresponding documentation section.
Module architecture
The Level 2 C4 architecture of the istio module and its interactions with other components of Deckhouse Platform (DP) are shown in the following diagrams:
The following simplifications are made in the diagrams:
- The diagrams show containers in different pods interacting directly with each other. In reality, they communicate via the corresponding Kubernetes Services (internal load balancers). Service names are omitted if they are obvious from the diagram context. Otherwise, the Service name is shown above the arrow.
- Pods may run multiple replicas. However, each pod is shown as a single replica in the diagrams.
-
Base module functionality (control plane, CNI, ingress gateway, Kiali, config-analyzer):
-
Ambient mode (ztunnel, waypoint-controller; available only in the Enterprise Edition and Ultimate, disabled by default — the diagram shows only the differences from the base configuration):
-
Federation and multicluster configuration (available only in the Enterprise Edition and Ultimate, disabled by default — the diagram shows only the differences from the base configuration):
Module components
Main module components
The module consists of the following components:
-
Operator-<VERSION> (Deployment): an implementation of the Sail Operator that manages the Istio control plane lifecycle. The component is responsible for installing all the resources required for a given control plane version to work.
DP only supports the operator for Istio version 1.25.
The component watches the Istio and IstioRevision custom resources and uses them to create the
istiod-<VERSION>Deployment, a Service, and a ConfigMap. Webhook management for validation and mutation is deliberately disabled in the operator; it is handled by the Deckhouse controller of thedeckhousemodule when the module’s Helm chart is applied.It consists of a single container:
- operator: Main container.
-
Istiod-<VERSION> (Deployment): the Istio control plane component that:
- Distributes sidecar proxy routing configuration via xDS.
- Issues certificates for workloads managed by Istio.
- Validates user application pods and mutates them to inject sidecar containers, via Validating/Mutating Admission Controllers.
- Validates custom resources of the
*.istio.ioAPI groups via Validating Admission Controllers.
For Istio 1.25 (deprecated and scheduled for removal), the component is created and managed by the operator-<VERSION> component through the Istio and IstioRevision custom resources. For other Istio versions supported in DP, it is deployed directly by the module’s Helm chart.
It consists of a single container:
- discovery: Main container.
-
Ingress-gateway-controller-<NAME> (DaemonSet): controller that handles incoming mesh traffic from applications. Created by the Deckhouse controller of the
deckhousemodule for each IngressIstioController custom resource. The<NAME>placeholder is the name of the IngressIstioController resource.It consists of a single container:
- istio-proxy: Main container based on the open-source Envoy project, which handles incoming traffic and receives configuration via xDS from the istiod controller.
-
Kiali (Deployment): Kiali web interface for managing and observing Istio resources and user services running under Istio, allowing you to:
- Visualize connections between services.
- Diagnose problematic connections between services.
- Diagnose the state of the Istio control plane.
It consists of the following containers:
- kiali: Main container.
- kube-rbac-proxy: Sidecar container with an authorization proxy based on Kubernetes RBAC, providing secure access to the Kiali web interface.
Authentication of Kiali web interface users is performed by the
user-authnmodule through a dedicated dex-authenticator. -
Istio-config-analyzer-<VERSION> (Deployment): component that performs periodic service mesh configuration analysis (
istioctl analyze) and exports the analysis results as Prometheus metrics.The component is created by the Deckhouse controller of the
deckhousemodule for each Istio revision if the.settings.configAnalysis.enabledmodule parameter is set totrue(enabled by default).It consists of the following containers:
- istio-config-analyzer: Main container.
- kube-rbac-proxy: Sidecar container with an authorization proxy based on Kubernetes RBAC, providing secure access to metrics.
Ambient mode components
The following additional components are created when Istio runs in ambient mode:
-
Istio-cni-node (DaemonSet): Istio component that installs the CNI plugin on each cluster node and, in Istio ambient mode, sets up traffic interception for pods.
The component prepares the
istio-cnibinary and appends it as an additional plugin to the first CNI config found in the/etc/cni/net.d/directory on each cluster node. In the standard DP configuration this is the05-cilium.conflistfile, created by the Cilium CNI plugin of thecni-ciliummodule. When creating each pod, kubelet (via containerd) calls both CNI plugins in sequence — first cilium, then istio-cni. The result produced by the first plugin is passed to the second.In Istio ambient mode, the component handles API requests from the
istio-cniCNI plugin and configures routing to the ztunnel component.The component is created by the Deckhouse controller if the
.settings.dataPlane.trafficRedirectionSetupModemodule parameter is set toCNIPlugin(the default isInitContainer).It consists of the following containers:
- install-cni: Main container that installs and configures the CNI plugin on the node.
- kube-rbac-proxy: Sidecar container with an authorization proxy based on Kubernetes RBAC, providing secure access to install-cni metrics.
-
Istio-cni: binary invoked by containerd, which receives the command (for example, ADD when a container starts and DEL when it is removed) and other parameters via environment variables, per the CNI specification, and the JSON configuration via stdin.
On each invocation, istio-cni performs the following actions:
- Processes the input from containerd: the JSON configuration, and the pod’s name and namespace.
- Retrieves pod and namespace information from kube-apiserver.
- Stops processing if the namespace is in
exclude_namespaces(a configuration parameter in thecni-configConfigMap). - In ambient mode, checks whether the pod is enabled for ambient via labels and, if so, notifies the istio-cni-node component via a Unix socket.
- In sidecar mode, checks that the pod has no
istio-initcontainer, has anistio-proxycontainer, and checks annotations; if the conditions are met, it enters the pod’s network namespace (netns) and sets up interception of inbound and outbound traffic by runningiptablesornftablescommands.
-
Ztunnel (DaemonSet): Istio ambient mode component that provides the L4 data plane (mTLS, L4-level authorization) without adding a sidecar to the user’s application. Runs on every cluster node.
The component is created by the Deckhouse controller if the
.settings.ambient.enabledmodule parameter is set totrue(disabled by default).It consists of a single container:
- istio-proxy: Main container that receives configuration via xDS from the istiod controller.
-
Waypoint-controller (Deployment): controller for the ambient mode L7 layer. The controller manages the WaypointInstance custom resource and creates or updates the corresponding
waypoint-<NAME>Deployment.Created under the same conditions as ztunnel.
It consists of a single container:
- waypoint-controller: Main container.
-
Waypoint-<NAME> (Deployment): proxying service that handles L7 traffic (HTTP routing and authorization) for the services or workloads of the given namespace. Created dynamically by the waypoint-controller component for each WaypointInstance resource.
It consists of a single container:
- istio-proxy: Main container that receives configuration via xDS from the istiod controller.
Federation or multicluster mode components
Cross-cluster interaction (federation or multicluster) is only available between DP clusters, since DP installs a modified version of Istio that is not compatible with vanilla Istio in other clusters.
The following additional components are created when Istio runs in federation or multicluster mode:
-
Metadata-exporter (Deployment): component that provides public cluster metadata (the CA root certificate, public keys, endpoint addresses) to remote clusters for configuring cross-cluster interaction (federation or multicluster).
The component is created by the Deckhouse controller if the
.settings.federation.enabledor the.settings.multicluster.enabledmodule parameter is enabled (both disabled by default).It consists of the following containers:
- metadata-exporter: Main container.
- kube-rbac-proxy: Sidecar container with an authorization proxy based on Kubernetes RBAC, providing secure access to metrics.
-
Alliance-healthcheck (Deployment): component that checks the availability of the mesh connection with remote clusters and updates the status of the IstioFederation and IstioMulticluster custom resources.
Created under the same conditions as metadata-exporter.
It consists of a single container:
- healthcheck: Main container.
-
Ingressgateway (DaemonSet): component that accepts mesh traffic from remote clusters via mTLS with SNI passthrough. A separate component from ingress-gateway-controller-<NAME>, dedicated exclusively to federation and multicluster traffic.
The component is created by the Deckhouse controller if either:
- The
.settings.federation.enabledmodule parameter is enabled. - The
.settings.multicluster.enabledmodule parameter and the.spec.enableIngressGatewayparameter of the IstioMulticluster custom resource are both enabled.
It consists of a single container:
- istio-proxy: Main container that receives configuration via xDS from the istiod controller.
- The
-
Metrics-exporter (Deployment): component that collects data for multicluster configuration metrics.
The component is created by the Deckhouse controller if the
.settings.multicluster.enabledmodule parameter is enabled.It consists of the following containers:
- metrics-exporter: Main container.
- kube-rbac-proxy: Sidecar container with an authorization proxy based on Kubernetes RBAC, providing secure access to metrics.
-
Api-proxy (Deployment): component that provides remote clusters with read access to this cluster’s service mesh configuration and application resources. Used by the remote cluster’s istiod for multicluster service discovery.
The component is created by the Deckhouse controller if the
.settings.multicluster.enabledmodule parameter is enabled.It consists of a single container:
- api-proxy: Main container.
Component that is not part of the istio module:
-
User application: workload created by the user and modified by istiod when the pod is mutated.
It consists of the following containers:
- istio-init: optional init container that sets up iptables rules to intercept application traffic. Added if the
.settings.dataPlane.trafficRedirectionSetupModemodule parameter is set toInitContainer. When it is set toCNIPlugin, this function is performed by the istio-cni-node component instead. - istio-proxy: sidecar container that lets the user application participate in the Istio mesh network. Added if the
.settings.ambient.enabledmodule parameter is set tofalse(disabled by default). - user-app: the user application’s own set of init and sidecar containers.
- istio-init: optional init container that sets up iptables rules to intercept application traffic. Added if the
Module interactions
The module interacts with the following components:
-
Kube-apiserver:
- Authorizes requests for the module components’ metrics.
- Manages the Istio, IstioRevision, IngressIstioController, IstioFederation, IstioMulticluster, and WaypointInstance custom resources.
- Manages custom resources of the
networking.istio.io,security.istio.io,telemetry.istio.io, andextensions.istio.ioAPI groups. - Creates and manages the
istiod-<VERSION>andwaypoint-<NAME>Deployments and theingress-gateway-controller-<NAME>DaemonSet. - Reads Pod, Namespace, Node, Service, Secret, ConfigMap, Job, CronJob, Deployment, DaemonSet, ReplicaSet, and StatefulSet resources.
- The
user-authnmodule: Authenticates Kiali web interface users. - Trickster: Queries service mesh traffic metrics for the Kiali web interface.
-
Remote DP cluster:
- Checks the availability of the mesh connection between clusters.
- Retrieves the remote cluster’s service mesh and application parameters.
The following external components interact with the module:
-
Kube-apiserver:
- Validates custom resources of the
networking.istio.io,security.istio.io,telemetry.istio.io, andextensions.istio.ioAPI groups. - Mutates pods to add init and sidecar containers.
- Validates custom resources of the
- Prometheus-main: Collects metrics from all module components.
- Containerd: Runs CNI plugin binaries.
- Load balancer: Balances incoming traffic to ingress-gateway-controller.
- Gateway/Ingress controller: Forwards the authenticated user request to the Kiali web interface. Depends on the chosen method of publishing resources: using the Ingress controller of the
ingress-nginxmodule or the Gateway controller of thealbmodule. -
Remote DP cluster:
- Requests the cluster’s public metadata.
- Sends mesh traffic via mTLS SNI passthrough.
- Reads the cluster’s service mesh and application parameters.
- User application: Receives configuration via xDS from the istiod controller.