Traffic Director in Google Cloud

Traffic Director in Google Cloud

A friendly, complete guide to Google's managed control plane for service meshes: how it tells your services where to send requests, how it enables safe releases, retries and security, and how to run it with confidence.

Modern applications are rarely one big program. They are often dozens or hundreds of small programs, called services, that talk to each other all day. One service shows the product page, another checks the stock, another calculates the price, another handles payments. Every time one service needs another, a request must travel across the network, find a healthy copy of the target, and come back with an answer.

When there are only three services, a developer can manage this by hand. When there are three hundred, it becomes a full-time puzzle. Which copy of the service should get this request? What if it is slow? What if a new version should only get five percent of the traffic? Traffic Director is Google Cloud’s managed system for answering those questions in one central place. This guide explains it from zero. Every new word is explained when it first appears, so you can follow along even if you have never built a service mesh.

WWhat Is Traffic Director?

Start with the big picture: what it is, what it is not, and where it fits.

A service is a small program that does one job and is reached over the network. A microservices application is built from many such services. Traffic between services inside your application is often called east-west traffic, because on a diagram it flows sideways between boxes. Traffic coming in from users on the internet is called north-south traffic, because it flows down from the outside.

A service mesh is a layer that manages east-west traffic. It gives every service the same helpful abilities, such as finding other services, spreading load evenly, retrying failed calls, encrypting conversations and recording what happened, without each development team having to write that code again and again.

A service mesh has two parts. The data plane is the set of small programs, called proxies, that actually carry the requests. A proxy is a middleman that receives a request and forwards it to the right place. The most common proxy is Envoy, a popular open-source proxy. The control plane is the brain that tells all those proxies how to behave.

Traffic Director is Google Cloud’s fully managed control plane for a service mesh. “Fully managed” means Google runs it, scales it, keeps it available and updates it. You describe the rules you want, and Traffic Director sends the right instructions to every proxy in your system. It uses open standard APIs known as xDS, which are the same discovery APIs that Envoy understands, so it works with Envoy and with gRPC applications that can speak xDS directly.

Everyday Analogy

Think of a big city’s traffic control center. The roads and cars are the services and requests. At every junction there is a traffic officer (the proxy) who directs cars. The control center (Traffic Director) does not stand at any junction and never touches a single car. It simply watches the whole city and radios updated instructions to every officer: “Road 5 is closed, send cars to Road 7”, or “send one car in twenty down the new bridge as a test”.

An important note about names

Google’s product names change over time. Traffic Director has been presented together with other Google service mesh offerings under the broader name Cloud Service Mesh, and some features are configured through newer routing APIs. The ideas in this guide stay the same, but always check the current Google Cloud documentation for the latest names, supported features and recommended setup.

Managed
Google runs the control plane, so you do not install or patch it
Open
built on open xDS APIs used by Envoy and gRPC
Central
one place to set routing rules for many services
i
Tip

Traffic Director is a brain, not a muscle. It does not carry your traffic itself. Your proxies do that. This is why a problem in the control plane does not instantly stop traffic, as you will see later.

TThe Problem Traffic Director Solves

Every good tool begins with a pain. Here are the pains of running many services.

Pain 1: Finding the other service

Services come and go. Machines are replaced, containers restart and copies are added during busy hours. Their network addresses change all the time. A service that wants to call another must always know the current, healthy addresses. This job is called service discovery. Doing it by hand, or with a hard-coded list, breaks quickly.

Pain 2: Sharing the load fairly

If one service has ten copies, the caller must decide which one gets each request. A simple rotation is not always best. One copy may be slower, another may be overloaded. Smart load balancing needs live information.

Pain 3: Failures spread like dominoes

When one service becomes slow, callers keep waiting and pile up more requests. Soon they too become slow, and the problem spreads across the whole application. This is called a cascading failure. Good systems retry sensibly, give up quickly when needed, and stop sending traffic to sick copies.

Pain 4: Releases are scary

Releasing a new version of a service to everyone at once is a gamble. Teams want to send just a small share of traffic to the new version first, watch for problems, and then slowly increase the share. This is a canary release. Doing this needs careful traffic control.

Pain 5: Every team writes the same code

Without a mesh, each team writes its own retry logic, timeouts, encryption and logging inside every service, often in different programming languages and different styles. The result is inconsistent and hard to update. If a rule changes, hundreds of services must be rebuilt.

Pain 6: Mixed environments

Real companies often have services on virtual machines, in containers, in several regions, and even in other clouds or data centers. Treating them as one connected application is difficult without a common layer of control.

Everyday Analogy

Imagine a company where every employee must memorize every colleague’s current desk number, decide alone who is free to help, and write their own safety rules. Chaos! A receptionist system that knows where everyone is, who is busy and what the safety rules are makes everyone’s life easier. Traffic Director plays the role of the knowledge behind that receptionist system.

CCore Concepts You Must Know

Eight building blocks explain almost everything you will see in the settings and documents.

Brain

Control Plane

The central system that holds all rules and pushes them to proxies. Traffic Director is this part, and Google runs it for you.

Muscle

Data Plane

The proxies and clients that actually carry requests between services. They follow the instructions from the control plane.

Proxy

Envoy Sidecar

An Envoy proxy that runs right beside each service instance, handling that instance’s incoming and outgoing network traffic.

Proxy

Proxyless gRPC

A style where the gRPC library inside the application talks to Traffic Director itself, so no separate proxy is needed.

Protocol

xDS APIs

A family of open discovery APIs through which a control plane sends listeners, routes, clusters and endpoints to proxies.

Targets

Backend Service

A named group of identical service copies, with settings for load balancing, health checks and resilience.

Targets

Network Endpoint Group (NEG)

A list of exact addresses and ports where a service is running. NEGs let Traffic Director track containers and virtual machines precisely.

Rules

Routing Rules

Instructions that match requests by host, path or header, and send them to the right backend, with options like weights, retries and timeouts.

Handy words

TermWhat it meansEveryday picture
gRPCA fast way for services to call each other, built on HTTP/2A direct phone line between two departments
Health checkA regular test that asks a service copy “are you well?”A nurse checking temperatures
RetrySending a failed request againCalling someone back when the line drops
TimeoutThe maximum time to wait for an answerHanging up if nobody answers
Circuit breakerA limit that stops sending more requests to an overloaded serviceThe fuse in your house
mTLSMutual TLS, where both sides prove who they are and encrypt the conversationTwo people showing ID to each other before whispering
Canary releaseGiving a new version a small share of traffic firstA taste test before serving the whole table
ObservabilityThe ability to see what a system is doing through metrics, logs and tracesA car dashboard

AArchitecture and Components

See how the brain, the proxies and your services fit together.

The big idea is the clean split between the control plane and the data plane. Traffic Director lives in the control plane and runs as a global service on Google’s side. Your proxies, which sit in the data plane, open a long-lived connection to Traffic Director and ask for their instructions. Your requests never pass through Traffic Director. They flow directly from one service’s proxy to another service’s proxy.

flowchart TB
  Admin["Platform Engineer Defines Routing Rules"] --> TD["Traffic Director Managed Control Plane"]
  Health["Health Checks and Endpoint Lists"] --> TD
  TD -->|"xDS configuration"| P1["Envoy Sidecar Beside Service A"]
  TD -->|"xDS configuration"| P2["Envoy Sidecar Beside Service B"]
  TD -->|"xDS configuration"| G1["Proxyless gRPC Client in Service C"]
  SA["Service A"] --> P1
  P1 -->|"Direct request chosen by rules"| P2
  P2 --> SB["Service B"]
  G1 -->|"Direct request"| P2
    
Figure 1: Traffic Director sends instructions to proxies, while the real requests flow directly between services.

Walking through the picture

A platform engineer, or an automated pipeline, writes the routing rules. Traffic Director also gathers live facts, such as which service copies exist and which ones passed health checks. It combines the rules and the facts into a complete configuration for each proxy and pushes it out. When Service A wants to call Service B, its sidecar already knows where all the healthy copies of B are and which rules apply, so it can choose and send the request immediately.

The main components

  • Traffic Director control plane: the global, managed brain that stores configuration and serves it using xDS.
  • Configuration resources: rules and settings you create, such as backend services, health checks, routes and policies.
  • Endpoint sources: NEGs and instance groups that tell Traffic Director where service copies are running, including on virtual machines, in Google Kubernetes Engine containers and in hybrid locations.
  • Data plane proxies: Envoy sidecars, Envoy running as gateways or middle proxies, and proxyless gRPC clients.
  • Security services: certificate authority integration, so proxies can get identities for encrypted conversations.
  • Telemetry destinations: Cloud Monitoring, Cloud Logging and Cloud Trace, where proxies report what they see.
Everyday Analogy

Consider an airline’s operations center and its pilots. The center decides routes, weather diversions and gate changes, and radios them out. The pilots fly the planes themselves. Passengers never board the operations center. If the radio crackles for a minute, the planes keep flying on the last instructions they received.

i
Good to Know

Traffic Director is not the same as Google Cloud’s external load balancers. Those handle user traffic coming in from the internet. Traffic Director focuses on service-to-service traffic inside your application. The two often work together in one system.

HHow It Works Inside: The xDS Conversation

Understand the quiet, constant conversation between proxies and the control plane.

When an Envoy proxy starts, it reads a small startup file that tells it who it is and where to find Traffic Director. It then opens a long-running connection to Traffic Director and says, in effect, “Hello, I am this proxy, in this network, serving this service. What are my instructions?” Traffic Director replies with a complete setup, and then keeps the connection open to push changes as soon as they happen.

sequenceDiagram
  participant E as Envoy Proxy
  participant T as Traffic Director
  participant S as Backend Endpoint
  E->>T: Connect and send node identity
  T-->>E: Send listeners and routes
  T-->>E: Send clusters and settings
  T-->>E: Send endpoint addresses
  E->>S: Forward application request using received rules
  T-->>E: Push updated endpoints after a change
    
Figure 2: A proxy introduces itself, receives its configuration, and then keeps receiving live updates.

The four kinds of information

The xDS family splits the configuration into pieces. You do not need to memorize the short names, but the ideas help a lot.

  • Listeners: where the proxy should listen for traffic, for example “listen for requests meant for the payments service”.
  • Routes: how to match a request, using host name, path or headers, and which destination group it should go to.
  • Clusters: the destination groups, with settings such as load balancing method, timeouts, circuit breaking and encryption.
  • Endpoints: the actual addresses of the healthy copies in each group, including which zone or region each one lives in.

Why pushing beats polling

Because the connection stays open and Traffic Director pushes changes, proxies learn about a new or failing service copy within moments. A system that asks for updates only every few minutes would keep sending requests to dead copies for a long time. The push model keeps the picture current.

What happens if the control plane is unreachable

Proxies keep working with the last good configuration they received. They continue to route requests, apply load balancing and enforce rules. What they cannot do during such a gap is learn about new changes. This is why the data plane keeps carrying traffic even when the control plane is briefly unavailable, but also why you should not rely on instant updates during an outage.

Everyday Analogy

A delivery driver carries a printed map and a list of addresses. A dispatcher radios live changes: “road closed”, “new customer”. If the radio goes quiet, the driver keeps delivering using the printed map, though without any new information until the radio works again.

i
Tip

Test what happens in your own system when a proxy cannot reach the control plane, for example when you restart many proxies at once while the control plane is unreachable. New proxies need an initial configuration to work, so planning for startup is as important as planning for steady running.

DData Flow and Request Lifecycle

Follow one request from Service A to Service B, step by step.

1

Service A makes a call

The application code simply asks for “the pricing service” by name. It does not need to know any machine addresses.

2

The local proxy catches it

The sidecar next to Service A intercepts the outgoing request. In the proxyless style, the gRPC library plays this role.

3

Rules are matched

The proxy checks its routes. Does a header or path rule apply? Is a canary split in effect? It picks the destination group.

4

A healthy copy is chosen

Using the load balancing method and the live endpoint list, the proxy chooses a specific copy, usually preferring a nearby one.

5

The request is sent securely

If mutual TLS is on, the proxies prove their identities and encrypt the conversation. The request is delivered with the configured timeout.

6

Failures are handled

If the call fails in a retryable way, the proxy may try another copy. Repeated failures can eject a sick copy from the pool for a while.

7

Telemetry is recorded

Both proxies note timing, status and size, and can send metrics, logs and trace data to the monitoring tools.

The slow lane: configuration lifecycle

Next to the fast lane of requests, there is a slow lane of configuration. You change a rule. Traffic Director validates it and prepares updated configuration for the affected proxies. The proxies receive the update over their open connections and apply it to new requests, usually without restarting. A configuration change therefore takes effect within a short time across the whole mesh, though not at the exact same instant on every proxy.

!
Watch Out

Because proxies update at slightly different moments, a rollout of routing changes can briefly show mixed behavior. Design your rules so that both the old and new state are safe for a short overlap.

TThe Configuration Model: Resources and Rules

How you describe what you want to Traffic Director.

Traffic Director is configured with resources, which are named objects that you create through the console, command line, automation tools or the APIs. There are two styles you will meet in documentation. One is built on Google Cloud’s load balancing resources, and the other uses newer service routing resources modeled on ideas from the Kubernetes Gateway world. Both aim to answer the same questions, so learning the concepts first makes either style easier.

flowchart LR
  FR["Forwarding Rule - Internal Self Managed"] --> TP["Target Proxy"]
  TP --> UM["URL Map - Routing Rules"]
  UM --> BS1["Backend Service Version 1"]
  UM --> BS2["Backend Service Version 2"]
  BS1 --> NEG1["Network Endpoint Group One"]
  BS2 --> NEG2["Network Endpoint Group Two"]
  BS1 --> HC["Health Check"]
  BS2 --> HC
    
Figure 3: A typical chain of resources in the load balancing style of configuration.

The load-balancing style, explained

ResourceJobSimple picture
Forwarding ruleDefines the virtual address and port that clients call. For a mesh it uses an internal, self-managed scheme, meaning your own proxies do the forwardingA phone number listed in a directory
Target proxyConnects the address to a set of routing rules, for HTTP or gRPCThe switchboard operator
URL mapHolds the matching rules: host, path, header, and what to do for eachThe company’s department directory
Backend serviceA group of service copies with load balancing and resilience settingsA department team
Health checkThe test that decides whether a copy is healthyA nurse’s rounds
NEG or instance groupThe list of actual copies and their addressesThe staff roster

The service-routing style, explained

The newer style uses simpler building blocks. A Mesh resource represents the mesh itself. Route resources, such as HTTP routes and gRPC routes, describe how requests are matched and where they go. A Gateway resource represents an entry or exit point managed by proxies. Services are attached to the mesh by binding them to routes. If you already know Kubernetes Gateway API ideas, this will feel familiar. Which style is recommended for your case can change, so check the current documentation.

Matching requests

A route can match on many things:

  • Host: which service name was asked for.
  • Path: the exact path, a prefix, or a pattern, such as everything under “/checkout”.
  • Headers: a request label, for example “x-user-group is beta-testers”.
  • Query parameters: values in the address after the question mark.

Actions that a route can take

  • Send traffic to one backend, or split it between several with weights.
  • Rewrite the host or path before forwarding.
  • Set a timeout and retry policy.
  • Mirror a copy of the traffic to another backend for testing.
  • Inject delays or errors on purpose, to test resilience.
  • Redirect the caller to another address.
Everyday Analogy

A company’s front desk has a directory board. “If a visitor asks for Billing, send them to the third floor. If they ask for Support and carry a gold card, send them to the premium lounge.” Routes are those directory lines, and the proxies are the front desk staff who read them.

i
Good to Know

Keep all configuration in version-controlled files and apply it with automation. Hand-clicking in a console is fine for learning, but in production you want every change reviewed, repeatable and easy to roll back.

TTraffic Management: Safe Releases and Smart Routing

The most loved feature: control exactly who gets which version.

Weighted traffic splitting

With weights, you decide the share of traffic each version receives. You might begin with ninety-five percent to the stable version and five percent to the new one. If the new version behaves well, you raise it to twenty-five, then fifty, then one hundred. If it misbehaves, you set it back to zero in seconds, without redeploying anything.

Header-based routing

You can send only certain requests to the new version, for example requests from your own testers who carry a special header. Real customers still see the stable version. This lets teams test in production safely.

flowchart TD
  Req["Request From a Service Proxy"] --> Rule{"Does the Tester Header Match?"}
  Rule -->|"Yes"| V2["Send to Version 2"]
  Rule -->|"No"| Split{"Apply Weighted Split"}
  Split -->|"95 percent"| V1["Version 1 Stable"]
  Split -->|"5 percent"| V2
    
Figure 4: A canary release that combines a header rule with a small weighted share.

Traffic mirroring

Mirroring sends a copy of real requests to a new version, but throws away its answers. Real users only get answers from the stable version. The team can watch how the new version handles real traffic with zero risk to customers. Be careful with requests that change data, because a mirrored copy could still cause side effects unless the test system is isolated.

Timeouts and retries

A timeout sets the longest a proxy will wait. A retry policy says which failures are worth trying again, how many times, and how long to wait between tries. These rules, set centrally, give every service the same good behavior. Use retries only for requests that are safe to repeat, since a repeated payment request could charge a customer twice.

Fault injection

Fault injection means breaking things on purpose, in a controlled way. You can add delay to a share of requests or return an error for some of them, to learn whether callers cope. It is a safe way to practice for real failures, and a core tool of chaos engineering.

Rewrites and redirects

Routes can rewrite the host or path, which helps when you are renaming services or moving them while keeping old callers working. This makes migrations gradual rather than sudden.

Everyday Analogy

A restaurant testing a new recipe gives a tiny taste portion to a handful of customers and asks for opinions before changing the whole menu. A secret tasting for staff only is the header rule. A kitchen cook who cooks the new dish alongside the old one, but throws the new one away after tasting, is mirroring.

!
Watch Out

Many retries at many layers multiply. If three services in a chain each retry three times, one failing call at the bottom can become dozens of calls. Set retry limits carefully and keep total waiting time bounded.

LLoad Balancing and Resilience

How the mesh keeps working when parts of the system struggle.

Choosing a load balancing method

Traffic Director can tell proxies how to choose among healthy copies. Common methods include:

  • Round robin: take turns, one copy after another. Simple and fair when copies are equal.
  • Least request: prefer the copy with the fewest requests in progress. Helps when requests take different times.
  • Random: pick any healthy copy.
  • Consistent hashing methods: send the same kind of request, such as the same user, to the same copy. This is useful when copies keep helpful temporary data in memory.

The exact list of supported methods can differ by proxy type, so check the current documentation.

Locality-aware routing

Google Cloud is divided into regions and zones. A call that stays in the same zone is faster and cheaper than one that crosses to another region. With locality-aware load balancing, proxies prefer the nearest healthy copies and only move to farther ones when nearby copies are unhealthy or overloaded. This lowers delay and network cost.

Failover

If every copy in a zone fails, traffic spills over to the next-nearest healthy location. You can design multi-zone and multi-region setups so that a whole zone can be lost without users noticing much.

Circuit breaking

A circuit breaker limits how many connections or requests may be waiting for a service at once. When the limit is hit, extra requests are rejected quickly instead of piling up. This protects both the caller and the struggling service, stopping the domino effect.

Outlier detection

Outlier detection watches for copies that keep failing compared to their peers. A copy that returns too many errors is temporarily removed from the pool, then tried again later. This is like benching a player who is injured and letting them return when they have recovered.

Health checks and draining

Health checks tell Traffic Director which copies are well. When you remove or replace a copy, connection draining lets existing requests finish while new ones go elsewhere, so deployments do not cut people off mid-request.

Everyday Analogy

A supermarket opens more checkout lanes when queues grow (load balancing), sends shoppers to the closest open lane (locality), closes a lane with a broken scanner (outlier detection), and puts up a “lane full” sign when a queue is too long (circuit breaker).

i
Tip

Resilience settings only help if they are tested. Use fault injection in a safe environment to confirm that your timeouts, retries and circuit breakers really produce the behavior you expected.

DDeployment Models and Where It Runs

Several ways to put proxies and services together, and several kinds of places to run them.

Model 1: Sidecar proxies

An Envoy proxy runs next to each service copy, in the same virtual machine or in the same pod, which is the smallest deployable unit in Kubernetes. All of the service’s network traffic goes through its sidecar. This model works with any programming language, because the application does not need to know about the mesh. The cost is extra memory and CPU for each proxy, and a small added delay per hop.

Model 2: Proxyless gRPC

If your services use gRPC, the library inside the application can understand xDS and talk to Traffic Director directly. There is no sidecar. This reduces resource use and delay, and removes one moving part. The trade-offs are that you depend on supported gRPC versions and on the features that the library implements, and not every advanced capability is available in this style.

Model 3: Gateways and middle proxies

Sometimes you want Envoy proxies at the edge of the mesh or in the middle of it, acting as a shared entry point or exit point instead of one per service. Traffic Director can configure these as well. They are useful for controlling how outside systems reach the mesh, or for routing traffic between groups of services.

Model 4: Mixed and hybrid environments

Real systems are rarely tidy. Traffic Director can manage services on Compute Engine virtual machines, in containers on Google Kubernetes Engine, and, through hybrid connectivity options, services running in other clouds or on-premises. A hybrid NEG is a list of endpoints outside Google Cloud that Traffic Director can include in its routing, reachable over private connections such as VPN or Interconnect. This lets you move services to Google Cloud gradually while keeping a single set of routing rules.

ModelGood forMain cost
Envoy sidecarAny language, rich features, uniform behaviorExtra CPU and memory per instance, a little added delay
Proxyless gRPCgRPC-only systems that value low overheadLimited by library versions and supported features
Gateway or middle proxyShared entry points and cross-group trafficAnother tier to run and scale
Hybrid and multi-cloudGradual migration and mixed estatesNetwork complexity and extra delay across connections
Everyday Analogy

A sidecar proxy is like giving every traveler a personal guide who handles tickets and directions. Proxyless gRPC is like training travelers to read the signs themselves. A gateway is like a single helpful information desk at the entrance of a station.

SSecurity in the Mesh

Inside a network, “trusted” is not a good enough default. Verify everyone.

In older designs, a firewall guarded the outside of a network and everything inside trusted everything else. Today, a single stolen password or one compromised service can let an attacker move around freely. The modern approach is zero trust: every request must prove who it comes from and be checked, even inside the network.

Identity for every workload

Each service gets a verifiable identity, delivered as a certificate that is issued and renewed automatically. The certificates come from a certificate authority service, such as Google’s Certificate Authority Service, so teams do not manage certificate files by hand. The identity tells other services exactly who is calling.

Encryption between services

With mutual TLS, both sides show their certificates, then encrypt the conversation. This protects data from being read by anyone listening on the network, and it blocks a fake service from pretending to be a real one. The proxies do this work, so developers do not need to add encryption code to each service.

Authorization policies

Authentication answers “who are you?”. Authorization answers “are you allowed to do this?”. Policies can say that only the checkout service may call the payment service, or that only certain paths and methods are open. This limits the damage if a single service is compromised, because it can only reach what it truly needs. This idea is called least privilege.

Protecting the control plane

Access to change Traffic Director configuration is controlled by Google Cloud’s Identity and Access Management. Only trusted people and automation should be allowed to edit routing rules, because a wrong rule can redirect traffic anywhere. Proxies also authenticate to Traffic Director with their own workload identities, so impostors cannot ask for the mesh configuration.

Everyday Analogy

An office building where every employee wears a photo badge, every door needs a badge tap, and each badge opens only the rooms that person works in. A stolen badge is limited to a few doors instead of the whole building.

Security habits

  • Turn on mutual TLS gradually, starting in a permissive mode that accepts both secure and plain traffic, and then tighten to strict mode after you confirm that all callers are ready.
  • Write authorization rules as “deny by default, allow what is needed”.
  • Keep certificate lifetimes short and make sure renewal is automatic and monitored.
  • Use separate identities for separate services, never a shared one.
  • Review who can change mesh configuration, and require review for changes.
!
Watch Out

Turning on strict encryption everywhere in one step can break callers that are not ready, such as old services or health checkers that do not carry certificates. Roll out security by stages and test each stage.

OObservability: Seeing Inside the Mesh

A mesh makes a hidden world of service calls visible, if you look at the right signals.

Because every request passes through a proxy or a smart client, proxies are perfect places to collect facts about traffic. They can report the same set of signals for every service, regardless of programming language.

The three signals

  • Metrics: numbers over time, such as requests per second, error rate and response time.
  • Logs: records of individual requests, which show what happened to a particular call.
  • Traces: the path of one request through many services, showing where time was spent. Your applications may need to pass along a trace identifier for traces to connect properly across services.

These can be sent to Google Cloud’s Cloud Monitoring, Cloud Logging and Cloud Trace, or to other tools you prefer.

The golden signals

A well-known approach says to watch four things for every service: latency (how long requests take), traffic (how many requests), errors (how many fail) and saturation (how full the resources are).

Checking the control plane’s view

Besides watching traffic, you will sometimes ask a different question: “What configuration does this proxy actually have right now?” Traffic Director provides ways to inspect the status of connected clients and their received configuration. This is very helpful when a rule seems not to apply, because it shows whether the problem is in the rule, the delivery or the proxy.

Signal to watchWhy it mattersA warning sign
Error rate per service pairShows exactly which connection is failingOne caller sees many errors from one target
Latency percentilesAverages hide slow outliers, so look at the slowest few percentThe slowest requests keep getting slower
Retry countRetries hide problems and add loadRetries rising while errors seem low
Healthy endpoint countShows how many copies are availableA sudden drop in healthy copies
Circuit breaker tripsShows overloaded targetsFrequent rejections at peak time
Config update failuresShows proxies that are stuck with old rulesProxies not receiving or rejecting updates
Proxy CPU and memorySidecars use real resourcesProxies near their limits
Everyday Analogy

If every road junction had a counter showing how many cars pass, how long they wait and how many break down, the city planners would see jams forming before drivers complained. Proxies are those counters at every junction.

PPerformance and Scalability

What grows when your system grows, and what to keep an eye on.

The control plane scales for you

Traffic Director is a managed global service, so Google handles the scaling of the control plane. You do not size servers for it. What you do need to know are the documented limits, such as how many proxies, services or endpoints are supported per configuration. These limits can change, so check the current quotas before designing a very large mesh.

The data plane is your responsibility

Proxies use CPU and memory. The more routes, services and endpoints a proxy has to know about, the more memory its configuration needs. In a very large mesh, giving every proxy the entire picture of every service is wasteful. Where possible, limit each proxy’s view to the services it actually needs to call.

Latency added by proxies

A sidecar adds a small delay on each hop, because the request goes through two proxies (one on each side). For most applications this is tiny compared to the work the services do, but chains of many calls add up. Measure it in your own system. Proxyless gRPC removes this extra hop.

Scaling the services themselves

Traffic Director works nicely with autoscaling. When a managed instance group or a Kubernetes deployment adds copies, the NEG updates, Traffic Director learns of the new endpoints and pushes them to the proxies, so new copies start receiving traffic quickly once they pass health checks.

Tips for large systems

  • Use the narrowest configuration scope that works for each group of services.
  • Avoid unnecessary changes. Frequent configuration churn makes every proxy work harder.
  • Stagger restarts of large groups of proxies so they do not all request their configuration at once.
  • Choose sensible health check intervals. Very frequent checks add load and noise.
  • Right-size proxy resources after observing real usage.
Everyday Analogy

Giving every taxi driver a map of the whole world uses a lot of memory and slows the driver down. Giving each driver a map of the city they actually serve keeps things fast.

i
Tip

Run a load test that includes the proxies, not just the services. A test that bypasses the mesh can give you numbers that real traffic will never see.

CCost: Understanding the Bill

The cost of a mesh is more than the control plane. Count everything.

Pricing for Traffic Director and related mesh offerings is set by Google and can change, so use Google’s pricing page and calculator for current numbers. What matters for planning is to see the full picture of where money goes.

Control Plane

Managed Service Usage

Any charge for using the managed control plane, which depends on how Google currently prices the offering. Check the latest rules.

Data Plane

Proxy Resources

CPU and memory for every sidecar or gateway. In a large fleet, this is often the biggest hidden cost.

Network

Data Transfer

Traffic between zones, regions or out to other clouds is charged. Locality-aware routing helps reduce it.

Telemetry

Logs, Metrics and Traces

Collecting everything from every request can become expensive. Sampling helps control it.

Ways to keep spending sensible

  • Prefer local traffic: keep callers and targets in the same zone when possible.
  • Consider proxyless gRPC: where it fits, it saves the cost of running sidecars.
  • Sample logs and traces: record all errors, but only a fraction of normal requests.
  • Right-size sidecars: measure and set realistic resource requests, instead of copying large defaults.
  • Limit configuration scope: smaller configurations mean lighter proxies.
  • Label everything: so that billing reports show which team and environment spend what.
Everyday Analogy

Hiring a personal guide for every traveler is wonderful but costs more than printing clear signs. Decide where the extra help truly pays off, and use cheaper methods elsewhere.

i
Good to Know

A mesh can also save money. Standard retries, timeouts and encryption mean less custom code to write and maintain, and safer releases mean fewer costly outages.

AAdopting It Step by Step

A calm, staged path from “no mesh” to “mesh in production”.

1

Decide if you need a mesh

If you have a handful of services and simple needs, simpler tools may be enough. A mesh pays off as the number of services and the need for consistent control grow.

2

Pick the data plane style

Choose sidecars, proxyless gRPC or a mix, based on your languages, protocols and resource budget.

3

Start in a test environment

Set up a small mesh with two or three non-critical services. Practice routing, splitting and failure handling.

4

Add observability first

Turn on metrics, logs and traces before changing behavior, so you can see the effect of every change.

5

Onboard services gradually

Bring services into the mesh one team at a time, starting with the least critical. Keep the old path available while you verify the new one.

6

Introduce security in stages

Begin with permissive encryption, confirm all callers are ready, and then move to strict mode and authorization policies.

7

Automate and document

Keep configuration in version control, use review and testing for changes, and write runbooks for common problems.

How Traffic Director relates to Istio and other options

Istio is a well-known open-source service mesh that includes its own control plane that you or a vendor run. Traffic Director takes a different approach: Google runs the control plane, and it speaks the open xDS APIs, which Envoy and other clients understand. Google has also brought its mesh offerings together under the Cloud Service Mesh name, including options based on Istio, so you may see both styles described together. Which path is right for you depends on your platform, your need for Kubernetes-specific features and your appetite for running your own control plane. Read the current documentation to see which options are recommended for new projects.

i
Tip

Because product packaging and recommended paths evolve, before starting a new project check Google’s latest guidance on which mesh option to use. Your skills, such as understanding routes, proxies and xDS, will transfer either way.

AAdvantages, Disadvantages and Trade-offs

No tool is perfect. A good architect weighs both sides before choosing.

Advantages

  • Fully managed, so there is no control plane for your team to run or patch
  • Built on open xDS APIs, which reduces lock-in at the proxy level
  • One central place for routing, retries, timeouts and traffic splitting
  • Safe releases through canaries, header routing and mirroring
  • Works across virtual machines, containers and hybrid locations
  • Supports both sidecar and proxyless gRPC styles
  • Locality-aware load balancing lowers delay and network cost
  • Integrates with Google Cloud identity, certificates and observability
  • Proxies keep working with their last configuration if the control plane is briefly unreachable

Disadvantages

  • Adds a new layer, with new concepts that teams must learn
  • Sidecars consume extra CPU and memory and add a small delay
  • Debugging gets harder, because a problem may sit in the app, the proxy or the rules
  • Tied to Google Cloud for the managed control plane
  • Product names and recommended setups change over time, which can confuse teams
  • Proxyless gRPC is limited to supported libraries and features
  • A wrong central rule can affect many services at once
  • For small systems, the complexity may outweigh the benefit

How it compares with its neighbors

QuestionTraffic DirectorCloud Load Balancing (external or internal)Self-run Istio
Main purposeControl plane for service-to-service trafficDistribute traffic to a service from clientsOpen-source mesh with its own control plane
Who runs the control planeGoogleGoogle, as a managed load balancerYou or a vendor
ProxiesEnvoy or proxyless gRPC that you deployManaged by GoogleEnvoy that you deploy
Best fitMany services needing consistent routing and policyEntry points and simple internal balancingTeams wanting full control of an open-source mesh
Operations effortModerate: data plane onlyLowHigher: data plane and control plane

The main trade-offs, in plain words

  • Consistency versus complexity: a mesh gives every service the same behavior, but you must learn and operate the mesh.
  • Power versus overhead: sidecars give rich features at a resource cost. Proxyless saves resources but offers fewer features.
  • Central control versus blast radius: one place for rules is convenient, but a mistake there can spread widely. Review and staged rollouts reduce the risk.
  • Managed versus self-run: a managed control plane saves effort, while a self-run one gives deeper control and portability.

DDesign Patterns and Anti-patterns

A pattern is a proven way to solve a common problem. An anti-pattern is a tempting mistake that causes pain later.

Helpful patterns

Pattern

Canary Release

Send a small share of traffic to a new version, watch the signals, and raise the share step by step, with a quick path back to zero.

Pattern

Shadow Testing

Mirror live requests to a new version and compare behavior without affecting users.

Pattern

Zone-Aware Routing

Prefer local copies to reduce delay and cross-zone cost, with failover to other zones as a safety net.

Pattern

Bulkheads and Circuit Breakers

Limit how much one caller can demand of a service, so one noisy neighbor cannot sink everyone.

Pattern

Strangler Migration

Move functions out of an old system one route at a time, using rules to send each path to old or new, until the old system can be retired.

Pattern

Zero-Trust Service Access

Give every service an identity, encrypt calls and allow only the specific callers that each service needs.

Anti-patterns to avoid

ANTI-PATTERN 01 Avoid
What people do

They add retries at every layer of a call chain, each with generous counts.

Why it hurts

A small failure turns into a retry storm that overloads the very service that is already struggling.

Better approach

Retry only at one well-chosen layer, limit the number of attempts, add waiting time between tries and use circuit breakers.

ANTI-PATTERN 02 Avoid
What people do

They push a rule change to the whole mesh at once, with no testing.

Why it hurts

One typo can misroute traffic for every service, causing a wide outage.

Better approach

Validate in a test mesh first, apply changes to a small group, watch the signals, then expand. Keep the previous version ready to restore.

ANTI-PATTERN 03 Avoid
What people do

They put business logic into mesh rules, such as complicated conditions that decide what a customer is entitled to.

Why it hurts

The behavior of the application becomes hidden in infrastructure configuration, where developers do not expect it and cannot test it easily.

Better approach

Keep the mesh for traffic, security and resilience. Keep business decisions in application code.

ANTI-PATTERN 04 Avoid
What people do

They let every proxy know about every service in a huge system.

Why it hurts

Proxies use more memory, take longer to start, and every small change causes a lot of update traffic.

Better approach

Limit each proxy’s view to the services it needs, and group services logically.

ANTI-PATTERN 05 Avoid
What people do

They adopt a mesh for a handful of services “because it is modern”.

Why it hurts

The team spends its energy learning and debugging infrastructure instead of building features.

Better approach

Adopt a mesh when you feel real pain from inconsistent behavior, risky releases or security gaps, and start small.

BBest Practices and Common Mistakes

A checklist you can follow from the first day.

Best practices

  1. Start small and learn. Begin with a few services in a test environment.
  2. Make observability the first step. Turn on metrics, logs and traces before changing routing.
  3. Manage configuration as code. Keep it in version control, with reviews and automated checks.
  4. Release with canaries. Use weights and header rules, and define clear success signals before you begin.
  5. Set explicit timeouts everywhere. A call without a timeout can wait forever.
  6. Use retries wisely. Only for safe, repeatable requests, with limits.
  7. Use health checks that reflect real readiness. A service that is starting up should not receive traffic yet.
  8. Prefer locality. Keep traffic near its source and fail over only when needed.
  9. Secure in stages. Permissive first, strict later, with least-privilege policies.
  10. Protect who can edit rules. Use tight access control and require review.
  11. Run drills. Practice failure with fault injection and test failover.
  12. Check the latest documentation. Names, limits and recommended setups change, so verify before final designs.

Common mistakes

1

Forgetting health check firewall rules

If health checkers cannot reach the services, every copy looks unhealthy and traffic stops. Allow the health check sources through the firewall.

2

Mismatched names

Routes match on host names. A small difference between the name the client uses and the name in the rule means the rule never applies, and traffic follows an unexpected path.

3

Missing trace headers

If applications do not pass along the trace identifiers, traces break into disconnected pieces and become much less helpful.

4

Overlooking proxy resource limits

Proxies starved of CPU or memory slow down all traffic and make the mesh look broken. Monitor and size them.

5

Blaming the mesh for everything

Once a mesh exists, every network problem gets blamed on it. Use proxy logs and traces to find out whether the problem is in the application, the network or the rules.

6

No plan for rollback

Teams change rules without keeping the last known good version. Always keep a quick way back.

RReal-World Usage Scenarios

Four illustrative stories show where Traffic Director fits. The companies below are imaginary examples to teach the ideas.

Scenario 1: An online store releasing a new pricing service

A retailer rewrites its pricing service. Instead of switching everyone at once, the team sends requests from its own staff to the new version using a header rule, then gives it five percent of real traffic, then twenty-five, then everyone. When error rates rise at the twenty-five percent step, they set the weight back to zero within moments, fix the bug and try again the next day. Customers barely notice.

Scenario 2: A bank separating sensitive services

A bank runs many internal services. They give each service its own identity, turn on mutual encryption and write rules so that only the transfer service may call the ledger service, and only on specific paths. When one low-risk reporting service is found to be vulnerable, the attacker cannot reach the ledger, because the policy refuses the call.

Scenario 3: A company moving to Google Cloud slowly

A logistics company has some services in its own data center and some on Google Cloud. Using hybrid endpoints and routing rules, the team sends one route at a time to the new cloud versions while the rest stays on-premises. If something goes wrong, they switch that route back. After several months the data center services are retired without a dramatic cutover weekend.

Scenario 4: A streaming app surviving a zone problem

A video app runs its services across several zones. Proxies prefer the nearest healthy copies to keep delays low. When one zone has a problem, outlier detection and health checks remove the sick copies, and traffic flows to healthy zones automatically. Viewers see a short blip at most, and the on-call engineer receives an alert instead of a flood of angry messages.

A mesh does not make failures disappear. It makes them smaller, safer and easier to see.

When Traffic Director is a strong choice

  • You run many services on Google Cloud, and you want consistent routing, resilience and security.
  • You want safe releases with traffic splitting and mirroring.
  • You have a mix of virtual machines, containers and hybrid locations.
  • You prefer Google to run the control plane rather than running your own.

When to think twice

  • You have only a few services and simple needs.
  • Your team does not yet have the skills or time to operate proxies and troubleshoot them.
  • You need a fully self-hosted, cloud-neutral mesh with deep control of the control plane.
  • You cannot accept any added resource use or delay from proxies, and proxyless gRPC does not fit.

FFrequently Asked Questions

Quick answers to questions that beginners ask most often.

Q1Does my traffic pass through Traffic Director?
No. Traffic Director is only the control plane. It sends instructions to proxies, and the real requests flow directly between your services through those proxies.
Q2What happens if Traffic Director becomes unreachable?
Connected proxies continue using the last configuration they received, so existing routing keeps working. They cannot learn about changes until the connection returns, and new proxies need an initial configuration to start properly.
Q3What is the difference between Traffic Director and a load balancer?
A load balancer is a managed service that receives traffic and distributes it. Traffic Director is a control plane that configures proxies you run, which then perform load balancing close to each caller for service-to-service traffic.
Q4Do I have to use Envoy?
Envoy is the most common data plane proxy, but proxyless gRPC is also supported, where the gRPC library talks to the control plane directly. Check the documentation for the currently supported clients.
Q5Does it work with Kubernetes?
Yes. It can manage services running in Google Kubernetes Engine, using NEGs to track pods, and it can also manage virtual machines and hybrid endpoints. The setup details depend on the current recommended approach.
Q6Can I split traffic between versions?
Yes. Weighted routing lets you give each version a chosen share of traffic, and header-based rules let you send particular callers to a specific version.
Q7Is traffic between services encrypted?
It can be, using mutual TLS with certificates issued to each workload. You enable it deliberately, usually in stages, and combine it with authorization policies.
Q8Will proxies slow my application down?
Sidecars add a small delay and use some CPU and memory. For many applications the effect is small, but you should measure it. Proxyless gRPC avoids the extra hop where it fits.
Q9How is it different from Istio?
Istio is an open-source mesh whose control plane you or a vendor run. Traffic Director is a Google-managed control plane using open xDS APIs. Google also offers combined mesh options under the Cloud Service Mesh name, so check which is recommended for your case.
Q10Can it manage services outside Google Cloud?
Yes, through hybrid endpoints that are reachable over private connectivity such as VPN or Interconnect. This is useful for gradual migrations and mixed environments.
Q11How do I debug a rule that does not seem to work?
Check, in order: is the rule correct and saved, did the proxy receive it (use client status tools), do names and paths match exactly, are the endpoints healthy, and what do proxy logs say about the request?
Q12Do I need a mesh if I only have a few services?
Often not. A few services can be handled with simpler tools. A mesh becomes valuable as services multiply and you need consistent control, safe releases and strong security.
Q13What is the easiest way to learn it?
Build a tiny test setup with two services and one proxy each, change a weight on a route, and watch requests shift in the logs. Then add a header rule and a timeout. Delete the test resources afterwards to avoid charges.

SSummary and Key Takeaways

Remember These Points

  • What it is: Traffic Director is Google Cloud’s managed control plane for service meshes. It tells your proxies where to send requests and how to behave, using open xDS APIs.
  • Brain and muscle: the control plane holds the rules, and the data plane of Envoy sidecars, gateways or proxyless gRPC clients carries the traffic. Your requests never pass through Traffic Director.
  • Safe releases: weighted splits, header rules and mirroring let you test new versions with small risk and roll back in seconds.
  • Resilience built in: timeouts, careful retries, circuit breakers, outlier detection, locality-aware routing and failover keep problems small.
  • Security in layers: workload identities, mutual TLS and least-privilege authorization policies, introduced in stages and protected by strict access to the rules themselves.
  • See what happens: metrics, logs and traces from every proxy, plus tools to check the configuration each proxy received, make troubleshooting practical.
  • Count the full cost: proxy resources, data transfer and telemetry often matter more than the control plane itself. Proxyless gRPC and sampling can help.
  • Adopt with care: start small, use configuration as code and staged rollouts, and always check Google’s latest documentation, because product names, limits and recommended setups evolve.