Skip to main content

Istio Support

What is Istio?​

Istio is an open-source service mesh for Kubernetes. It injects an Envoy proxy sidecar next to each application container and transparently handles cross-service networking concerns — mutual TLS between Pods, fine-grained traffic policy and routing, retries and circuit breaking, and consistent observability (metrics, traces, access logs) — without requiring changes to the application itself.

For COSMOS, running inside an Istio mesh is useful when you want encrypted service-to-service traffic between the pods without managing certificates manually.

Kubernetes only

Istio is a Kubernetes-native service mesh, so OPENC3_ISTIO_ENABLED is only relevant when COSMOS is deployed on Kubernetes with Istio sidecar injection enabled. Do not set this variable on Docker Compose or Podman deployments — there is no sidecar to coordinate with, and the init container will hang waiting for one.

Enabling Istio support​

Set OPENC3_ISTIO_ENABLED to any non-empty value (for example "1") on the openc3-cosmos-init container's environment:

env:
- name: OPENC3_ISTIO_ENABLED
value: "1"

Set this whenever Istio sidecar injection is enabled for the namespace COSMOS runs in. Leave it unset (or empty) for non-Istio deployments. No other COSMOS container needs this variable.

When enabled, the init container coordinates with the Envoy sidecar on the standard Istio ports:

PortEndpointUsed for
15021/healthz/readyWait for the sidecar to be ready before init work
15020/quitquitquitAsk the sidecar to exit after init work finishes

If deploying with the COSMOS Enterprise Helm chart, OPENC3_ISTIO_ENABLED is not set automatically — add it to the init Pod's environment in your values override or chart customization.

GKE Workload Identity​

If you are using GKE Workload Identity inside an Istio mesh, exclude the GKE metadata server from sidecar interception, or Workload Identity calls will fail. Apply either:

  • A per-workload annotation:
    annotations:
    traffic.sidecar.istio.io/excludeOutboundIPRanges: "169.254.169.254/32"
  • Or the mesh-wide global.proxy.excludeIPRanges setting in the Istio ConfigMap.