May 24, 2017·6 min read·engineeringistioservice-meshenvoysecurity

Istio 0.1 moves service traffic policy into a proxy layer

Google, IBM and Lyft release Istio 0.1 for Kubernetes. Envoy sidecars and a shared control plane provide a way to apply routing, telemetry and service authentication across applications written in different languages.

A shared client library can standardize service communication only where applications adopt it. An organization with several programming languages or older services may have no practical way to put every caller on the same library and release schedule. The first public Istio release addresses that constraint by inserting proxies into the network paths between services. Operators gain a common place to configure behavior while applications retain their own implementations.

Google, IBM and Lyft release version 0.1 today for Kubernetes. The initial implementation uses Lyft's Envoy proxy and offers routing controls, telemetry and mutual TLS service authentication. Virtual machines and Cloud Foundry are plans for subsequent work. The current platform support is narrower than the project's intended reach.

I am interested in moving shared traffic policy out of individual application libraries. It makes particular sense across a fleet whose services use different languages. The operational cost is another distributed system to configure and understand, so the case depends on how much repeated networking policy the fleet actually has.

The service mesh uses the existing network

The README at the 0.1.0 release tag explicitly says the service mesh is not an overlay network. It operates over the network supplied by the underlying platform. Its role is to change how services communicate through that network, with proxies handling incoming and outgoing service traffic.

This distinction sets an important architectural boundary. Kubernetes still supplies the platform on which the services run. Istio adds an interposed implementation of request handling and policy. Adopting the mesh does not, by itself, describe replacing the cluster's basic networking infrastructure.

The release notes describe semi-automated Envoy injection into Kubernetes Pods and automatic traffic capture with iptables. Application calls can therefore enter the proxy path without a change to the application source. The deployment gains a sidecar and traffic interception even when the application binary remains identical.

That is a substantive deployment change. A service's effective communication behavior now includes software outside its process and configuration supplied by the mesh. The absence of application recompilation is valuable for adoption, but it should not conceal the new components involved in each managed interaction.

The launch contrasts this approach with standardizing on a common RPC library such as gRPC. A library approach remains useful where an organization can adopt it. Istio's motivation is the set of services for which wholesale adoption would be expensive or impractical, and the inconsistent operational behavior that can result from separate implementations across those services.

Configuration and request handling have different implementations

The release-tagged README describes Envoy sidecars, Mixer and Manager. Envoy handles traffic and supplies functions such as routing, circuit breaking and telemetry reporting. Mixer provides a shared component for policy enforcement and telemetry collection. Manager configures Envoy and Mixer at runtime.

Manager's repository description explains the configuration work more precisely. It contains platform-specific code that populates an abstract service model, reconfigures proxies when topology changes and translates routing rules into proxy-specific configuration. The separation lets a service-level rule be expressed without requiring the operator to hand-maintain every proxy's full configuration.

The Istio proxy repository contains Envoy extensions that let the proxy delegate policy decisions to Mixer. The shared policy component and the per-service proxies thus have different jobs. Traffic passes through the distributed proxies, while common policy and telemetry integration can use the central component's interfaces and plugins.

This division also explains part of the operating cost. Understanding an unexpected request outcome may require examining both the proxy's active behavior and the configuration or decision supplied by another component. A common control mechanism removes duplicated application implementations, but it creates a dependency on the correctness of that mechanism.

The project separates its component-level APIs and common configuration formats into the istio/api repository. Mixer client libraries have their own repository as well. That organization reflects the interfaces between components, which matter to an extensible system whose policy integrations and proxy implementation do different work. The release's repository map gives contributors a way to locate those responsibilities without treating Istio as one indivisible executable.

Routing becomes an operational input

The release includes fine-grained routing for canaries, A/B tests and red/black deployments. These controls let an operator choose which service version receives a subset of traffic without compiling that choice into every caller. A release experiment can therefore be expressed through mesh configuration independently of the clients' own release schedules.

The same proxy layer supplies timeouts, retries with budgets and circuit breakers. Their inclusion is useful because service communication otherwise tends to acquire separate handling in each language's library. A common configuration mechanism gives operators a consistent place to express those policies across the managed request paths.

Retry budgets are a particularly relevant detail. The release advertises a bounded retry mechanism rather than merely an unconditional instruction to try a failing call again. Repeating work is itself traffic, so the amount of retry activity belongs in the policy an operator can configure. The announcement does not provide performance measurements that would justify assuming this policy is free.

Kubernetes Ingress integration brings entering requests into the same model. Istio acts as an Ingress controller, allowing application-facing traffic management to include requests that originate outside the service mesh. The relevant configuration must still ensure those requests traverse the managed entry path.

Rate limiting and simple service-to-service authorization are also part of the initial release. The release notes characterize authorization through deny expressions. That is the concrete capability being announced, and it should be described in its own terms rather than borrowing the API model of a different security system.

Shared observation reduces instrumentation differences

Istio produces layer-seven telemetry for HTTP and gRPC using Prometheus, with per-service Grafana dashboards. It also integrates Envoy request tracing with Zipkin. These are named integrations in the initial release, giving the proxy observations somewhere to be collected and inspected.

The architectural benefit is a common observation point. Services written in different languages can produce traffic measurements through the same proxy mechanism. Operators do not need every application team to select the same instrumentation library before obtaining a shared request-level view.

The announcement also describes extending metrics and logs to other collection and querying systems. That flexibility belongs to the integration layer around the services. The release-tagged README identifies Mixer plugins as a way to connect policy and monitoring services, placing those backend choices outside individual application implementations.

These measurements concern the traffic the mesh observes. They are useful for identifying network interactions and service behavior without claiming to reveal all internal application state. A common request view supplies information across the fleet, while an application's own computation remains part of the software being observed.

Service authentication adds another managed responsibility

The launch includes service-to-service mutual TLS and describes certificate management as part of the security framework. The framework aligns with the emerging SPIFFE specification. Authentication and protected communication are consequently part of the shared infrastructure proposal, rather than something each service must assemble independently.

That approach is consistent with my preference for identifying workloads instead of treating an address as sufficient evidence of who is calling. The important operational question is which communication paths receive the authentication and policy behavior. The release provides mechanisms for those managed paths, alongside a deployment model that puts proxies in them.

The announcement presents visibility as an initial adoption step, with other capabilities enabled as users become comfortable with the system. That sequence gives an organization a way to assess common observation before relying on every policy mechanism. It is an adoption option, not a claim that installing the software automatically establishes every desired security rule.

The first release defines a useful operating boundary

Lyft supplies Envoy, while Google and IBM bring their experience with large microservice systems to the project. The launch is a joint effort to provide common service operations across applications. Its current release remains a Kubernetes implementation with a stated intention to support more environments.

The useful boundary is between application feature logic and shared handling of service traffic. Proxies and control components can centralize specific routing, observation and authentication behavior without requiring each service to share a runtime. The cost remains concrete, with sidecars in the request path and a control system translating and enforcing policy. For a sufficiently varied fleet, that can replace substantial duplicated work while leaving the applications' languages and release processes independent.