October 10, 2017·6 min read·engineeringistiovirtual-machinesenvoycontrol-plane

Istio 0.2 expands the mesh beyond Kubernetes Pods

Istio 0.2 adds early VM expansion, standalone Pilot discovery and automatic sidecar injection. Its control-plane improvements address the cost of applying shared policy across a broader set of workloads.

A service mesh confined to one deployment environment cannot govern a request that crosses into an unmanaged application. That is a practical limit for a system intended to centralize service communication policy. The Istio 0.2 announcement expands the mesh to include services on virtual and physical machines and adds support for running Pilot outside Kubernetes. These are early capabilities with explicit infrastructure constraints.

The release also automates sidecar injection on suitably configured Kubernetes clusters, manages services across namespaces and adds policy and mutual TLS for TCP services. The changes concern how a mesh is adopted and operated as much as which protocols it can handle. A common traffic policy becomes more useful when more of the application's actual dependencies can participate.

My interest in Istio depends on that coverage being worth its operating cost. Moving shared retries, routing and authentication out of several language stacks can be useful at fleet scale. Extending the mesh to existing machines improves that case, while making the network and credential prerequisites more important to state precisely.

Expansion and standalone operation are different capabilities

Mesh expansion adds non-Kubernetes services to an existing mesh. The release notes identify virtual machines and physical machines as the initial targets. They also require a flat network across the containers and machines in this early implementation. The feature does not announce a general solution for arbitrary network separation.

That limitation is consistent with the 0.1 release's architecture, which explicitly distinguishes the mesh from an overlay network. Istio uses the connectivity supplied by its environment. Adding another kind of service location does not automatically provide the network needed to reach it.

Standalone Pilot is a separate path. It can consume service information from Consul or Eureka outside Kubernetes and manage Envoy proxies on machines or in containers. An organization can therefore use a non-Kubernetes registry as an input to proxy configuration instead of treating Kubernetes as the only possible source of service information.

The Pilot description at the 0.2.0 tag explains its work as populating an abstract service model, responding to topology changes and translating routing rules into proxy configuration. Discovery input and traffic behavior meet in that component. Supporting another registry matters because Pilot needs to know the services and endpoints before it can configure the proxies that communicate with them.

The same tagged README retains a general statement that only Kubernetes is supported. The dated release announcement is more specific about the new, initial outside-Kubernetes capabilities and their limitations. Its useful claim is concrete expansion and standalone support, without implying that every environment mentioned in project documentation has equivalent maturity.

Machines need a credential provisioning mechanism

The release adds a per-node agent for identity provisioning on virtual and physical machines. That agent generates and sends a certificate signing request to the Istio certificate authority. It gives a machine-based workload a path into the mesh's credential system rather than assuming that Kubernetes' deployment context exists everywhere.

The announcement also adds support for supplying an organization's own CA key and certificate. Persistent storage for the signing key and certificate supports CA restarts. These are related but separate concerns, with one selecting the signing authority and the other preserving its material across the authority's process lifecycle.

This is operationally relevant to expanding a mesh. Routing a request to a VM and authenticating the service at the other end are different requirements. Discovery can identify where to connect, while certificate provisioning supplies credentials for the secure communication mechanism. The expansion feature needs both kinds of integration to offer the behavior advertised for participating workloads.

Automatic injection depends on Kubernetes initializers

The initial release offered semi-automated injection as a deployment preparation step. Version 0.2 can inject Envoy sidecars automatically using Kubernetes 1.7's alpha initializer feature. The cluster must enable that feature for the advertised workflow. The normal deployment command can then create an application whose workload receives the sidecar through the initialization mechanism.

This removes a manual transformation step from the developer's deployment path. It does not eliminate the sidecar or its configuration. The Pod still gains infrastructure that handles its traffic, and the cluster now supplies the mechanism responsible for adding that infrastructure.

Multiple-namespace support expands the installation's scope as well. Control-plane components live in the dedicated istio-system namespace, and the mesh can manage services in other non-system namespaces. The control plane's placement and the applications' placement no longer need to be the same namespace to obtain the release's intended behavior.

Those changes affect how operators organize adoption. They can deploy common control components in one place while application workloads retain their namespaces. Automatic injection can supply the traffic component without requiring every developer to maintain a separate injection command in their own deployment instructions.

TCP policy extends the managed traffic set

Version 0.2 adds transparent mutual TLS and policy enforcement for TCP services alongside the HTTP-level policy available in 0.1. This broadens which connections can receive the mesh's authentication and policy mechanisms. It does not imply that a generic TCP policy has the same application attributes as an HTTP-aware rule.

The announcement also identifies WebSocket, MongoDB and Redis support among routing and protocol improvements. Its detailed traffic-management notes include WebSocket connections, MongoDB proxying and Kubernetes headless services. These are specific additions to communication handling, rather than a claim that every protocol receives identical interpretation.

Ingress policy now covers north-south traffic in addition to the internal service traffic addressed earlier. Egress routing rules and resilience controls for external services extend the configurable paths in the other direction. The managed application consequently includes more of the traffic entering and leaving its internal service graph.

Proxy-side caching changes the control-plane workload

The release redesigns the Envoy-to-Mixer API for robustness and proxy-side caching and batching. The Mixer client caches Check calls and batches Report calls. These changes reduce repeated interaction with the common policy and telemetry component while leaving the proxy in the request path.

Mixer also separates configuration-time computation from request-time computation more clearly. The release describes this as avoiding extra setup on initial requests and improving resource caching. Work that can be prepared when configuration changes need not be repeated in the same form when a request arrives.

Observability now includes hundreds of Envoy metrics in Prometheus as well as Mixer's own metrics. Calls between Envoy and Mixer can also be traced in Zipkin, giving operators information about the policy component's interaction with the proxy.

Another change largely removes the need for Envoy hot restarts through use of its listener, route, cluster and endpoint discovery services. Updating proxy configuration can therefore use the dynamic interfaces named in the announcement instead of repeatedly relying on hot restarts. This addresses the mechanics of distributing changing service information across the Envoy fleet.

Egress traffic now goes directly from the sidecar to the external service. That shortens the forwarding path described by the release. The change is another example of reducing the work around a request while retaining policy and routing as mesh concerns.

Extensibility changes alongside the operating model

Mixer gains an adapter composition model based on templates and an easier build process for including custom adapters. Its built-in adapters have been rewritten for the model. Vendors integrating a monitoring or policy system receive a defined extension mechanism instead of needing every service to call that backend itself.

Istio also moves configuration into the Kubernetes custom resource model. In a Kubernetes environment, operators can optionally manage it through kubectl. That brings mesh configuration into the platform's resource-management path, while Istio components remain responsible for interpreting and applying the resulting declarations.

The release explicitly says 0.2 is not yet ready for production. Its known issues include occasional missing routes returning 404 and a limitation in communication between an Auth-enabled service and a service without Istio. Those conditions matter to the expansion story because adding more environments also increases the number of adoption boundaries an application can cross.

For me, the substantive advance is making those boundaries more explicit. Non-Kubernetes discovery feeds Pilot, machine agents obtain certificates, and the initializer supplies sidecars on enabled clusters. Each mechanism addresses a particular part of bringing a workload into the mesh. The release's caching and configuration changes then reduce some of the common control work needed to manage that wider set of participants.