install-cni

Install and configure Istio CNI plugin on a node, detect and repair pod which is broken by race condition.

install-cni [flags]
FlagsDescription
--ambient-enabledWhether ambient controller is enabled
--chained-cni-pluginWhether to install CNI plugin as a chained or standalone
--cni-agent-run-dir <string>Location of the node agent writable path on the node (used for sockets, etc) (default `/var/run/istio-cni`)
--cni-conf-name <string>Name of the CNI configuration file (default ``)
--cni-network-config <string>CNI configuration template as a string (default ``)
--cni-network-config-file <string>CNI config template as a file (default ``)
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--kube-ca-file <string>CA file for kubeconfig. Defaults to the same as install-cni pod (default ``)
--kubeconfig-mode <int>File mode of the kubeconfig file (default `384`)
--log-level <string>Fallback value for log level in CNI config file, if not specified in helm template (default `warn`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)
--monitoring-port <int>HTTP port to serve prometheus metrics (default `15014`)
--mounted-cni-net-dir <string>Directory on the container where CNI networks are installed (default `/host/etc/cni/net.d`)
--repair-broken-pod-label-key <string>The key portion of the label which will be set by the race repair if label pods is true (default `cni.istio.io/uninitialized`)
--repair-broken-pod-label-value <string>The value portion of the label which will be set by the race repair if label pods is true (default `true`)
--repair-delete-podsController will delete pods when detecting pod broken by race condition
--repair-enabledWhether to enable race condition repair or not
--repair-field-selectors <string>A set of field selectors in label=value format that will be added to the pod list filters (default ``)
--repair-init-container-exit-code <int>Expected exit code for the init container when crash-looping because of CNI misconfiguration (default `126`)
--repair-init-container-name <string>The name of the istio init container (will crash-loop if CNI is not configured for the pod) (default `istio-validation`)
--repair-init-container-termination-message <string>The expected termination message for the init container when crash-looping because of CNI misconfiguration (default ``)
--repair-label-podsController will label pods when detecting pod broken by race condition
--repair-label-selectors <string>A set of label selectors in label=value format that will be added to the pod list filters (default ``)
--repair-node-name <string>The name of the managed node (will manage all nodes if unset) (default ``)
--repair-sidecar-annotation <string>An annotation key that indicates this pod contains an istio sidecar. All pods without this annotation will be ignored.The value of the annotation is ignored. (default `sidecar.istio.io/status`)
--skip-tls-verifyWhether to use insecure TLS in kubeconfig file
--ztunnel-uds-address <string>The UDS server address which ztunnel will connect to (default `/var/run/ztunnel/ztunnel.sock`)

install-cni completion

Generate the autocompletion script for install-cni for the specified shell. See each sub-command's help for details on how to use the generated script.

FlagsDescription
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)

install-cni completion bash

Generate the autocompletion script for the bash shell.

This script depends on the 'bash-completion' package. If it is not installed already, you can install it via your OS's package manager.

To load completions in your current shell session:

source <(install-cni completion bash)

To load completions for every new session, execute once:

Linux:

install-cni completion bash > /etc/bash_completion.d/install-cni

macOS:

install-cni completion bash > /usr/local/etc/bash_completion.d/install-cni

You will need to start a new shell for this setup to take effect.

install-cni completion bash
FlagsDescription
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)
--no-descriptionsdisable completion descriptions

install-cni completion fish

Generate the autocompletion script for the fish shell.

To load completions in your current shell session:

install-cni completion fish | source

To load completions for every new session, execute once:

install-cni completion bash > ~/.config/fish/completions/install-cni.fish

You will need to start a new shell for this setup to take effect.

install-cni completion fish [flags]
FlagsDescription
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)
--no-descriptionsdisable completion descriptions

install-cni completion powershell

Generate the autocompletion script for PowerShell.

To load completions in your current shell session:

install-cni completion powershell | Out-String | Invoke-Expression

To load completions for every new session, add the output of the above command to your powershell profile.

install-cni completion powershell [flags]
FlagsDescription
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)
--no-descriptionsdisable completion descriptions

install-cni completion zsh

Generate the autocompletion script for the zsh shell.

If shell completion is not already enabled in your environment you will need to enable it. You can execute the following once:

echo "autoload -U compinit; compinit" >> ~/.zshrc

To load completions in your current shell session:

source <(install-cni completion zsh)

To load completions for every new session, execute once:

Linux:

install-cni completion zsh > "${fpath[1]}/_install-cni"

macOS:

install-cni completion zsh > $(brew --prefix)/share/zsh/site-functions/_install-cni

You will need to start a new shell for this setup to take effect.

install-cni completion zsh [flags]
FlagsDescription
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)
--no-descriptionsdisable completion descriptions

install-cni version

Prints out build version information

install-cni version [flags]
FlagsShorthandDescription
--ctrlz_address <string>The IP Address to listen on for the ControlZ introspection facility. Use '*' to indicate all addresses. (default `localhost`)
--ctrlz_port <uint16>The IP port to use for the ControlZ introspection facility (default `9876`)
--log_as_jsonWhether to format output as JSON or in plain console-friendly format
--log_caller <string>Comma-separated list of scopes for which to include caller information, scopes can be any of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] (default ``)
--log_output_level <string>Comma-separated minimum per-scope logging level of messages to output, in the form of <scope>:<level>,<scope>:<level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default ``)
--log_stacktrace_level <string>Comma-separated minimum per-scope logging level at which stack traces are captured, in the form of <scope>:<level>,<scope:level>,... where scope can be one of [ads, all, cni-agent, cni-plugin, controllers, default, grpc, iptables, klog, model, monitoring, spiffe, trustBundle, validation] and level can be one of [debug, info, warn, error, fatal, none] (default `default:none`)
--log_target <stringArray>The set of paths where to output the log. This can be any path as well as the special values stdout and stderr (default `[stdout]`)
--output <string>-oOne of 'yaml' or 'json'. (default ``)
--short-sUse --short=false to generate full version information

Environment variables

These environment variables affect the behavior of the install-cni command.
Variable NameTypeDefault ValueDescription
AMBIENT_ENABLEDBooleanfalseWhether ambient controller is enabled
AMBIENT_ENABLE_STATUSBooleanfalseIf enabled, status messages for ambient mode will be written to resources. Currently, this does not do leader election, so may be unsafe to enable with multiple replicas.
BYPASS_OVERLOAD_MANAGER_FOR_STATIC_LISTENERSBooleantrueIf enabled, overload manager will not be applied to static listeners
CA_TRUSTED_NODE_ACCOUNTSStringIf set, the list of service accounts that are allowed to use node authentication for CSRs. Node authentication allows an identity to create CSRs on behalf of other identities, but only if there is a pod running on the same node with that identity. This is intended for use with node proxies.
CERT_SIGNER_DOMAINStringThe cert signer domain info
CHAINED_CNI_PLUGINBooleantrueWhether to install CNI plugin as a chained or standalone
CLUSTER_IDStringKubernetesDefines the cluster and service registry that this Istiod instance belongs to
CNI_AGENT_RUN_DIRString/var/run/istio-cniLocation of the node agent writable path on the node (used for sockets, etc)
CNI_CONF_NAMEStringName of the CNI configuration file
CNI_NETWORK_CONFIGStringCNI configuration template as a string
CNI_NETWORK_CONFIG_FILEStringCNI config template as a file
COMPLIANCE_POLICYStringIf set, applies policy-specific restrictions over all existing TLS settings, including in-mesh mTLS and external TLS. Valid values are: * '' or unset places no additional restrictions. * 'fips-140-2' which enforces a version of the TLS protocol and a subset of cipher suites overriding any user preferences or defaults for all runtime components, including Envoy, gRPC Go SDK, and gRPC C++ SDK. WARNING: Setting compliance policy in the control plane is a necessary but not a sufficient requirement to achieve compliance. There are additional steps necessary to claim compliance, including using the validated cryptograhic modules (please consult https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/security/ssl#fips-140-2).
DRY_RUN_FILE_PATHStringIf provided, StdoutStubDependencies will write the input from stdin to the given file.
ENABLE_100_CONTINUE_HEADERSBooleantrueIf enabled, istiod will proxy 100-continue headers as is
ENABLE_AUTO_SNIBooleantrueIf enabled, automatically set SNI when `DestinationRules` do not specify the same
ENABLE_CA_SERVERBooleantrueIf this is set to false, will not create CA server in istiod.
ENABLE_DEBUG_ON_HTTPBooleantrueIf this is set to false, the debug interface will not be enabled, recommended for production
ENABLE_DEFERRED_CLUSTER_CREATIONBooleantrueIf enabled, Istio will create clusters only when there are requests. This will save memory and CPU cycles in cases where there are lots of inactive clusters and > 1 worker thread
ENABLE_DEFERRED_STATS_CREATIONBooleantrueIf enabled, Istio will lazily initialize a subset of the stats
ENABLE_DELIMITED_STATS_TAG_REGEXBooleantrueIf true, pilot will use the new delimited stat tag regex to generate Envoy stats tags.
ENABLE_ENHANCED_DESTINATIONRULE_MERGEBooleantrueIf enabled, Istio merge destinationrules considering their exportTo fields, they will be kept as independent rules if the exportTos are not equal.
ENABLE_ENHANCED_RESOURCE_SCOPINGBooleantrueIf enabled, meshConfig.discoverySelectors will limit the CustomResource configurations(like Gateway,VirtualService,DestinationRule,Ingress, etc)that can be processed by pilot. This will also restrict the root-ca certificate distribution.
ENABLE_HCM_INTERNAL_NETWORKSBooleanfalseIf enable, endpoints defined in mesh networks will be configured as internal addresses in Http Connection Manager
ENABLE_INBOUND_RETRY_POLICYBooleantrueIf true, enables retry policy for inbound routes which automatically retries requests that were reset before it reaches the service.
ENABLE_INGRESS_WAYPOINT_ROUTINGBooleanfalseIf true, Gateways will call service waypoints if the 'istio.io/ingress-use-waypoint' label set on the Service.
ENABLE_LEADER_ELECTIONBooleantrueIf enabled (default), starts a leader election client and gains leadership before executing controllers. If false, it assumes that only one instance of istiod is running and skips leader election.
ENABLE_LOCALITY_WEIGHTED_LB_CONFIGBooleanfalseIf enabled, always set LocalityWeightedLbConfig for a cluster, otherwise only apply it when locality lb is specified by DestinationRule for a service
ENABLE_MCS_AUTO_EXPORTBooleanfalseIf enabled, istiod will automatically generate Kubernetes Multi-Cluster Services (MCS) ServiceExport resources for every service in the mesh. Services defined to be cluster-local in MeshConfig are excluded.
ENABLE_MCS_CLUSTER_LOCALBooleanfalseIf enabled, istiod will treat the host `<svc>.<namespace>.svc.cluster.local` as defined by the Kubernetes Multi-Cluster Services (MCS) spec. In this mode, requests to `cluster.local` will be routed to only those endpoints residing within the same cluster as the client. Requires that both ENABLE_MCS_SERVICE_DISCOVERY and ENABLE_MCS_HOST also be enabled.
ENABLE_MCS_HOSTBooleanfalseIf enabled, istiod will configure a Kubernetes Multi-Cluster Services (MCS) host (<svc>.<namespace>.svc.clusterset.local) for each service exported (via ServiceExport) in at least one cluster. Clients must, however, be able to successfully lookup these DNS hosts. That means that either Istio DNS interception must be enabled or an MCS controller must be used. Requires that ENABLE_MCS_SERVICE_DISCOVERY also be enabled.
ENABLE_MCS_SERVICE_DISCOVERYBooleanfalseIf enabled, istiod will enable Kubernetes Multi-Cluster Services (MCS) service discovery mode. In this mode, service endpoints in a cluster will only be discoverable within the same cluster unless explicitly exported via ServiceExport.
ENABLE_MULTICLUSTER_HEADLESSBooleantrueIf true, the DNS name table for a headless service will resolve to same-network endpoints in any cluster.
ENABLE_NATIVE_SIDECARSBooleanfalseIf set, used Kubernetes native Sidecar container support. Requires SidecarContainer feature flag.
ENABLE_RESOLUTION_NONE_TARGET_PORTBooleantrueIf enabled, targetPort will be supported for resolution=NONE ServiceEntry
ENABLE_SELECTOR_BASED_K8S_GATEWAY_POLICYBooleantrueIf disabled, Gateway API gateways will ignore workloadSelector policies, onlyapplying policies that select the gateway with a targetRef.
ENABLE_TLS_ON_SIDECAR_INGRESSBooleanfalseIf enabled, the TLS configuration on Sidecar.ingress will take effect
ENABLE_VTPROTOBUFBooleantrueIf true, will use optimized vtprotobuf based marshaling. Requires a build with -tags=vtprotobuf.
ENVOY_USERStringistio-proxyEnvoy proxy username
EXCLUDE_UNSAFE_503_FROM_DEFAULT_RETRYBooleantrueIf true, excludes unsafe retry on 503 from default retry policy.
EXTERNAL_ISTIODBooleanfalseIf this is set to true, one Istiod will control remote clusters including CA.
GRPC_KEEPALIVE_INTERVALTime Duration30sgRPC Keepalive Interval
GRPC_KEEPALIVE_TIMEOUTTime Duration10sgRPC Keepalive Timeout
HOST_PROBE_SNAT_IPString169.254.7.127
HOST_PROBE_SNAT_IPV6Stringfd16:9254:7127:1337:ffff:ffff:ffff:ffff
INBOUND_INTERCEPTION_MODEStringThe mode used to redirect inbound connections to Envoy, either "REDIRECT" or "TPROXY"
INBOUND_TPROXY_MARKString
INJECTION_WEBHOOK_CONFIG_NAMEStringistio-sidecar-injectorName of the mutatingwebhookconfiguration to patch, if istioctl is not used.
IPTABLES_TRACE_LOGGINGBooleanfalseWhen enable, all iptables actions will be logged. This requires NET_ADMIN privilege and has noisy logs; as a result, this is intended for debugging only
ISTIOD_CUSTOM_HOSTStringCustom host name of istiod that istiod signs the server cert. Multiple custom host names are supported, and multiple values are separated by commas.
ISTIO_AGENT_ENABLE_WASM_REMOTE_LOAD_CONVERSIONBooleantrueIf enabled, Istio agent will intercept ECDS resource update, downloads Wasm module, and replaces Wasm module remote load with downloaded local module file.
ISTIO_DELTA_XDSBooleantrueIf enabled, pilot will only send the delta configs as opposed to the state of the world configuration on a Resource Request. While this feature uses the delta xds api, it may still occasionally send unchanged configurations instead of just the actual deltas.
ISTIO_DUAL_STACKBooleanfalseIf true, Istio will enable the Dual Stack feature.
ISTIO_ENABLE_CONTROLLER_QUEUE_METRICSBooleanfalseIf enabled, publishes metrics for queue depth, latency and processing times.
ISTIO_ENABLE_IPV4_OUTBOUND_LISTENER_FOR_IPV6_CLUSTERSBooleanfalseIf true, pilot will configure an additional IPv4 listener for outbound traffic in IPv6 only clusters, e.g. AWS EKS IPv6 only clusters.
ISTIO_GPRC_MAXRECVMSGSIZEInteger4194304Sets the max receive buffer size of gRPC stream in bytes.
ISTIO_GPRC_MAXSTREAMSInteger100000Sets the maximum number of concurrent grpc streams.
ISTIO_KUBE_CLIENT_CONTENT_TYPEStringprotobufThe content type to use for Kubernetes clients. Defaults to protobuf. Valid options: [protobuf, json]
ISTIO_MULTIROOT_MESHBooleanfalseIf enabled, mesh will support certificates signed by more than one trustAnchor for ISTIO_MUTUAL mTLS
ISTIO_OUTBOUND_IPV4_LOOPBACK_CIDRString127.0.0.1/32IPv4 CIDR range used to identify outbound traffic on loopback interface intended for application container
ISTIO_OUTBOUND_OWNER_GROUPSString*Comma separated list of groups whose outgoing traffic is to be redirected to Envoy. A group can be specified either by name or by a numeric GID. The wildcard character "*" can be used to configure redirection of traffic from all groups.
ISTIO_OUTBOUND_OWNER_GROUPS_EXCLUDEStringComma separated list of groups whose outgoing traffic is to be excluded from redirection to Envoy. A group can be specified either by name or by a numeric GID. Only applies when traffic from all groups (i.e. "*") is being redirected to Envoy.
ISTIO_WATCH_NAMESPACEStringIf set, limit Kubernetes watches to a single namespace. Warning: only a single namespace can be set.
ISTIO_WORKLOAD_ENTRY_VALIDATE_IDENTITYBooleantrueIf enabled, will validate the identity of a workload matches the identity of the WorkloadEntry it is associating with for health checks and auto registration. This flag is added for backwards compatibility only and will be removed in future releases
JWKS_RESOLVER_INSECURE_SKIP_VERIFYBooleanfalseIf enabled, istiod will skip verifying the certificate of the JWKS server.
KUBECONFIG_MODEInteger384File mode of the kubeconfig file
KUBE_CA_FILEStringCA file for kubeconfig. Defaults to the same as install-cni pod
LABEL_CANONICAL_SERVICES_FOR_MESH_EXTERNAL_SERVICE_ENTRIESBooleanfalseIf enabled, metadata representing canonical services for ServiceEntry resources with a location of mesh_external will be populatedin the cluster metadata for those endpoints.
LOCAL_CLUSTER_SECRET_WATCHERBooleanfalseIf enabled, the cluster secret watcher will watch the namespace of the external cluster instead of config cluster
LOG_LEVELStringwarnFallback value for log level in CNI config file, if not specified in helm template
MCS_API_GROUPStringmulticluster.x-k8s.ioThe group to be used for the Kubernetes Multi-Cluster Services (MCS) API.
MCS_API_VERSIONStringv1alpha1The version to be used for the Kubernetes Multi-Cluster Services (MCS) API.
METRICS_LOCALHOST_ACCESS_ONLYBooleanfalseThis will disable metrics endpoint from outside of the pod, allowing only localhost access.
METRIC_GRACEFUL_DELETION_INTERVALTime Duration5m0sMetric expiry graceful deletion interval. No-op if METRIC_ROTATION_INTERVAL is disabled.
METRIC_ROTATION_INTERVALTime Duration0sMetric scope rotation interval, set to 0 to disable the metric scope rotation
MONITORING_PORTInteger15014HTTP port to serve prometheus metrics
MOUNTED_CNI_NET_DIRString/host/etc/cni/net.dDirectory on the container where CNI networks are installed
MUTEX_PROFILE_FRACTIONInteger1000If set to a non-zero value, enables mutex profiling a rate of 1/MUTEX_PROFILE_FRACTION events. For example, '1000' will record 0.1% of events. Set to 0 to disable entirely.
NODE_NAMEString
PILOT_ALLOW_SIDECAR_SERVICE_INBOUND_LISTENER_MERGEBooleanfalseIf set, it allows creating inbound listeners for service ports and sidecar ingress listeners
PILOT_ANALYSIS_INTERVALTime Duration10sIf analysis is enabled, pilot will run istio analyzers using this value as interval in seconds Istio Resources
PILOT_AUTO_ALLOW_WAYPOINT_POLICYBooleanfalseIf enabled, zTunnel will receive synthetic authorization policies for each workload ALLOW the Waypoint's identity. Unless other ALLOW policies are created, this effectively denies traffic that doesn't go through the waypoint.
PILOT_CERT_PROVIDERStringistiodThe provider of Pilot DNS certificate. K8S RA will be used for k8s.io/NAME. 'istiod' value will sign using Istio build in CA. Other values will not not generate TLS certs, but still distribute ./etc/certs/root-cert.pem. Only used if custom certificates are not mounted.
PILOT_CONVERT_SIDECAR_SCOPE_CONCURRENCYInteger1Used to adjust the concurrency of SidecarScope conversions. When istiod is deployed on a multi-core CPU server, increasing this value will help to use the CPU to accelerate configuration push, but it also means that istiod will consume more CPU resources.
PILOT_DEBOUNCE_AFTERTime Duration100msThe delay added to config/registry events for debouncing. This will delay the push by at least this interval. If no change is detected within this period, the push will happen, otherwise we'll keep delaying until things settle, up to a max of PILOT_DEBOUNCE_MAX.
PILOT_DEBOUNCE_MAXTime Duration10sThe maximum amount of time to wait for events while debouncing. If events keep showing up with no breaks for this time, we'll trigger a push.
PILOT_DISABLE_MX_ALPNBooleanfalseIf true, pilot will not put istio-peer-exchange ALPN into TLS handshake configuration.
PILOT_DNS_CARES_UDP_MAX_QUERIESString100Sets the `udp_max_queries` option in Envoy for the Cares DNS resolver. Defaults to 0, an unlimited number of queries. See `extensions.network.dns_resolver.cares.v3.CaresDnsResolverConfig` in https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/network/dns_resolver/cares/v3/cares_dns_resolver.proto and `ARES_OPT_UDP_MAX_QUERIES` in https://c-ares.org/docs/ares_init.html
PILOT_DNS_JITTER_DURATIONTime Duration100msJitter added to periodic DNS resolution
PILOT_DRAINING_LABELStringistio.io/drainingIf not empty, endpoints with the label value present will be sent with status DRAINING.
PILOT_ENABLE_ALPHA_GATEWAY_APIBooleanfalseIf this is set to true, support for alpha APIs in the Kubernetes gateway-api (github.com/kubernetes-sigs/gateway-api) will be enabled. In addition to this being enabled, the gateway-api CRDs need to be installed.
PILOT_ENABLE_ALPN_FILTERBooleantrueIf true, pilot will add Istio ALPN filters, required for proper protocol sniffing.
PILOT_ENABLE_AMBIENTBooleanfalseIf enabled, ambient mode can be used. Individual flags configure fine grained enablement; this must be enabled for any ambient functionality.
PILOT_ENABLE_AMBIENT_WAYPOINTSBooleanfalseIf enabled, controllers required for ambient will run. This is required to run ambient mesh.
PILOT_ENABLE_ANALYSISBooleanfalseIf enabled, pilot will run istio analyzers and write analysis errors to the Status field of any Istio Resources
PILOT_ENABLE_CDS_CACHEBooleantrueIf true, Pilot will cache CDS responses. Note: this depends on PILOT_ENABLE_XDS_CACHE.
PILOT_ENABLE_CROSS_CLUSTER_WORKLOAD_ENTRYBooleantrueIf enabled, pilot will read WorkloadEntry from other clusters, selectable by Services in that cluster.
PILOT_ENABLE_EDS_DEBOUNCEBooleantrueIf enabled, Pilot will include EDS pushes in the push debouncing, configured by PILOT_DEBOUNCE_AFTER and PILOT_DEBOUNCE_MAX. EDS pushes may be delayed, but there will be fewer pushes. By default this is enabled
PILOT_ENABLE_EDS_FOR_HEADLESS_SERVICESBooleanfalseIf enabled, for headless service in Kubernetes, pilot will send endpoints over EDS, allowing the sidecar to load balance among pods in the headless service. This feature should be enabled if applications access all services explicitly via a HTTP proxy port in the sidecar.
PILOT_ENABLE_GATEWAY_APIBooleantrueIf this is set to true, support for Kubernetes gateway-api (github.com/kubernetes-sigs/gateway-api) will be enabled. In addition to this being enabled, the gateway-api CRDs need to be installed.
PILOT_ENABLE_GATEWAY_API_DEPLOYMENT_CONTROLLERBooleantrueIf this is set to true, gateway-api resources will automatically provision in cluster deployment, services, etc
PILOT_ENABLE_GATEWAY_API_GATEWAYCLASS_CONTROLLERBooleantrueIf this is set to true, istiod will create and manage its default GatewayClasses
PILOT_ENABLE_GATEWAY_API_STATUSBooleantrueIf this is set to true, gateway-api resources will have status written to them
PILOT_ENABLE_IP_AUTOALLOCATEBooleantrueIf enabled, pilot will start a controller that assigns IP addresses to ServiceEntry which do not have a user-supplied IP. This, when combined with DNS capture allows for tcp routing of traffic sent to the ServiceEntry.
PILOT_ENABLE_K8S_SELECT_WORKLOAD_ENTRIESBooleantrueIf enabled, Kubernetes services with selectors will select workload entries with matching labels. It is safe to disable it if you are quite sure you don't need this feature
PILOT_ENABLE_METADATA_EXCHANGEBooleantrueIf true, pilot will add metadata exchange filters, which will be consumed by telemetry filter.
PILOT_ENABLE_MONGO_FILTERBooleantrueEnableMongoFilter enables injection of `envoy.filters.network.mongo_proxy` in the filter chain.
PILOT_ENABLE_MYSQL_FILTERBooleanfalseEnableMysqlFilter enables injection of `envoy.filters.network.mysql_proxy` in the filter chain.
PILOT_ENABLE_NODE_UNTAINT_CONTROLLERSBooleanfalseIf enabled, controller that untaints nodes with cni pods ready will run. This should be enabled if you disabled ambient init containers.
PILOT_ENABLE_PERSISTENT_SESSION_FILTERBooleanfalseIf enabled, Istiod sets up persistent session filter for listeners, if services have 'PILOT_PERSISTENT_SESSION_LABEL' set.
PILOT_ENABLE_QUIC_LISTENERSBooleanfalseIf true, QUIC listeners will be generated wherever there are listeners terminating TLS on gateways if the gateway service exposes a UDP port with the same number (for example 443/TCP and 443/UDP)
PILOT_ENABLE_RDS_CACHEBooleantrueIf true, Pilot will cache RDS responses. Note: this depends on PILOT_ENABLE_XDS_CACHE.
PILOT_ENABLE_REDIS_FILTERBooleanfalseEnableRedisFilter enables injection of `envoy.filters.network.redis_proxy` in the filter chain.
PILOT_ENABLE_ROUTE_COLLAPSE_OPTIMIZATIONBooleantrueIf true, Pilot will merge virtual hosts with the same routes into a single virtual host, as an optimization.
PILOT_ENABLE_SENDING_HBONEBooleanfalseIf enabled, HBONE will be allowed when sending to destinations.
PILOT_ENABLE_SERVICEENTRY_SELECT_PODSBooleantrueIf enabled, service entries with selectors will select pods from the cluster. It is safe to disable it if you are quite sure you don't need this feature
PILOT_ENABLE_SIDECAR_LISTENING_HBONEBooleanfalseIf enabled, HBONE support can be configured for proxies.
PILOT_ENABLE_TELEMETRY_LABELBooleantrueIf true, pilot will add telemetry related metadata to cluster and endpoint resources, which will be consumed by telemetry filter.
PILOT_ENABLE_WORKLOAD_ENTRY_AUTOREGISTRATIONBooleantrueEnables auto-registering WorkloadEntries based on associated WorkloadGroups upon XDS connection by the workload.
PILOT_ENABLE_WORKLOAD_ENTRY_HEALTHCHECKSBooleantrueEnables automatic health checks of WorkloadEntries based on the config provided in the associated WorkloadGroup
PILOT_ENABLE_XDS_CACHEBooleantrueIf true, Pilot will cache XDS responses.
PILOT_ENABLE_XDS_IDENTITY_CHECKBooleantrueIf enabled, pilot will authorize XDS clients, to ensure they are acting only as namespaces they have permissions for.
PILOT_ENDPOINT_TELEMETRY_LABELBooleantrueIf true, pilot will add telemetry related metadata to Endpoint resource, which will be consumed by telemetry filter.
PILOT_ENVOY_FILTER_STATSBooleanfalseIf true, Pilot will collect metrics for envoy filter operations.
PILOT_FILTER_GATEWAY_CLUSTER_CONFIGBooleanfalseIf enabled, Pilot will send only clusters that referenced in gateway virtual services attached to gateway
PILOT_GATEWAY_API_CONTROLLER_NAMEStringistio.io/gateway-controllerGateway API controller name. istiod will only reconcile Gateway API resources referencing a GatewayClass with this controller name
PILOT_GATEWAY_API_DEFAULT_GATEWAYCLASS_NAMEStringistioName of the default GatewayClass
PILOT_HTTP10BooleanfalseEnables the use of HTTP 1.0 in the outbound HTTP listeners, to support legacy applications.
PILOT_INSECURE_MULTICLUSTER_KUBECONFIG_OPTIONSStringComma separated list of potentially insecure kubeconfig authentication options that are allowed for multicluster authentication.Support values: all authProviders (`gcp`, `azure`, `exec`, `openstack`), `clientKey`, `clientCertificate`, `tokenFile`, and `exec`.
PILOT_JWT_ENABLE_REMOTE_JWKSStringfalseMode of fetching JWKs from JwksUri in RequestAuthentication. Supported value: istiod, false, hybrid, true, envoy. The client fetching JWKs is as following: istiod/false - Istiod; hybrid/true - Envoy and fallback to Istiod if JWKs server is external; envoy - Envoy.
PILOT_JWT_PUB_KEY_REFRESH_INTERVALTime Duration20m0sThe interval for istiod to fetch the jwks_uri for the jwks public key.
PILOT_MAX_REQUESTS_PER_SECONDFloating-Point0Limits the number of incoming XDS requests per second. On larger machines this can be increased to handle more proxies concurrently. If set to 0 or unset, the max will be automatically determined based on the machine size
PILOT_MULTI_NETWORK_DISCOVER_GATEWAY_APIBooleantrueIf true, Pilot will discover labeled Kubernetes gateway objects as multi-network gateways.
PILOT_PERSISTENT_SESSION_HEADER_LABELStringistio.io/persistent-session-headerIf not empty, services with this label will use header based persistent sessions
PILOT_PERSISTENT_SESSION_LABELStringistio.io/persistent-sessionIf not empty, services with this label will use cookie based persistent sessions
PILOT_PREFER_SENDING_HBONEBooleanfalseIf enabled, HBONE will be preferred when sending to destinations.
PILOT_PUSH_THROTTLEInteger0Limits the number of concurrent pushes allowed. On larger machines this can be increased for faster pushes. If set to 0 or unset, the max will be automatically determined based on the machine size
PILOT_REMOTE_CLUSTER_TIMEOUTTime Duration30sAfter this timeout expires, pilot can become ready without syncing data from clusters added via remote-secrets. Setting the timeout to 0 disables this behavior.
PILOT_SCOPE_GATEWAY_TO_NAMESPACEBooleanfalseIf enabled, a gateway workload can only select gateway resources in the same namespace. Gateways with same selectors in different namespaces will not be applicable.
PILOT_SEND_UNHEALTHY_ENDPOINTSBooleanfalseIf enabled, Pilot will include unhealthy endpoints in EDS pushes and even if they are sent Envoy does not use them for load balancing. To avoid, sending traffic to non ready endpoints, enabling this flag, disables panic threshold in Envoy i.e. Envoy does not load balance requests to unhealthy/non-ready hosts even if the percentage of healthy hosts fall below minimum health percentage(panic threshold).
PILOT_SIDECAR_USE_REMOTE_ADDRESSBooleanfalseUseRemoteAddress sets useRemoteAddress to true for sidecar outbound listeners.
PILOT_SKIP_VALIDATE_TRUST_DOMAINBooleanfalseSkip validating the peer is from the same trust domain when mTLS is enabled in authentication policy
PILOT_STATUS_BURSTInteger500If status is enabled, controls the Burst rate with which status will be updated. See https://godoc.org/k8s.io/client-go/rest#Config Burst
PILOT_STATUS_MAX_WORKERSInteger100The maximum number of workers Pilot will use to keep configuration status up to date. Smaller numbers will result in higher status latency, but larger numbers may impact CPU in high scale environments.
PILOT_STATUS_QPSInteger100If status is enabled, controls the QPS with which status will be updated. See https://godoc.org/k8s.io/client-go/rest#Config QPS
PILOT_STATUS_UPDATE_INTERVALTime Duration500msInterval to update the XDS distribution status.
PILOT_TRACE_SAMPLINGFloating-Point1Sets the mesh-wide trace sampling percentage. Should be 0.0 - 100.0. Precision to 0.01. Default is 1.0.
PILOT_UNIFIED_SIDECAR_SCOPEBooleantrueIf true, unified SidecarScope creation will be used. This is only intended as a temporary feature flag for backwards compatibility.
PILOT_WORKLOAD_ENTRY_GRACE_PERIODTime Duration10sThe amount of time an auto-registered workload can remain disconnected from all Pilot instances before the associated WorkloadEntry is cleaned up.
PILOT_XDS_CACHE_INDEX_CLEAR_INTERVALTime Duration5sThe interval for xds cache index clearing.
PILOT_XDS_CACHE_SIZEInteger60000The maximum number of cache entries for the XDS cache.
PILOT_XDS_CACHE_STATSBooleanfalseIf true, Pilot will collect metrics for XDS cache efficiency.
POD_NAMEString
POD_NAMESPACEStringpod's namespace
PREFER_DESTINATIONRULE_TLS_FOR_EXTERNAL_SERVICESBooleantrueIf true, external services will prefer the TLS settings from DestinationRules over the metadata TLS settings.
REPAIR_BROKEN_POD_LABEL_KEYStringcni.istio.io/uninitializedThe key portion of the label which will be set by the race repair if label pods is true
REPAIR_BROKEN_POD_LABEL_VALUEStringtrueThe value portion of the label which will be set by the race repair if label pods is true
REPAIR_DELETE_PODSBooleanfalseController will delete pods when detecting pod broken by race condition
REPAIR_ENABLEDBooleantrueWhether to enable race condition repair or not
REPAIR_FIELD_SELECTORSStringA set of field selectors in label=value format that will be added to the pod list filters
REPAIR_INIT_CONTAINER_EXIT_CODEInteger126Expected exit code for the init container when crash-looping because of CNI misconfiguration
REPAIR_INIT_CONTAINER_NAMEStringistio-validationThe name of the istio init container (will crash-loop if CNI is not configured for the pod)
REPAIR_INIT_CONTAINER_TERMINATION_MESSAGEStringThe expected termination message for the init container when crash-looping because of CNI misconfiguration
REPAIR_LABEL_PODSBooleanfalseController will label pods when detecting pod broken by race condition
REPAIR_LABEL_SELECTORSStringA set of label selectors in label=value format that will be added to the pod list filters
REPAIR_NODE_NAMEStringThe name of the managed node (will manage all nodes if unset)
REPAIR_SIDECAR_ANNOTATIONStringsidecar.istio.io/statusAn annotation key that indicates this pod contains an istio sidecar. All pods without this annotation will be ignored.The value of the annotation is ignored.
RESOLVE_HOSTNAME_GATEWAYSBooleantrueIf true, hostnames in the LoadBalancer addresses of a Service will be resolved at the control plane for use in cross-network gateways.
REVISIONString
SHARED_MESH_CONFIGStringAdditional config map to load for shared MeshConfig settings. The standard mesh config will take precedence.
SKIP_TLS_VERIFYBooleanfalseWhether to use insecure TLS in kubeconfig file
SYSTEM_NAMESPACEStringistio-systemistio system namespace
TRUSTED_GATEWAY_CIDRStringIf set, any connections from gateway to Istiod with this CIDR range are treated as trusted for using authentication mechanisms like XFCC. This can only be used when the network where Istiod and the authenticating gateways are running in a trusted/secure network
UNSAFE_ENABLE_ADMIN_ENDPOINTSBooleanfalseIf this is set to true, dangerous admin endpoints will be exposed on the debug interface. Not recommended for production.
UNSAFE_PILOT_ENABLE_DELTA_TESTBooleanfalseIf enabled, addition runtime tests for Delta XDS efficiency are added. These checks are extremely expensive, so this should be used only for testing, not production.
UNSAFE_PILOT_ENABLE_RUNTIME_ASSERTIONSBooleanfalseIf enabled, addition runtime asserts will be performed. These checks are both expensive and panic on failure. As a result, this should be used only for testing.
USE_CACERTS_FOR_SELF_SIGNED_CABooleanfalseIf enabled, istiod will use a secret named cacerts to store its self-signed istio-generated root certificate.
VALIDATION_WEBHOOK_CONFIG_NAMEStringistio-istio-systemIf not empty, the controller will automatically patch validatingwebhookconfiguration when the CA certificate changes. Only works in kubernetes environment.
XDS_AUTHBooleantrueIf true, will authenticate XDS clients.
ZTUNNEL_UDS_ADDRESSString/var/run/ztunnel/ztunnel.sockThe UDS server address which ztunnel will connect to

Exported metrics

Metric NameTypeDescription
controller_sync_errors_totalSumTotal number of errorMetric syncing controllers.
endpoint_no_podLastValueEndpoints without an associated pod.
istio_buildLastValueIstio component build info
istio_cni_install_readyLastValueWhether the CNI plugin installation is ready or not
istio_cni_installs_totalSumTotal number of CNI plugins installed by the Istio CNI installer
istio_cni_repair_pods_repaired_totalSumTotal number of pods repaired by repair controller
nodeagent_reconcile_events_totalSumThe total number of node agent reconcile events.
pilot_conflict_inbound_listenerLastValueNumber of conflicting inbound listeners.
pilot_conflict_outbound_listener_tcp_over_current_tcpLastValueNumber of conflicting tcp listeners with current tcp listener.
pilot_destrule_subsetsLastValueDuplicate subsets across destination rules for same host
pilot_dns_cluster_without_endpointsLastValueDNS clusters without endpoints caused by the endpoint field in STRICT_DNS type cluster is not set or the corresponding subset cannot select any endpoint
pilot_duplicate_envoy_clustersLastValueDuplicate envoy clusters caused by service entries with same hostname
pilot_eds_no_instancesLastValueNumber of clusters without instances.
pilot_endpoint_not_readyLastValueEndpoint found in unready state.
pilot_jwks_resolver_network_fetch_fail_totalSumTotal number of failed network fetch by pilot jwks resolver
pilot_jwks_resolver_network_fetch_success_totalSumTotal number of successfully network fetch by pilot jwks resolver
pilot_no_ipLastValuePods not found in the endpoint table, possibly invalid.
pilot_total_rejected_configsSumTotal number of configs that Pilot had to reject or ignore.
pilot_total_xds_internal_errorsSumTotal number of internal XDS errors in pilot.
pilot_total_xds_rejectsSumTotal number of XDS responses from pilot rejected by proxy.
pilot_virt_servicesLastValueTotal virtual services known to pilot.
pilot_vservice_dup_domainLastValueVirtual services with dup domains.
pilot_xds_cds_rejectLastValuePilot rejected CDS configs.
pilot_xds_eds_rejectLastValuePilot rejected EDS.
pilot_xds_expired_nonceSumTotal number of XDS requests with an expired nonce.
pilot_xds_lds_rejectLastValuePilot rejected LDS.
pilot_xds_rds_rejectLastValuePilot rejected RDS.
pilot_xds_send_timeDistributionTotal time in seconds Pilot takes to send generated configuration.
pilot_xds_write_timeoutSumPilot XDS response write timeouts.
provider_lookup_cluster_failuresSumNumber of times a cluster lookup failed
xds_cache_dependent_config_sizeLastValueCurrent size of dependent configs
xds_cache_evictionsSumTotal number of xds cache evictions.
xds_cache_readsSumTotal number of xds cache xdsCacheReads.
xds_cache_sizeLastValueCurrent size of xds cache
ztunnel_connectedLastValuenumber of connections to ztunnel
Was this information useful?
Do you have any suggestions for improvement?

Thanks for your feedback!