Skip to content

Commit 8f50c52

Browse files
author
Martin Taillefer
committed
Describe config scopes and refresh the what-is-istio topic.
1 parent 4b2acf1 commit 8f50c52

File tree

5 files changed

+142
-90
lines changed

5 files changed

+142
-90
lines changed

community/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<div class="community col-lg-9 col-md-10 col-sm-12">
1313
<section class="lead">
1414
<p>
15-
Istio has an active community that supports its use and on-going development. We'd love for you
15+
Istio is an open source project with an active community that supports its use and on-going development. We'd love for you
1616
to join us and get involved!
1717
</p>
1818
</section>

docs/concepts/mixer-config.md

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type: markdown
99

1010
{% capture overview %}
1111

12-
This page describes the Istio mixer's configuration model.
12+
This page describes Mixer's configuration model.
1313

1414
{% endcapture %}
1515

@@ -346,9 +346,66 @@ The different descriptor types are detailed in *TBD*
346346

347347
An Istio deployment can be responsible for managing a large number of services. Organizations
348348
often have dozens or hundreds of interacting services, and Istio's mission is to make it easy to
349-
manage them all.
349+
manage them all. Mixer's configuration model is designed to support different operators to
350+
manage different parts of an Istio deployment without stepping on each other's feet, and allowing
351+
them to have control over their areas, but not other's.
350352

351-
*TBD*
353+
Here's how this all works:
354+
355+
- The various chunks of configuration described in the previous sections (adapters, aspects, and descriptors) are always declared
356+
within the context of a hierarchy.
357+
358+
- The hierarchy is represented by DNS-style dotted names. Like DNS, the hierarchy starts with the rightmost element in
359+
the dotted name.
360+
361+
- Each chunk of configuration is associated with a *scope* and a *subject* which are both dotted names
362+
representing locations within the hierarchy:
363+
364+
- A scope represents the authority that created the chunk of configuration. Authorities
365+
higher up in the hierarchy are more powerful than those lower in the tree.
366+
367+
- The subject represents the location of the chunk of state within the hierarchy. The subject
368+
is necessarily always at or below the level of the scope within the hierarchy.
369+
370+
- If multiple chunks of config have the same subject, within the matching set, chunks which are associated with a higher
371+
scope higher in the hierarchy always take precedence.
372+
373+
The individual elements that make up the hierarchy depend on the specifics of the Istio deployment.
374+
A Kubernetes deployment likely uses Kubernetes namespaces as the hierarchy against which Istio configuration
375+
state is deployed. For example, a valid scope might be `svc.cluster.local` while a subject might be
376+
`myservice.ns.svc.cluster.local`
377+
378+
The scoping model is designed to pair up with an access control model to constrain which human is allowed to
379+
create chunks of configuration for particular scopes. Operators which have the authority to create
380+
chunks at a scope higher in the hierarchy can impact all configuration associated with lower scopes. Although this is the design
381+
intent, Mixer configuration doesn't yet support access control on its configuration so there are no actual constraints on which
382+
operator can manipulate which scope.
383+
384+
#### Resolution
385+
386+
When a request arrives, Mixer goes through a number of [request processing phases](./mixer.md#request-phases).
387+
The Resolution phase is concerned with identifying the exact chunks of configuration to use in order to
388+
process the incoming request. For example, a request arriving at Mixer for service A likely has some configuration differences
389+
with requests arriving for service B. Resolution is about deciding which config to use for a request.
390+
391+
Resolution depends on a well-known attribute to guide its choice, a so-called *identity attribute*.
392+
The value of this attribute is a dotted name which determines where the mixer begins to look in the
393+
hierarchy for blocks of configuration to use for the request.
394+
395+
Here's how it all works:
396+
397+
1. A request arrives and Mixer extracts the value of the identity attribute and produces the current
398+
lookup value.
399+
400+
2. Mixer looks for all chunks of configuration whose subject matches the lookup value.
401+
402+
3. If Mixer finds multiple chunks that match, it keeps only the chunk that has the highest scope.
403+
404+
4. Mixer truncates the lowest element from the lookup value's dotted name. If the lookup value is
405+
not empty, then Mixer goes back to step 2 above.
406+
407+
All the configs found in this process are combined together to form the final total set of configuration that is used to
408+
evaluate the current request.
352409

353410
### Manifests
354411

@@ -381,10 +438,6 @@ manifests:
381438
value_type: STRING
382439
response.code:
383440
value_type: INT64
384-
api.method:
385-
value_type: STRING
386-
api.name:
387-
value_type: STRING
388441
```
389442

390443
## Configuration API

docs/concepts/what-is-istio.md

Lines changed: 73 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,89 @@
11
---
2-
title: Architecture
3-
headline: Architecture
2+
title: What is Istio?
3+
headline: What is Istio?
44
sidenav: doc-side-concepts-nav.html
55
bodyclass: docs
66
layout: docs
77
type: markdown
88
---
99

1010
{% capture overview %}
11-
The page explains in broad terms the major components of the Istio service mesh design.
11+
This page introduces Istio, a polyglot service mesh.
1212
{% endcapture %}
1313

1414
{% capture body %}
15-
## The proxy
16-
17-
The Istio proxy is designed to mediate inbound and outbound
18-
traffic for all Istio-managed services. The Istio proxy is based on
19-
[Envoy](https://lyft.github.io/envoy/). Istio leverages Envoy's features
20-
such as dynamic service discovery, load balancing, TLS termination, HTTP/2 & gRPC
21-
proxying, circuit breakers, health checks, staged rollouts with %-based
22-
traffic split, fault injection, and a rich set of metrics. In addition,
23-
Istio extends the proxy to interact with the mixer to enforce various
24-
access control policies rate limiting, ACLs, as well as telemetry
25-
reporting.
26-
27-
## The mixer
28-
29-
The Istio mixer is responsible for enforcing access control
30-
and usage policies across the service mesh and collects telemetry data from
31-
proxies and istio-managed services alike. The Istio proxy extracts request
32-
level attributes that are then evaluated by the mixer. More info on the
33-
attribute extraction and policy evaluation can be found
34-
[here]({{site.baseurl}}/docs/reference/attribute-vocabulary.html). The mixer
35-
includes a flexible plugin model enabling
36-
it to interface to a variety of host environments and configured backends,
37-
abstracting the proxy and Istio-managed services from these details.
38-
39-
## The manager
40-
41-
The Istio manager serves as an interface between the user
42-
and Istio, collecting configuration, validating it and propagating it to
43-
various components. It abstracts platform-specific implementation details
44-
from the mixer and proxies, providing them with an
45-
[abstract representation](model.md) of user's services that is independent
46-
of the underlying platform. In addition, [traffic management rules](../reference/rule-dsl.md)
47-
(i.e. generic layer-4 rules and layer-7 HTTP/gRPC routing rules)
48-
can be programmed at runtime via the Istio Manager.
15+
16+
## Context & Overview
17+
18+
As monolithic applications transition towards a distributed microservice architecture they become more difficult to manage and understand. These architectures need basic necessities such as discovery, load balancing, failure recovery, metrics and monitoring, and more complex operational requirements such as A/B testing, canary releases, rate limiting, access control, and end-to-end authentication. The term service mesh is used to describe the network of microservices that make up applications and the interactions between them. As the service mesh grows in size and complexity, it becomes harder to understand and manage.
19+
20+
Istio provides a complete solution to satisfying these diverse requirements of microservice applications, by providing developers and operators with behavioral insights and operational control over the service mesh as a whole. Istio does this by providing a number of key capabilities uniformly across the network of services:
21+
22+
Traffic management - Control the flow of traffic and API calls between services, make calls more reliable and make the network more robust in the face of adverse conditions.
23+
Observability - Gain understanding of the dependencies between services, the nature and flow of traffic between them and be able to quickly identify issues.
24+
Policy enforcement - Apply organizational policy to the interaction between services, ensure access policies are enforced and resources are fairly distributed among consumers. Policy changes are made by configuring the mesh, not by changing application code.
25+
Service identity and security - Provide services in the mesh with a verifiable identity [link] and provide the ability to protect [link] service traffic as it flows over networks of varying degrees of trustability.
26+
27+
In addition to these behaviors, Istio is designed for extensibility to meet diverse deployment needs:
28+
29+
Platform support - Istio is designed to run in a variety of environments including ones that span Cloud, on-premise, Kubernetes, Mesos etc. We’re initially focused on Kubernetes but are working to support other environments soon.
30+
Integration & Customization - The policy enforcement component can be extended [link] and customized [link] to integrate with existing solutions for ACLs, logging, monitoring, quotas, auditing and more.
31+
32+
These capabilities greatly decrease the coupling between application code, the underlying platform and policy. This decreased coupling not only makes services easier to implement but also makes it simpler for operators to move application deployments between environments or to new policy schemes. Applications become inherently more portable as a result.
33+
34+
Istio’s service mesh is logically split into a data plane and a control plane. The data plane is composed of a set of intelligent (http|grpc|tcp|udp) proxies deployed as sidecars that mediate and control all network communication between microservices. The control plane is responsible for managing and configuring proxies to route traffic, as well as enforce policies at runtime.
35+
36+
## Design Goals
37+
Istio’s architecture is informed by a few key design goals that are essential to making the system capable of dealing with services at scale and with high performance.
38+
39+
### Maximize transparency
40+
To adopt Istio an operator or developer should be required to do the minimum amount of work possible to get real value from the system. To this end Istio can automatically inject itself into all the network paths between services. Istio uses sidecar proxies to capture traffic and where possible automatically program the networking layer to route traffic through those proxies without any changes to the deployed application code. In Kubernetes the proxies are injected into pods and traffic is captured by programming iptables rules. Once the sidecar proxies are injected and traffic routing is programmed Istio is able to mediate all traffic.
41+
42+
This principle also applies to performance. When applying Istio to a deployment operators should see a minimal increase in resource costs for the functionality being provided. Components and APIs must all be designed with performance and scale in mind.
43+
44+
### Incrementality
45+
As operators and developers become more dependent on the functionality that Istio provides, the system must grow with their needs. While we expect to continue adding new features ourselves, we expect the greatest need will be the ability to extend the policy system, to integrate with other sources of policy and control and to propagate signals about mesh behavior to other systems for analysis. The policy runtime supports a standard extension mechanism for plugging in other services. In addition it allows for the extension of its vocabulary [[link]] to allow policies to be enforced based on new signals that the mesh produces.
46+
2.3 Portability
47+
The ecosystem in which Istio will be used varies along many dimensions. Istio must run on any cloud or on-prem environment with minimal effort. The task of porting Istio-based services to new environments should be trivial, and it should be possible to operate a single service deployed into multiple environments (on multiple clouds for redundancy for example) using Istio.
48+
49+
### Policy Uniformity
50+
The application of policy to API calls between services provides a great deal of control over mesh behavior but it can be equally important to apply policies to resources which are not necessarily expressed at the API level. For example applying quota to the amount of CPU consumed by an ML training task is more useful than applying quota to the call which initiated the work. To this end the policy system is maintained as a distinct service with its own API rather than being baked into the proxy, allowing services to directly integrate with it as needed.
51+
52+
## High-Level Architecture
4953

5054
<img src="{{site.baseurl}}/img/arch.svg" alt="The overall architecture of an Istio-based service." />
55+
56+
### The Sidecar Model
57+
58+
As monolithic applications are decomposed into a distributed system of microservices that scale dynamically, classic distributed system problems such as service discovery, load balancing, and failure recovery become increasingly import to solve uniformly. As the application gains more agility, it transitions towards a process wherein updates are made to different parts of the application at different times. Developers need the ability to experiment with different features in production, or deploy canary releases, without impacting the system as a whole. Operators need to enforce organization-wide policies, such as global rate limits, ACLs, etc., without requiring updates to each microservice.
59+
60+
Today, these problems are tackled piecemeal within the industry. Language-specific libraries, such as Ribbon/Hystrix from Netflix’s OSS stack, are used to satisfy basic necessities such as discovery, load balancing and circuit breaking. In a polyglot application, organizations need to maintain language-specific libraries for every language being used, dramatically increasing the maintenance cost.
61+
62+
A host of API management tools are typically bolted onto the edge of the infrastructure to provide subscription, metering, API metrics monitoring, rate limiting, etc. Continuous delivery and experimentation of new features in production is restricted to edge services using an edge proxy (e.g., Zuul/Nginx). Policy enforcement between mid-tier services is difficult or impossible as libraries provide little control over how traffic flows between microservices.
63+
64+
Compared to using language-specific libraries, the out-of-process transparent proxy approach has a much lower maintenance overhead. A single proxy implementation can be shared across all services in an organization. This single implementation can be optimized for performance while providing a variety of functions beneficial to all services in the application. It eliminates the need for applications to be rebuilt whenever new functionality is available. Support for continuous delivery, policy enforcement, and in-depth monitoring of service health can be engineered into the proxy and leveraged across different services (edge & middle-tier) with minimal effort on behalf of the application developer. As the proxy can act as both an edge proxy as well as a middle-tier router, middle-tier services can also take advantage of the continuous delivery and policy enforcement features provided. By offloading all aspects of communication, failure recovery, and policy enforcement to the proxy, the application logic is dramatically simplified.
65+
66+
### Envoy
67+
68+
Istio uses the Envoy proxy, a high-performance proxy developed in C++, to mediate all inbound and outbound traffic for all services in the service mesh. Istio leverages Envoy’s many built-in features such as dynamic service discovery, load balancing, TLS termination, HTTP/2 & gRPC proxying, circuit breakers, health checks, staged rollouts with %-based traffic split, fault injection, and rich metrics. In addition, Istio extends Envoy to interact with Mixer to enable policy enforcement and to report telemetry.
69+
70+
### Mixer
71+
72+
Mixer is responsible for enforcing access control and usage policies across the service mesh and collects telemetry data from the Envoy proxy and other services. The proxy extracts request level attributes which are sent to Mixer for evaluation. More information on the attribute extraction and policy evaluation can be found here. Mixer includes a flexible plugin model enabling it to interface with a variety of host environments and backends, abstracting the proxy and Istio-managed services from these details.
73+
74+
### Istio Manager
75+
76+
The Manager serves as an interface between the user and Istio, collecting and validating configuration and propagating it to the various Istio components. It abstracts environment-specific implementation details from the Mixer and Proxy, providing them with an abstract representation of the user’s services that is independent of the underlying platform. In addition, traffic management rules (i.e. generic layer-4 rules and layer-7 HTTP/gRPC routing rules) can be programmed at runtime via the Istio Manager.
77+
78+
### Istio Auth
79+
80+
Istio supports strong service-to-service and end-user authentication using mutual TLS, with built-in identity and credential management. Istio Auth can be used to upgrade unencrypted traffic in the service mesh, and provides operators the ability to enforce policy based on service identity, rather than network controls.
81+
Future releases of Istio will add fine-grained access control and auditing to control and monitor who accesses your service, api, or resource, using a variety of access control mechanisms, including attribute and role-based access control as well as authorization hooks.
82+
83+
Istio Auth is responsible for securing the service-to-service communication [link] and the end-user (mobile app, browser, etc.) to service communication [tbd]. It presents a strong service-level identity [link] to allow service-to-service interoperability across clusters and clouds.
84+
Istio-Auth provides a key management system [link] to automate key & certificate generation, distribution, and rotation. It enables end-to-end mutual TLS between microservices without any application code change.
85+
Istio-Auth provides fine-grained access control and auditing at different levels to control and monitor who accesses your service, api, and resource. It supports a variety of access control mechanisms, including attribute- and role-based access control as well as authorization hook [tbd].
86+
5187
{% endcapture %}
5288

5389
{% include templates/concept.md %}

docs/tasks/index.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,20 @@ type: markdown
1111
Tasks show you how to do a single specific targeted
1212
activity with the Istio system.
1313

14-
- [Installion](./istio-installation.html). This task shows you how to
15-
setup Istio service mesh.
14+
- [Installation](./istio-installation.html). This task shows you how to
15+
setup the Istio service mesh.
1616

1717
- [Integrating Services into the Mesh](./integrating-services-into-istio.html). This task shows you how to
18-
integrate your applications with Istio service mesh.
18+
integrate your applications with the Istio service mesh.
1919

2020
- [Configuring Ingress/Egress with Envoy](./ingress-egress-envoy.html). This task shows you how to
21-
setup the Istio Ingress controller and the Egress proxy.
21+
setup the Istio ingress controller and the egress proxy.
2222

2323
- [Adding Resilience Features](./resilience-features.html). This task shows you how to
24-
setup timeouts, retries and circuit breakers.
24+
setup timeouts, retries, and circuit breakers.
2525

2626
- [Configuring Request Routing](./request-routing.html). This task shows you how to
27-
configure dynamic request routing based on weights and http headers.
27+
configure dynamic request routing based on weights and HTTP headers.
2828

2929
- [Fault Injection](./fault-injection.html). This task shows how to
3030
inject failures into your application.
@@ -33,8 +33,8 @@ activity with the Istio system.
3333
setup Istio-Auth to provide mutual TLS authentication between services.
3434

3535
- [Collecting Metrics and Logs](./metrics-logs.html). This task shows you how to
36-
configure the Istio Mixer to collect metrics and logs from Envoys in
36+
configure Mixer to collect metrics and logs from Envoy instances in
3737
every Pod.
3838

3939
- [Configuring Mixer](./configuring-mixer.html). This task shows you how to
40-
configure the Mixer.
40+
configure Mixer.

0 commit comments

Comments
 (0)