diff --git a/_includes/doc-side-concepts-nav.html b/_includes/doc-side-concepts-nav.html
index d1f543cc9c..0b72d0b56b 100644
--- a/_includes/doc-side-concepts-nav.html
+++ b/_includes/doc-side-concepts-nav.html
@@ -5,6 +5,6 @@
Service Model
Attributes
Mixer
- Configuration
+ Mixer Configuration Model
Writing Configuration
diff --git a/docs/concepts/config.md b/docs/concepts/config.md
index 6e580fe966..4bb1d74713 100644
--- a/docs/concepts/config.md
+++ b/docs/concepts/config.md
@@ -1,6 +1,6 @@
---
title: Mixer Configuration
-headline: Configuring the mixer
+headline: Mixer Configuration Model
sidenav: doc-side-concepts-nav.html
bodyclass: docs
layout: docs
@@ -319,7 +319,22 @@ Refer to *TBD* for the full attribute expression syntax.
### Scopes and Selectors
-*TBD*
+Configuration scopes make it possible to organize various blocks of configuration state in a
+hierarchy. Blocks of configuration can only reference other configuration artifacts
+within its own scope or within parent scopes, but not in sibling or descendant scopes.
+
+Scoping is designed to enable sharing of a single Istio deployment within the context of a broad
+organization. Orthogonal teams within the organization can operate in different scopes, preventing
+one team's configuration from impacting another team's. Because artifacts declared higher-up in the
+hierarchy are available to descendants in the hierarchy, it also enables centralized configuration
+where it makes sense within the organization.
+
+The exact composition and depth of the hierarchy is entirely determined by the configuration state. Let's
+look at some examples:
+
+```yaml
+
+```
## Configuration API
diff --git a/docs/concepts/mixer.md b/docs/concepts/mixer.md
index ac9c403d2e..e40a98a983 100644
--- a/docs/concepts/mixer.md
+++ b/docs/concepts/mixer.md
@@ -69,6 +69,7 @@ configured descriptors.
An example can help clarify the concepts. Let's consider the `MetricDescriptor` type which is defined as follows:
+```proto
message MetricDescriptor {
string name = 1;
string display_name = 2;
@@ -84,24 +85,27 @@ An example can help clarify the concepts. Let's consider the `MetricDescriptor`
ValueType value = 5;
repeated LabelDescriptor labels = 6;
}
+```
Within a deployment configuration, you can declare a metric descriptor using a snippet of YAML:
- name: request_count
- kind: COUNTER
- value: INT64
- description: request count by source, target, service, and code
- labels:
- - name: source
- valueType: STRING
- - name: target
- valueType: STRING
- - name: service
- valueType: STRING
- - name: method
- valueType: STRING
- - name: response_code
- valueType: INT64
+```yaml
+name: request_count
+kind: COUNTER
+value: INT64
+description: request count by source, target, service, and code
+labels:
+- name: source
+ valueType: STRING
+- name: target
+ valueType: STRING
+- name: service
+ valueType: STRING
+- name: method
+ valueType: STRING
+- name: response_code
+ valueType: INT64
+```
This is declaring a descriptor called `request_count`. Because of the kind and value fields, policy objects associated with this
descriptor represent 64-bit integer counters. Additionally, each associated policy object will be uniquely identified via the 5
@@ -116,14 +120,16 @@ listed labels. Producing a policy object for such a descriptor requires 6 pieces
Here is an example snippet of Istio configuration which produces a policy object for the above descriptor:
- descriptor_name: request_count
- value: "1"
- labels:
- source: source.name | "unknown"
- target: target.name | "unknown"
- service: api.name | "unknown"
- method: api.method | "unknown"
- response_code: response.code | 200
+```yaml
+descriptor_name: request_count
+value: "1"
+labels:
+ source: source.name | "unknown"
+ target: target.name | "unknown"
+ service: api.name | "unknown"
+ method: api.method | "unknown"
+ response_code: response.code | 200
+```
Many such policy objects are created as part of attribute processing and they ultimately serve as input to
adapters.