Merge branch 'master' of https://github.com/istio/istio.github.io
|
@ -0,0 +1,7 @@
|
|||
_site
|
||||
|
||||
# Eclipse artifacts
|
||||
.project
|
||||
.pydevproject
|
||||
*.iml
|
||||
.idea/
|
260
Gemfile.lock
|
@ -1,129 +1,203 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
RedCloth (4.2.9)
|
||||
activesupport (4.2.1)
|
||||
activesupport (4.2.7)
|
||||
i18n (~> 0.7)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
blankslate (2.1.2.4)
|
||||
celluloid (0.16.0)
|
||||
timers (~> 4.0.0)
|
||||
classifier-reborn (2.0.3)
|
||||
fast-stemmer (~> 1.0)
|
||||
addressable (2.5.1)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.9.1.1)
|
||||
colorator (0.1)
|
||||
execjs (2.5.2)
|
||||
fast-stemmer (1.0.2)
|
||||
ffi (1.9.8)
|
||||
gemoji (2.1.0)
|
||||
github-pages (34)
|
||||
RedCloth (= 4.2.9)
|
||||
github-pages-health-check (~> 0.2)
|
||||
jekyll (= 2.4.0)
|
||||
coffee-script-source (1.12.2)
|
||||
colorator (1.1.0)
|
||||
ethon (0.10.1)
|
||||
ffi (>= 1.3.0)
|
||||
execjs (2.7.0)
|
||||
faraday (0.12.0.1)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ffi (1.9.18)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.0)
|
||||
github-pages (134)
|
||||
activesupport (= 4.2.7)
|
||||
github-pages-health-check (= 1.3.3)
|
||||
jekyll (= 3.4.3)
|
||||
jekyll-avatar (= 0.4.2)
|
||||
jekyll-coffeescript (= 1.0.1)
|
||||
jekyll-mentions (= 0.2.1)
|
||||
jekyll-redirect-from (= 0.6.2)
|
||||
jekyll-sass-converter (= 1.2.0)
|
||||
jekyll-sitemap (= 0.8.1)
|
||||
jemoji (= 0.4.0)
|
||||
kramdown (= 1.5.0)
|
||||
liquid (= 2.6.1)
|
||||
maruku (= 0.7.0)
|
||||
jekyll-default-layout (= 0.1.4)
|
||||
jekyll-feed (= 0.9.2)
|
||||
jekyll-gist (= 1.4.0)
|
||||
jekyll-github-metadata (= 2.3.1)
|
||||
jekyll-mentions (= 1.2.0)
|
||||
jekyll-optional-front-matter (= 0.1.2)
|
||||
jekyll-paginate (= 1.1.0)
|
||||
jekyll-readme-index (= 0.1.0)
|
||||
jekyll-redirect-from (= 0.12.1)
|
||||
jekyll-relative-links (= 0.4.0)
|
||||
jekyll-sass-converter (= 1.5.0)
|
||||
jekyll-seo-tag (= 2.2.0)
|
||||
jekyll-sitemap (= 1.0.0)
|
||||
jekyll-swiss (= 0.4.0)
|
||||
jekyll-theme-architect (= 0.0.4)
|
||||
jekyll-theme-cayman (= 0.0.4)
|
||||
jekyll-theme-dinky (= 0.0.4)
|
||||
jekyll-theme-hacker (= 0.0.4)
|
||||
jekyll-theme-leap-day (= 0.0.4)
|
||||
jekyll-theme-merlot (= 0.0.4)
|
||||
jekyll-theme-midnight (= 0.0.4)
|
||||
jekyll-theme-minimal (= 0.0.4)
|
||||
jekyll-theme-modernist (= 0.0.4)
|
||||
jekyll-theme-primer (= 0.1.8)
|
||||
jekyll-theme-slate (= 0.0.4)
|
||||
jekyll-theme-tactile (= 0.0.4)
|
||||
jekyll-theme-time-machine (= 0.0.4)
|
||||
jekyll-titles-from-headings (= 0.1.5)
|
||||
jemoji (= 0.8.0)
|
||||
kramdown (= 1.13.2)
|
||||
liquid (= 3.0.6)
|
||||
listen (= 3.0.6)
|
||||
mercenary (~> 0.3)
|
||||
pygments.rb (= 0.6.1)
|
||||
rdiscount (= 2.1.7)
|
||||
redcarpet (= 3.1.2)
|
||||
minima (= 2.0.0)
|
||||
rouge (= 1.11.1)
|
||||
terminal-table (~> 1.4)
|
||||
github-pages-health-check (0.3.0)
|
||||
net-dns (~> 0.6)
|
||||
public_suffix (~> 1.4)
|
||||
hitimes (1.2.2)
|
||||
html-pipeline (1.9.0)
|
||||
github-pages-health-check (1.3.3)
|
||||
addressable (~> 2.3)
|
||||
net-dns (~> 0.8)
|
||||
octokit (~> 4.0)
|
||||
public_suffix (~> 2.0)
|
||||
typhoeus (~> 0.7)
|
||||
html-pipeline (2.5.0)
|
||||
activesupport (>= 2)
|
||||
nokogiri (~> 1.4)
|
||||
i18n (0.7.0)
|
||||
jekyll (2.4.0)
|
||||
classifier-reborn (~> 2.0)
|
||||
colorator (~> 0.1)
|
||||
jekyll-coffeescript (~> 1.0)
|
||||
jekyll-gist (~> 1.0)
|
||||
jekyll-paginate (~> 1.0)
|
||||
nokogiri (>= 1.4)
|
||||
i18n (0.8.1)
|
||||
jekyll (3.4.3)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
kramdown (~> 1.3)
|
||||
liquid (~> 2.6.1)
|
||||
liquid (~> 3.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pygments.rb (~> 0.6.0)
|
||||
redcarpet (~> 3.1)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
toml (~> 0.1.0)
|
||||
jekyll-avatar (0.4.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-coffeescript (1.0.1)
|
||||
coffee-script (~> 2.2)
|
||||
jekyll-gist (1.2.1)
|
||||
jekyll-mentions (0.2.1)
|
||||
html-pipeline (~> 1.9.0)
|
||||
jekyll (~> 2.0)
|
||||
jekyll-default-layout (0.1.4)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-feed (0.9.2)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-gist (1.4.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-github-metadata (2.3.1)
|
||||
jekyll (~> 3.1)
|
||||
octokit (~> 4.0, != 4.4.0)
|
||||
jekyll-include-cache (0.1.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-mentions (1.2.0)
|
||||
activesupport (~> 4.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-optional-front-matter (0.1.2)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-redirect-from (0.6.2)
|
||||
jekyll (~> 2.0)
|
||||
jekyll-sass-converter (1.2.0)
|
||||
sass (~> 3.2)
|
||||
jekyll-sitemap (0.8.1)
|
||||
jekyll-watch (1.2.1)
|
||||
listen (~> 2.7)
|
||||
jemoji (0.4.0)
|
||||
gemoji (~> 2.0)
|
||||
html-pipeline (~> 1.9)
|
||||
jekyll (~> 2.0)
|
||||
json (1.8.2)
|
||||
kramdown (1.5.0)
|
||||
liquid (2.6.1)
|
||||
listen (2.10.0)
|
||||
celluloid (~> 0.16.0)
|
||||
jekyll-readme-index (0.1.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-redirect-from (0.12.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-relative-links (0.4.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sass-converter (1.5.0)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.0.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-swiss (0.4.0)
|
||||
jekyll-theme-architect (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-cayman (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-dinky (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-hacker (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-leap-day (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-merlot (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-midnight (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-minimal (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-modernist (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-primer (0.1.8)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-slate (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-tactile (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-theme-time-machine (0.0.4)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-titles-from-headings (0.1.5)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (1.5.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
jemoji (0.8.0)
|
||||
activesupport (~> 4.0)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (>= 3.0)
|
||||
json (1.8.6)
|
||||
kramdown (1.13.2)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.6)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
maruku (0.7.0)
|
||||
mercenary (0.3.5)
|
||||
mini_portile (0.6.2)
|
||||
minitest (5.6.1)
|
||||
rb-inotify (>= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.1.0)
|
||||
minima (2.0.0)
|
||||
minitest (5.10.1)
|
||||
multipart-post (2.0.0)
|
||||
net-dns (0.8.0)
|
||||
nokogiri (1.6.6.2)
|
||||
mini_portile (~> 0.6.0)
|
||||
parslet (1.5.0)
|
||||
blankslate (~> 2.0)
|
||||
posix-spawn (0.3.11)
|
||||
public_suffix (1.5.1)
|
||||
pygments.rb (0.6.1)
|
||||
posix-spawn (~> 0.3.6)
|
||||
yajl-ruby (~> 1.2.0)
|
||||
rb-fsevent (0.9.4)
|
||||
rb-inotify (0.9.5)
|
||||
nokogiri (1.6.8.1)
|
||||
mini_portile2 (~> 2.1.0)
|
||||
octokit (4.7.0)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pathutil (0.14.0)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (2.0.5)
|
||||
rb-fsevent (0.9.8)
|
||||
rb-inotify (0.9.8)
|
||||
ffi (>= 0.5.0)
|
||||
rdiscount (2.1.7)
|
||||
redcarpet (3.1.2)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.13)
|
||||
terminal-table (1.4.5)
|
||||
thread_safe (0.3.5)
|
||||
timers (4.0.1)
|
||||
hitimes
|
||||
toml (0.1.2)
|
||||
parslet (~> 1.5.0)
|
||||
tzinfo (1.2.2)
|
||||
sass (3.4.23)
|
||||
sawyer (0.8.1)
|
||||
addressable (>= 2.3.5, < 2.6)
|
||||
faraday (~> 0.8, < 1.0)
|
||||
terminal-table (1.7.3)
|
||||
unicode-display_width (~> 1.1.1)
|
||||
thread_safe (0.3.6)
|
||||
typhoeus (0.8.0)
|
||||
ethon (>= 0.8.0)
|
||||
tzinfo (1.2.3)
|
||||
thread_safe (~> 0.1)
|
||||
yajl-ruby (1.2.1)
|
||||
unicode-display_width (1.1.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
github-pages
|
||||
jekyll-include-cache (~> 0.1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.10.5
|
||||
1.14.6
|
||||
|
|
|
@ -9,3 +9,9 @@ see the Istio [contribution guidelines](https://github.com/istio/istio/blob/mast
|
|||
|
||||
The website uses [Jekyll](http://jekyllrb.com/) templates and is hosted on GitHub Pages. Please make sure you are
|
||||
familiar with these before editing.
|
||||
|
||||
To run the site locally with Docker, use the following command:
|
||||
|
||||
```bash
|
||||
docker run --rm --label=jekyll --volume=$(pwd):/srv/jekyll -it -p 127.0.0.1:4000:4000 jekyll/jekyll jekyll serve
|
||||
```
|
||||
|
|
|
@ -1,18 +1,13 @@
|
|||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-11 nofloat center-block">
|
||||
<ul class="col-sm-10 doc-nav">
|
||||
{% assign current = page.url | downcase | split: '/' %}
|
||||
<li class="tab docs-tab"><a href="{{ site.baseurl }}/docs/">Docs</a></li>
|
||||
<span class="doc-caret">></span>
|
||||
<li class="tab"><a href="{{ site.baseurl }}/docs/" {% if page.url == '/docs/' %}class='current'{% endif %}>Home</a></li>
|
||||
<li class="tab"><a href="{{ site.baseurl }}/docs/concepts" {% if current[2] == 'concepts' %}class='current'{% endif %}>Concepts</a></li>
|
||||
<li class="tab"><a href="{{ site.baseurl }}/docs/tasks" {% if current[2] == 'tasks' %}class='current'{% endif %}>Tasks</a></li>
|
||||
<!--
|
||||
<li class="tab"><a href="{{ site.baseurl }}/docs/tutorials" {% if current[2] == 'tutorials' %}class='current'{% endif %}>Tutorials</a></li>
|
||||
-->
|
||||
<li class="tab"><a href="{{ site.baseurl }}/docs/samples" {% if current[2] == 'samples' %}class='current'{% endif %}>Samples</a></li>
|
||||
<li class="tab"><a href="{{ site.baseurl }}/docs/reference" {% if current[2] == 'reference' %}class='current'{% endif %}>Reference</a></li>
|
||||
<div class="col-md-11 nofloat center-block" style="margin-top: 3px;">
|
||||
<ul class="col-sm-10 nav nav-tabs">
|
||||
{% assign active = page.url | downcase | split: '/' %}
|
||||
<li role="presentation" {% if page.url == '/docs/' %}class='active'{% endif %}><a href="{{ site.baseurl }}/docs/">Welcome</a></li>
|
||||
<li role="presentation" {% if active[2] == 'concepts' %}class='active'{% endif %}><a href="{{ site.baseurl }}/docs/concepts">Concepts</a></li>
|
||||
<li role="presentation" {% if active[2] == 'tasks' %}class='active'{% endif %}><a href="{{ site.baseurl }}/docs/tasks">Tasks</a></li>
|
||||
<li role="presentation" {% if active[2] == 'samples' %}class='active'{% endif %}><a href="{{ site.baseurl }}/docs/samples">Samples</a></li>
|
||||
<li role="presentation" {% if active[2] == 'reference' %}class='active'{% endif %}><a href="{{ site.baseurl }}/docs/reference">Reference</a></li>
|
||||
</ul>
|
||||
{% include contribute-links.html %}
|
||||
</div>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
<ul class="doc-side-nav doc-side-nav-home">
|
||||
{% assign current = page.url | downcase | split: '/' %}
|
||||
<li><h5 class="doc-side-nav-title">Welcome</h5></li>
|
||||
</ul>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<div class="right-links">
|
||||
<div class="col-md-3 col-sm-3 col-xs-12 footer-documentation">
|
||||
<ul class="toggle">
|
||||
<p class="right-link-headers">Documentation</p>
|
||||
<p class="right-link-headers">Docs</p>
|
||||
<li><a href="{{ site.baseurl }}/docs/"><p>Home</p></a></li>
|
||||
<li><a href="{{ site.baseurl }}/docs/concepts"><p>Concepts</p></a></li>
|
||||
<li><a href="{{ site.baseurl }}/docs/tasks"><p>Tasks</p></a></li>
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<div class="col-md-11 nofloat center-block">
|
||||
<a class="col-xs-2" href="{{ site.baseurl }}/">
|
||||
<img class="nav-logo" src="{{ site.baseurl }}/img/logo.png" alt="Istio">
|
||||
<span class="page-headline">Istio</span>
|
||||
</a>
|
||||
|
||||
<div class="col-xs-2 col-xs-offset-8">
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
---
|
||||
layout: compress
|
||||
---
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" itemscope itemtype="https://schema.org/WebPage">
|
||||
<head>
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
# Jekyll layout that compresses HTML
|
||||
# v3.0.2
|
||||
# http://jch.penibelst.de/
|
||||
# © 2014–2015 Anatol Broder
|
||||
# MIT License
|
||||
---
|
||||
|
||||
{% capture _LINE_FEED %}
|
||||
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd p rt rp optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
|
|
@ -18,7 +18,7 @@ bodyclass: docs
|
|||
{{ content }}
|
||||
</div>
|
||||
|
||||
<div id="toc" class="toc col-sm-2">
|
||||
<div id="toc" class="toc">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
// Brand Colors
|
||||
$mainBrandColor: #466BB0; //#2DA6B0;
|
||||
$secondBrandColor: #286AC7; //#01959f;
|
||||
$thirdBrandColor: #98B2E0; //#E7F3F4;
|
||||
$mainBrandColor: #466BB0;
|
||||
$secondBrandColor: #286AC7;
|
||||
$thirdBrandColor: #98B2E0;
|
||||
$inverseBrandColor: #FFFFFF;
|
||||
|
||||
// Use as an accent color in small quantities to balance out the main theme.
|
||||
$popBrandColor: hsl(3, 90%, 75%);
|
||||
$lightPopBrandColor: lighten($popBrandColor, 15%);
|
||||
|
||||
|
||||
// General Colors
|
||||
$black: #2E2E2E;
|
||||
$white: #FFFFFF;
|
||||
|
@ -16,13 +15,12 @@ $gray: #737373;
|
|||
$light-gray: lighten($gray, 52%);
|
||||
$dark-gray: darken($gray, 20%);
|
||||
|
||||
|
||||
$linkColor: $mainBrandColor;
|
||||
$linkHoverColor: darken($linkColor, 10%);
|
||||
$linkColorSecondary: $white;
|
||||
$linkColorTertiary: $gray;
|
||||
$codeColor: darken($linkColor, 20%);
|
||||
$codeBkColor: $thirdBrandColor; //#ebfaf8;
|
||||
$codeBkColor: lighten($thirdBrandColor, 10%);
|
||||
$wellColor: #F9F9F9;
|
||||
$textColor: #535f61;
|
||||
$titleColor: #555555;
|
||||
|
|
|
@ -33,20 +33,24 @@
|
|||
border-left: 2px solid $light-gray;
|
||||
display: none !important;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
right: 45px;
|
||||
margin-top: 10px;
|
||||
|
||||
@media (min-width: 768px) {
|
||||
display: block !important;
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none !important;
|
||||
padding-left: 10px;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
font-size: 90%; //12px;
|
||||
//font-weight: 500;
|
||||
|
||||
ul {
|
||||
font-weight: 400;
|
||||
font-size: 11px;
|
||||
//font-weight: 400;
|
||||
font-size: 90%; //11px;
|
||||
}
|
||||
|
||||
a {
|
||||
|
|
|
@ -56,7 +56,7 @@ pre, pre.prettyprint {
|
|||
background-color: $codeBkColor;
|
||||
color: #000000;
|
||||
border: none !important;
|
||||
font-size: 14px !important;
|
||||
//font-size: 14px !important;
|
||||
padding: 9.5px !important;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
// Bootstrap override - looks like this is missing?
|
||||
.nav-tabs>li.active>a {
|
||||
margin-right: 2px;
|
||||
line-height: 1.42857143;
|
||||
border: 1px solid #ddd;
|
||||
border-bottom-color: transparent;
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
|
||||
// Documentation Navigation Bar
|
||||
.doc-nav {
|
||||
display: block;
|
||||
|
@ -57,7 +66,7 @@
|
|||
|
||||
// Documentation Side Navigation
|
||||
.doc-side-nav {
|
||||
background-color: $light-gray;
|
||||
//background-color: $light-gray;
|
||||
margin-bottom: 20px;
|
||||
|
||||
@media (min-width: $tablet) {
|
||||
|
@ -67,11 +76,13 @@
|
|||
|
||||
// Add caret to current page
|
||||
.current:before{
|
||||
content: '> ';
|
||||
//content: '> ';
|
||||
background-color: $gray;
|
||||
}
|
||||
|
||||
.doc-side-nav-title {
|
||||
padding: $spacing--s;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.doc-side-nav-list-item {
|
||||
|
@ -80,15 +91,16 @@
|
|||
width: 100%;
|
||||
|
||||
a {
|
||||
font-size: 13px;
|
||||
color: $dark-gray;
|
||||
//font-size: 13px;
|
||||
//color: $dark-gray;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
h6 {
|
||||
color: $dark-gray;
|
||||
font-size: 13px;
|
||||
color: $mainBrandColor; //$dark-gray;
|
||||
font-size: 100%; // hack
|
||||
font-weight: 400;
|
||||
line-height: 22px;
|
||||
}
|
||||
|
@ -99,13 +111,18 @@
|
|||
|
||||
.submenu-link {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
font-size: 100%;
|
||||
font-weight: 400;
|
||||
line-height: 22px;
|
||||
color: $gray;
|
||||
color: $mainBrandColor; //$gray;
|
||||
|
||||
&.active:before {
|
||||
margin-left: -0.80em;
|
||||
content: '> ';
|
||||
}
|
||||
|
||||
&.active {
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Footer
|
||||
footer {
|
||||
background-color: $footerColor;
|
||||
background: linear-gradient(to right, $mainBrandColor, $secondBrandColor);
|
||||
box-shadow: 0px 500px 0px 500px $footerColor;
|
||||
color: $white;
|
||||
overflow: hidden;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Background for nav and hero
|
||||
.nav-hero-container {
|
||||
//background: url('../img/hero-bg.png') no-repeat center/cover;
|
||||
background: $mainBrandColor no-repeat center/cover;
|
||||
background: $mainBrandColor linear-gradient(to right, $mainBrandColor, $secondBrandColor) no-repeat center/cover;
|
||||
z-index: 9010;
|
||||
position: relative;
|
||||
}
|
||||
|
|
|
@ -199,12 +199,12 @@
|
|||
// Sticky Nav
|
||||
#sticky-nav{
|
||||
@extend #common-nav;
|
||||
//background: url('../img/hero-bg.png') no-repeat center/cover;
|
||||
background: $mainBrandColor no-repeat center/cover;
|
||||
background: $mainBrandColor no-repeat center/cover;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 9000;
|
||||
top: -61px;
|
||||
padding-bottom: 10px;
|
||||
transition: $transition--secondary;
|
||||
&.on-page {
|
||||
top: 0;
|
||||
|
|
|
@ -51,16 +51,28 @@
|
|||
}
|
||||
.landing-image {
|
||||
height: auto;
|
||||
max-width: 300px;
|
||||
max-width: 500px;
|
||||
object-fit: contain;
|
||||
object-position: top;
|
||||
|
||||
@media (min-width: $tablet) {
|
||||
max-width: initial;
|
||||
//max-width: initial;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.landing-image-small {
|
||||
height: auto;
|
||||
max-width: 250px;
|
||||
object-fit: contain;
|
||||
object-position: top;
|
||||
|
||||
@media (min-width: $tablet) {
|
||||
//max-width: initial;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-read-more {
|
||||
margin: 30px 0 40px;
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ headline: 'Our Community'
|
|||
<div class="community col-lg-9 col-md-10 col-sm-12">
|
||||
<section class="lead">
|
||||
<p>
|
||||
Istio has an active community that supports its use and on-going development. We'd love for you
|
||||
Istio is an open source project with an active community that supports its use and on-going development. We'd love for you
|
||||
to join us and get involved!
|
||||
</p>
|
||||
</section>
|
||||
|
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 348 KiB After Width: | Height: | Size: 348 KiB |
|
@ -9,7 +9,7 @@ type: markdown
|
|||
|
||||
{% capture overview %}
|
||||
|
||||
This page describes the Istio mixer's configuration model.
|
||||
This page describes Mixer's configuration model.
|
||||
|
||||
{% endcapture %}
|
||||
|
||||
|
@ -19,7 +19,7 @@ This page describes the Istio mixer's configuration model.
|
|||
|
||||
Istio is a sophisticated system with hundreds of independent features. An Istio deployment can be a sprawling
|
||||
affair potentially involving dozens of microservices, with a swarm of Envoy proxies and Mixer instances to
|
||||
support them. In large deployments, many different operators, each with different scope and areas of responsibility,
|
||||
support them. In large deployments, many different operators, each with different scopes and areas of responsibility,
|
||||
may be involved in managing the overall deployment.
|
||||
|
||||
Mixer's configuration model makes it possible to exploit all of its capabilities and flexibility, while
|
||||
|
@ -40,30 +40,29 @@ enabling operators unprecedented control over the policies used and telemetry pr
|
|||
the potential for bad configuration changes leading to service outages.
|
||||
|
||||
- **Extensible**. The model is designed to support Istio's overall extensibility story. New or custom
|
||||
[adapters]({{site.baseurl}}/docs/concepts/mixer.html#adapters)
|
||||
can be added to Istio and be fully manipulated using the same general mechanisms as any other adapter.
|
||||
[adapters](./mixer.html#adapters)
|
||||
can be added to Istio and be fully manipulated using the same general mechanisms as existing adapters.
|
||||
|
||||
## Concepts
|
||||
|
||||
Mixer is an attribute processing machine. Requests arrive at Mixer with a set of [*attributes*]({{site.baseurl}}/docs/attributes.html),
|
||||
and based on these attributes, Mixer generates calls to a variety of backend systems. The set of
|
||||
attributes determines which backend systems Mixer calls for a given request and what parameters
|
||||
they are given. In order to hide the details of individual backend systems, Mixer uses modules
|
||||
known as [*adapters*]({{site.baseurl}}/docs/concepts/mixer.html#adapters) which you can think of as
|
||||
*device drivers* for backend systems.
|
||||
each is given. In order to hide the details of individual backend systems, Mixer uses modules
|
||||
known as [*adapters*]({{site.baseurl}}/docs/concepts/mixer.html#adapters).
|
||||
|
||||
Mixer's configuration has two central responsibilities:
|
||||
|
||||
- Describe which adapters are being used and how they operate.
|
||||
- Describe how to map request attributes into adapter parameters.
|
||||
|
||||
Configuration is expressed using a YAML format. It is built on top of five core
|
||||
Configuration is expressed using a YAML format built around five core
|
||||
abstractions:
|
||||
|
||||
|Concept |Description
|
||||
|----------------------------|-----------
|
||||
|[Adapters](#adapters) | Low-level operationally-focused configuration state for individual mixer adapters.
|
||||
|[Aspects](#aspects) | High-level intent-focused configuration state for individual mixer adapters.
|
||||
|[Adapters](#adapters) | Low-level operationally-focused configuration for individual mixer adapters.
|
||||
|[Aspects](#aspects) | High-level intent-focused configuration for individual mixer adapters.
|
||||
|[Descriptors](#descriptors) | Description of parameters used with individual aspects.
|
||||
|[Scopes](#scopes) | Mechanism to select which aspects and descriptors to use based on a request's attributes.
|
||||
|[Manifests](#manifests) | Description of various static characteristics of an Istio deployment.
|
||||
|
@ -73,7 +72,8 @@ The following sections explain these concepts in detail.
|
|||
### Adapters
|
||||
|
||||
[Adapters]({{site.baseurl}}/docs/concepts/mixer.html#adapters) are the foundational work horses that the Istio mixer is built around. Adapters
|
||||
encapsulate the logic necessary to interface Mixer with specific external backend systems such as Prometheus or NewRelic. Individual adapters
|
||||
encapsulate the logic necessary to interface Mixer with specific external backend systems such as [Prometheus](https://prometheus.io),
|
||||
[New Relic](https://newrelic.com), or [Stackdriver](https://cloud.google.com/logging). Individual adapters
|
||||
generally need to be provided some basic operational parameters in order to do their work. For example, a logging adapter may need
|
||||
to know the IP address and port where it's log data should be pumped.
|
||||
|
||||
|
@ -90,20 +90,27 @@ adapters:
|
|||
refresh_interval: 60s
|
||||
```
|
||||
|
||||
The `name` field gives a name to the chunk of adapter configuration so it can be referenced from elsewhere. The
|
||||
The `name` field gives a name to the block of adapter configuration so it can be referenced from elsewhere. The
|
||||
`kind` field indicates the [aspect kind](#aspects) that this configuration applies to.
|
||||
The `impl` field gives the name of the adapter being configured. Finally, the `params` section is where the
|
||||
actual adapter-specific configuration parameters are specified. In this case, this is configuring the URL the
|
||||
adapter should use in its queries and defines the interval at which it should refresh its local caches.
|
||||
|
||||
For each available adapter, you can define any number of blocks of independent configuration state. This allows the same adapter
|
||||
For each available adapter implementation, you can define any number of independent configuration blocks. This allows the
|
||||
same adapter
|
||||
to be used multiple times within a single deployment. Depending on the situation, such as which microservice is involved, one
|
||||
block of configuration will be used versus another. For example, here's another block of configuration that can coexist
|
||||
configuration block will be used versus another. For example, here are two more configuration blocks that can coexist
|
||||
with the previous one:
|
||||
|
||||
```yaml
|
||||
adapters:
|
||||
- name: mySecondaryListChecker
|
||||
kind: lists
|
||||
impl: ipListChecker
|
||||
params:
|
||||
publisher_url: https://mysecondlistserver:912
|
||||
refresh_interval: 3600s
|
||||
- name: myTernaryListChecker
|
||||
kind: lists
|
||||
impl: genericListChecker
|
||||
params:
|
||||
|
@ -113,7 +120,7 @@ adapters:
|
|||
"402"
|
||||
```
|
||||
|
||||
Here's another example adapter block:
|
||||
And yet one more:
|
||||
|
||||
```yaml
|
||||
adapters:
|
||||
|
@ -130,7 +137,7 @@ adapters and their specific configuration format can be found in *TBD*.
|
|||
|
||||
### Aspects
|
||||
|
||||
Aspects define high-level configuration state (what is sometimes called intent-based configuration),
|
||||
Aspects define high-level configuration (what is sometimes called intent-based configuration),
|
||||
independent of the particular implementation details of a specific adapter type. Whereas adapters focus
|
||||
on *how* to do something, aspects focus on *what* to do.
|
||||
|
||||
|
@ -150,13 +157,13 @@ of aspects are shown in the following table.
|
|||
|
||||
|Kind |Description
|
||||
|-----------------|-----------
|
||||
|quotas |Enforce quotas and rate limits.
|
||||
|metrics |Produce metrics.
|
||||
|lists |Enforce simple whitelist- or blacklist-based access control.
|
||||
|access-logs |Produces fixed-format access logs for every request.
|
||||
|application-logs |Produces flexible application logs for every request.
|
||||
|attributes |Produces supplementary attributes for every request.
|
||||
|denials |Systematically produces a predictable error code.
|
||||
|lists |Verifies a symbol against a list.
|
||||
|metrics |Produces a metric that measures some runtime property.
|
||||
|quotas |Tracks a quota value.
|
||||
|
||||
In the example above, the aspect declaration specifies the `lists` kind which indicates
|
||||
we're configuring an aspect whose purpose is to enable the use of whitelists or
|
||||
|
@ -194,15 +201,14 @@ aspects:
|
|||
source: source.name
|
||||
target: target.name
|
||||
service: api.name
|
||||
method: api.method
|
||||
response_code: response.code
|
||||
```
|
||||
|
||||
This defines an aspect that produces metrics which are sent to the myMetricsCollector adapter,
|
||||
which was defined previously. The `metrics` stanza defines the set of metrics that are
|
||||
generated during request processing for this aspect. The `descriptor_name` field specifies
|
||||
the name of a *descriptor* which is a separate chunk of configuration, described [below](#descriptors) which declares
|
||||
the kind of metric this is. The `value` field and he five label fields describe which attributes to use
|
||||
the name of a *descriptor* which is a separate configuration block, described [below](#descriptors), which declares
|
||||
the kind of metric this is. The `value` field and the four label fields describe which attributes to use
|
||||
at request time in order to produce the metric.
|
||||
|
||||
Each aspect kind defines its own particular format of configuration data. The exhaustive set of
|
||||
|
@ -220,34 +226,40 @@ We've already seen a few simple attribute expressions in the previous examples.
|
|||
source: source.name
|
||||
target: target.name
|
||||
service: api.name
|
||||
method: api.method
|
||||
response_code: response.code
|
||||
```
|
||||
|
||||
The sequences on the right-hand side of the colons are the simplest forms of attribute expressions.
|
||||
They only consist of attribute names. In the above, the `source` label will be assigned the value
|
||||
of the `source.name` attribute.
|
||||
of the `source.name` attribute. Here's an example of a conditional expression:
|
||||
|
||||
```yaml
|
||||
service: api.name | target.name
|
||||
```
|
||||
|
||||
With the above, the service label will be assigned the value of the api.name attribute, or if that attribute
|
||||
is not defined, it will be assigned the value of the target.name attribute.
|
||||
|
||||
The attributes that can be used in attribute expressions must be defined in an
|
||||
[*attribute manifest*](#manifests) for the deployment. Within the manifest, each attribute has
|
||||
a type which represents the kind of data that this attribute carries. In the
|
||||
a type which represents the kind of data that the attribute carries. In the
|
||||
same way, attribute expressions are also typed, and their type is derived from
|
||||
the attributes in the expression and the operators applied to these attributes.
|
||||
|
||||
The type of an attribute expression is used to ensure consistency in which attributes
|
||||
are used in what situation. For example, if a metric descriptor specifies that
|
||||
a particular label is of type INT64, then only attribute expressions that produce a
|
||||
64-bit integers can be used to fill-in that label. This is the case for the `response_code`
|
||||
64-bit integer can be used to fill-in that label. This is the case for the `response_code`
|
||||
label above.
|
||||
|
||||
Attribute expressions include the following features:
|
||||
|
||||
1. Check variables for equality against constants
|
||||
2. Check string variables for wildcard matches
|
||||
1. Check attributes for equality against constants
|
||||
2. Check string attributes for wildcard matches
|
||||
3. Logical AND/OR/NOT operators
|
||||
4. Grouping semantics
|
||||
5. String Concatenation
|
||||
6. Substring
|
||||
6. Substring Production
|
||||
7. Comparison (<, <=, ==, >=, >)
|
||||
|
||||
Refer to *TBD* for the full attribute expression syntax.
|
||||
|
@ -274,7 +286,6 @@ aspects:
|
|||
source: source.name
|
||||
target: target.name
|
||||
service: api.name
|
||||
method: api.method
|
||||
response_code: response.code
|
||||
```
|
||||
|
||||
|
@ -333,8 +344,10 @@ programming language. Doing so enables a few important scenarios:
|
|||
by Mixer. For example, a metric descriptor provides all the information needed to program a backend system to accept metrics
|
||||
that conform to the descriptor's shape (it's value type and its set of labels).
|
||||
|
||||
- Descriptors can be referenced and reused from multiple aspects.
|
||||
|
||||
- It enables type checking of the deployment's configuration. Since attributes have strong types, and so do descriptors,
|
||||
Istio can provide a number of strong correctness guarantees of the system's configuration. Basically, if a chunk of
|
||||
Istio can provide a number of strong correctness guarantees of the system's configuration. Basically, if a block of
|
||||
configuration is accepted into the Istio system, it means the configuration passes a minimum correctness bar. Again, this
|
||||
plays the same role as types in a programming language.
|
||||
|
||||
|
@ -346,9 +359,66 @@ The different descriptor types are detailed in *TBD*
|
|||
|
||||
An Istio deployment can be responsible for managing a large number of services. Organizations
|
||||
often have dozens or hundreds of interacting services, and Istio's mission is to make it easy to
|
||||
manage them all.
|
||||
manage them all. Mixer's configuration model is designed to support different operators that
|
||||
manage different parts of an Istio deployment without stepping on each other's feet, while allowing
|
||||
them to have control over their areas, but not other's.
|
||||
|
||||
*TBD*
|
||||
Here's how this all works:
|
||||
|
||||
- The various configuration blocks described in the previous sections (adapters, aspects, and descriptors) are always defined
|
||||
within the context of a hierarchy.
|
||||
|
||||
- The hierarchy is represented by DNS-style dotted names. Like DNS, the hierarchy starts with the rightmost element in
|
||||
the dotted name.
|
||||
|
||||
- Each configuration block is associated with a *scope* and a *subject* which are both dotted names
|
||||
representing locations within the hierarchy:
|
||||
|
||||
- A scope represents the authority that created the configuration block. Authorities
|
||||
higher up in the hierarchy are more powerful than those lower in it.
|
||||
|
||||
- The subject represents the location of the block of state within the hierarchy. The subject
|
||||
is necessarily always at or below the level of the scope within the hierarchy.
|
||||
|
||||
- If multiple blocks of config have the same subject, the blocks associated with the highest scope
|
||||
in the hierarchy always take precedence.
|
||||
|
||||
The individual elements that make up the hierarchy depend on the specifics of the Istio deployment.
|
||||
A Kubernetes deployment likely uses Kubernetes namespaces as the hierarchy against which Istio configuration
|
||||
state is deployed. For example, a valid scope might be `svc.cluster.local` while a subject might be
|
||||
`myservice.ns.svc.cluster.local`
|
||||
|
||||
The scoping model is designed to pair up with an access control model to constrain which human is allowed to
|
||||
create configuration blocks for particular scopes. Operators which have the authority to create
|
||||
blocks at a scope higher in the hierarchy can impact all configuration associated with lower scopes. Although this is the design
|
||||
intent, Mixer configuration doesn't yet support access control on its configuration so there are no actual constraints on which
|
||||
operator can manipulate which scope.
|
||||
|
||||
#### Resolution
|
||||
|
||||
When a request arrives, Mixer goes through a number of [request processing phases](./mixer.md#request-phases).
|
||||
The Resolution phase is concerned with identifying the exact configuration blocks to use in order to
|
||||
process the incoming request. For example, a request arriving at Mixer for service A likely has some configuration differences
|
||||
with requests arriving for service B. Resolution is about deciding which config to use for a request.
|
||||
|
||||
Resolution depends on a well-known attribute to guide its choice, a so-called *identity attribute*.
|
||||
The value of this attribute is a dotted name which determines where the mixer begins to look in the
|
||||
hierarchy for configuration blocks to use for the request.
|
||||
|
||||
Here's how it all works:
|
||||
|
||||
1. A request arrives and Mixer extracts the value of the identity attribute to produce the current
|
||||
lookup value.
|
||||
|
||||
2. Mixer looks for all configuration blocks whose subject matches the lookup value.
|
||||
|
||||
3. If Mixer finds multiple blocks that match, it keeps only the block that has the highest scope.
|
||||
|
||||
4. Mixer truncates the lowest element from the lookup value's dotted name. If the lookup value is
|
||||
not empty, then Mixer goes back to step 2 above.
|
||||
|
||||
All the configs found in this process are combined together to form the final effective configuration that is used to
|
||||
evaluate the current request.
|
||||
|
||||
### Manifests
|
||||
|
||||
|
@ -381,12 +451,13 @@ manifests:
|
|||
value_type: STRING
|
||||
response.code:
|
||||
value_type: INT64
|
||||
api.method:
|
||||
value_type: STRING
|
||||
api.name:
|
||||
value_type: STRING
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
You can find fully formed examples of Mixer configuration by visiting the [Samples]({{site.baseurl}}/docs/samples). As
|
||||
a specific example, here is the [BookInfo configuration](https://raw.githubusercontent.com/istio/istio/master/demos/mixer-config-quota-bookinfo.yaml).
|
||||
|
||||
## Configuration API
|
||||
|
||||
*TBD*
|
||||
|
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
@ -1,6 +1,6 @@
|
|||
---
|
||||
title: Architecture
|
||||
headline: Architecture
|
||||
title: What is Istio?
|
||||
headline: What is Istio?
|
||||
sidenav: doc-side-concepts-nav.html
|
||||
bodyclass: docs
|
||||
layout: docs
|
||||
|
@ -8,46 +8,137 @@ type: markdown
|
|||
---
|
||||
|
||||
{% capture overview %}
|
||||
The page explains in broad terms the major components of the Istio service mesh design.
|
||||
This page introduces Istio, a polyglot service mesh.
|
||||
{% endcapture %}
|
||||
|
||||
{% capture body %}
|
||||
## The proxy
|
||||
|
||||
The Istio proxy is designed to mediate inbound and outbound
|
||||
traffic for all Istio-managed services. The Istio proxy is based on
|
||||
[Envoy](https://lyft.github.io/envoy/). Istio leverages Envoy's 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 a rich set of metrics. In addition,
|
||||
Istio extends the proxy to interact with the mixer to enforce various
|
||||
access control policies rate limiting, ACLs, as well as telemetry
|
||||
reporting.
|
||||
## Background
|
||||
|
||||
## The mixer
|
||||
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.
|
||||
|
||||
The Istio mixer is responsible for enforcing access control
|
||||
and usage policies across the service mesh and collects telemetry data from
|
||||
proxies and istio-managed services alike. The Istio proxy extracts request
|
||||
level attributes that are then evaluated by the mixer. More info on the
|
||||
attribute extraction and policy evaluation can be found
|
||||
[here]({{site.baseurl}}/docs/reference/attribute-vocabulary.html). The mixer
|
||||
includes a flexible plugin model enabling
|
||||
it to interface to a variety of host environments and configured backends,
|
||||
abstracting the proxy and Istio-managed services from these details.
|
||||
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:
|
||||
|
||||
## The manager
|
||||
- **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.
|
||||
|
||||
- **Observability**. Gain understanding of the dependencies between services, the nature and flow of traffic between them and be able to quickly identify
|
||||
issues.
|
||||
|
||||
The Istio manager serves as an interface between the user
|
||||
and Istio, collecting configuration, validating it and propagating it to
|
||||
various components. It abstracts platform-specific implementation details
|
||||
from the mixer and proxies, providing them with an
|
||||
[abstract representation](model.md) of user's services that is independent
|
||||
of the underlying platform. In addition, [traffic management rules](../reference/rule-dsl.md)
|
||||
(i.e. generic layer-4 rules and layer-7 HTTP/gRPC routing rules)
|
||||
can be programmed at runtime via the Istio Manager.
|
||||
- **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.
|
||||
|
||||
- **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.
|
||||
|
||||
In addition to these behaviors, Istio is designed for extensibility to meet diverse deployment needs:
|
||||
|
||||
- **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.
|
||||
|
||||
- **Integration and 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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
## Design goals
|
||||
|
||||
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.
|
||||
|
||||
- **Maximize Transparency**.
|
||||
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. 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.
|
||||
|
||||
- **Incrementality**.
|
||||
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.
|
||||
|
||||
- **Portability**.
|
||||
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.
|
||||
|
||||
- **Policy Uniformity**.
|
||||
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.
|
||||
|
||||
## High-level architecture
|
||||
|
||||
<img src="./arch.svg" alt="The overall architecture of an Istio-based service." />
|
||||
|
||||
### The sidecar model
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
### Envoy
|
||||
|
||||
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.
|
||||
|
||||
### Mixer
|
||||
|
||||
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.
|
||||
|
||||
### Istio Manager
|
||||
|
||||
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.
|
||||
|
||||
### Istio Auth
|
||||
|
||||
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. 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.
|
||||
|
||||
<img src="{{site.baseurl}}/img/arch.svg" alt="The overall architecture of an Istio-based service." />
|
||||
{% endcapture %}
|
||||
|
||||
{% include templates/concept.md %}
|
||||
|
|
|
@ -11,20 +11,20 @@ type: markdown
|
|||
Tasks show you how to do a single specific targeted
|
||||
activity with the Istio system.
|
||||
|
||||
- [Installion](./istio-installation.html). This task shows you how to
|
||||
setup Istio service mesh.
|
||||
- [Installation](./istio-installation.html). This task shows you how to
|
||||
setup the Istio service mesh.
|
||||
|
||||
- [Integrating Services into the Mesh](./integrating-services-into-istio.html). This task shows you how to
|
||||
integrate your applications with Istio service mesh.
|
||||
integrate your applications with the Istio service mesh.
|
||||
|
||||
- [Configuring Ingress/Egress with Envoy](./ingress-egress-envoy.html). This task shows you how to
|
||||
setup the Istio Ingress controller and the Egress proxy.
|
||||
setup the Istio ingress controller and the egress proxy.
|
||||
|
||||
- [Adding Resilience Features](./resilience-features.html). This task shows you how to
|
||||
setup timeouts, retries and circuit breakers.
|
||||
setup timeouts, retries, and circuit breakers.
|
||||
|
||||
- [Configuring Request Routing](./request-routing.html). This task shows you how to
|
||||
configure dynamic request routing based on weights and http headers.
|
||||
configure dynamic request routing based on weights and HTTP headers.
|
||||
|
||||
- [Fault Injection](./fault-injection.html). This task shows how to
|
||||
inject failures into your application.
|
||||
|
@ -33,8 +33,8 @@ activity with the Istio system.
|
|||
setup Istio-Auth to provide mutual TLS authentication between services.
|
||||
|
||||
- [Collecting Metrics and Logs](./metrics-logs.html). This task shows you how to
|
||||
configure the Istio Mixer to collect metrics and logs from Envoys in
|
||||
configure Mixer to collect metrics and logs from Envoy instances in
|
||||
every Pod.
|
||||
|
||||
- [Configuring Mixer](./configuring-mixer.html). This task shows you how to
|
||||
configure the Mixer.
|
||||
configure Mixer.
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
---
|
||||
title: Task X
|
||||
headline: Task X
|
||||
sidenav: doc-side-tasks-nav.html
|
||||
bodyclass: docs
|
||||
layout: docs
|
||||
type: markdown
|
||||
---
|
||||
{% capture overview %}
|
||||
This task shows how to do X in a Kubernetes cluster. You'll learn
|
||||
how to ...
|
||||
{% endcapture %}
|
||||
|
||||
{% capture prerequisites %}
|
||||
* Do this.
|
||||
* Do this too.
|
||||
{% endcapture %}
|
||||
|
||||
{% capture steps %}
|
||||
## Doing ...
|
||||
|
||||
1. Do this.
|
||||
1. Do this next. Possibly read this [related explanation](...).
|
||||
{% endcapture %}
|
||||
|
||||
{% capture discussion %}
|
||||
## Understanding ...
|
||||
|
||||
Here's an interesting thing to know about the steps you just did.
|
||||
{% endcapture %}
|
||||
|
||||
{% capture whatsnext %}
|
||||
* Learn more about [this](...).
|
||||
* See this [related task](...).
|
||||
{% endcapture %}
|
||||
|
||||
{% include templates/task.md %}
|
370
img/policy.svg
|
@ -1,113 +1,257 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 195.7 177.4" enable-background="new 0 0 195.7 177.4" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#452845" d="M190.8,177.4H4.9c-2.7,0-4.9-2.2-4.9-4.9V4.9C0,2.2,2.2,0,4.9,0h185.9c2.7,0,4.9,2.2,4.9,4.9v167.6
|
||||
C195.7,175.2,193.5,177.4,190.8,177.4z M7,170.4h181.7V7H7V170.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M192.2,29.5H3.5C1.6,29.5,0,27.9,0,26s1.6-3.5,3.5-3.5h188.7c1.9,0,3.5,1.6,3.5,3.5S194.1,29.5,192.2,29.5z
|
||||
"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#FC7B4D" d="M55.3,46.4h-17c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h17c1.9,0,3.5,1.6,3.5,3.5S57.3,46.4,55.3,46.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#FC7B4D" d="M111.8,79.9H88.3c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h23.5c1.9,0,3.5,1.6,3.5,3.5
|
||||
S113.8,79.9,111.8,79.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#FC7B4D" d="M133.2,128.9H39c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h94.2c1.9,0,3.5,1.6,3.5,3.5
|
||||
S135.1,128.9,133.2,128.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M113.2,46.4H82.6c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h30.5c1.9,0,3.5,1.6,3.5,3.5
|
||||
S115.1,46.4,113.2,46.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M60.8,79.9H47.2c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h13.6c1.9,0,3.5,1.6,3.5,3.5S62.8,79.9,60.8,79.9z"
|
||||
/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M106.2,96.2H72.2c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h33.9c1.9,0,3.5,1.6,3.5,3.5
|
||||
S108.1,96.2,106.2,96.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M82.6,162.4H38.4c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h44.3c1.9,0,3.5,1.6,3.5,3.5
|
||||
S84.6,162.4,82.6,162.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M106.2,112.5H72.2c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h33.9c1.9,0,3.5,1.6,3.5,3.5
|
||||
S108.1,112.5,106.2,112.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M166.7,112.5h-51.3c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h51.3c1.9,0,3.5,1.6,3.5,3.5
|
||||
S168.6,112.5,166.7,112.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M147.2,145.2H38.4c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h108.8c1.9,0,3.5,1.6,3.5,3.5
|
||||
S149.1,145.2,147.2,145.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M172.2,79.9h-30.5c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h30.5c1.9,0,3.5,1.6,3.5,3.5
|
||||
S174.1,79.9,172.2,79.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M79,79.9h-6.8c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5H79c1.9,0,3.5,1.6,3.5,3.5S81,79.9,79,79.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M131.5,79.9h-11.8c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h11.8c1.9,0,3.5,1.6,3.5,3.5
|
||||
S133.4,79.9,131.5,79.9z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M106.2,63.5H38.3c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h67.9c1.9,0,3.5,1.6,3.5,3.5
|
||||
S108.1,63.5,106.2,63.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#452845" d="M172.2,46.4h-30.5c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h30.5c1.9,0,3.5,1.6,3.5,3.5
|
||||
S174.1,46.4,172.2,46.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="16.3" cy="14.5" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="43.7" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="60" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="76.4" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="92.7" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="109" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="125.4" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="141.7" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="21.9" cy="158" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="28.9" cy="14.5" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="41.5" cy="14.5" r="3.5"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="65.2" cy="42.9" r="3.8"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="58.8" cy="92.7" r="3.8"/>
|
||||
</g>
|
||||
<g>
|
||||
<circle fill="#452845" cx="124.8" cy="42.9" r="3.8"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 195.7 177.4"
|
||||
enable-background="new 0 0 195.7 177.4"
|
||||
xml:space="preserve"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="policy.svg"><metadata
|
||||
id="metadata131"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs129" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1440"
|
||||
inkscape:window-height="852"
|
||||
id="namedview127"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.330327"
|
||||
inkscape:cx="97.849998"
|
||||
inkscape:cy="88.699997"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1" /><g
|
||||
id="g3"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M190.8,177.4H4.9c-2.7,0-4.9-2.2-4.9-4.9V4.9C0,2.2,2.2,0,4.9,0h185.9c2.7,0,4.9,2.2,4.9,4.9v167.6 C195.7,175.2,193.5,177.4,190.8,177.4z M7,170.4h181.7V7H7V170.4z"
|
||||
id="path5"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g7"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M192.2,29.5H3.5C1.6,29.5,0,27.9,0,26s1.6-3.5,3.5-3.5h188.7c1.9,0,3.5,1.6,3.5,3.5S194.1,29.5,192.2,29.5z "
|
||||
id="path9"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g11"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
fill="#FC7B4D"
|
||||
d="M55.3,46.4h-17c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h17c1.9,0,3.5,1.6,3.5,3.5S57.3,46.4,55.3,46.4z"
|
||||
id="path13"
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g15"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
fill="#FC7B4D"
|
||||
d="M111.8,79.9H88.3c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h23.5c1.9,0,3.5,1.6,3.5,3.5 S113.8,79.9,111.8,79.9z"
|
||||
id="path17"
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g19"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
fill="#FC7B4D"
|
||||
d="M133.2,128.9H39c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h94.2c1.9,0,3.5,1.6,3.5,3.5 S135.1,128.9,133.2,128.9z"
|
||||
id="path21"
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g23"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M113.2,46.4H82.6c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h30.5c1.9,0,3.5,1.6,3.5,3.5 S115.1,46.4,113.2,46.4z"
|
||||
id="path25"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g27"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M60.8,79.9H47.2c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h13.6c1.9,0,3.5,1.6,3.5,3.5S62.8,79.9,60.8,79.9z"
|
||||
id="path29"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g31"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M106.2,96.2H72.2c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h33.9c1.9,0,3.5,1.6,3.5,3.5 S108.1,96.2,106.2,96.2z"
|
||||
id="path33"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g35"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M82.6,162.4H38.4c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h44.3c1.9,0,3.5,1.6,3.5,3.5 S84.6,162.4,82.6,162.4z"
|
||||
id="path37"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g39"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M106.2,112.5H72.2c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h33.9c1.9,0,3.5,1.6,3.5,3.5 S108.1,112.5,106.2,112.5z"
|
||||
id="path41"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g43"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M166.7,112.5h-51.3c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h51.3c1.9,0,3.5,1.6,3.5,3.5 S168.6,112.5,166.7,112.5z"
|
||||
id="path45"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g47"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M147.2,145.2H38.4c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h108.8c1.9,0,3.5,1.6,3.5,3.5 S149.1,145.2,147.2,145.2z"
|
||||
id="path49"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g51"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M172.2,79.9h-30.5c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h30.5c1.9,0,3.5,1.6,3.5,3.5 S174.1,79.9,172.2,79.9z"
|
||||
id="path53"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g55"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M79,79.9h-6.8c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5H79c1.9,0,3.5,1.6,3.5,3.5S81,79.9,79,79.9z"
|
||||
id="path57"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g59"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M131.5,79.9h-11.8c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h11.8c1.9,0,3.5,1.6,3.5,3.5 S133.4,79.9,131.5,79.9z"
|
||||
id="path61"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g63"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M106.2,63.5H38.3c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h67.9c1.9,0,3.5,1.6,3.5,3.5 S108.1,63.5,106.2,63.5z"
|
||||
id="path65"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g67"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
fill="#452845"
|
||||
d="M172.2,46.4h-30.5c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5h30.5c1.9,0,3.5,1.6,3.5,3.5 S174.1,46.4,172.2,46.4z"
|
||||
id="path69"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g71"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="16.3"
|
||||
cy="14.5"
|
||||
r="3.5"
|
||||
id="circle73"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g75"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="43.7"
|
||||
r="3.5"
|
||||
id="circle77"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g79"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="60"
|
||||
r="3.5"
|
||||
id="circle81"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g83"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="76.4"
|
||||
r="3.5"
|
||||
id="circle85"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g87"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="92.7"
|
||||
r="3.5"
|
||||
id="circle89"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g91"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="109"
|
||||
r="3.5"
|
||||
id="circle93"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g95"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="125.4"
|
||||
r="3.5"
|
||||
id="circle97"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g99"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="141.7"
|
||||
r="3.5"
|
||||
id="circle101"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g103"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="21.9"
|
||||
cy="158"
|
||||
r="3.5"
|
||||
id="circle105"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g107"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="28.9"
|
||||
cy="14.5"
|
||||
r="3.5"
|
||||
id="circle109"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g111"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="41.5"
|
||||
cy="14.5"
|
||||
r="3.5"
|
||||
id="circle113"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g115"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="65.2"
|
||||
cy="42.9"
|
||||
r="3.8"
|
||||
id="circle117"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g119"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="58.8"
|
||||
cy="92.7"
|
||||
r="3.8"
|
||||
id="circle121"
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g123"
|
||||
style="fill:#535f61;fill-opacity:1"><circle
|
||||
fill="#452845"
|
||||
cx="124.8"
|
||||
cy="42.9"
|
||||
r="3.8"
|
||||
id="circle125"
|
||||
style="fill:#535f61;fill-opacity:1" /></g></svg>
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 8.9 KiB |
220
img/routing.svg
|
@ -19,10 +19,10 @@
|
|||
sodipodi:docname="routing.svg"
|
||||
width="746.20001"
|
||||
height="332.70535"
|
||||
inkscape:version="0.92.1 r"><metadata
|
||||
inkscape:version="0.91 r13725"><metadata
|
||||
id="metadata12729"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs12727" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
|
@ -41,10 +41,10 @@
|
|||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="357.68762"
|
||||
inkscape:cx="365.22271"
|
||||
inkscape:cy="79.417908"
|
||||
inkscape:window-x="1691"
|
||||
inkscape:window-y="216"
|
||||
inkscape:window-x="55"
|
||||
inkscape:window-y="69"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g12722" /><g
|
||||
id="g12722"
|
||||
|
@ -55,22 +55,24 @@
|
|||
id="path12426"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" /></g><g
|
||||
id="g12432"><path
|
||||
id="g12432"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 693.1,85.9 c -0.9,0 -1.9,-0.1 -2.8,-0.2 -15.1,-1.6 -25.2,-12.7 -25.2,-27.6 0,-15.2 12.4,-27.6 27.6,-27.6 12.3,0 16.5,6.3 16.9,7 l -6,3.6 0.1,0.1 c -0.1,-0.2 -2.7,-3.7 -11,-3.7 -11.4,0 -20.6,9.2 -20.6,20.6 0,11.3 7.4,19.4 19,20.6 2.1,0.2 9.4,0.5 15.1,-5.1 1.4,-1.4 3.6,-1.4 4.9,0 1.4,1.4 1.4,3.6 0,5 -4.7,4.7 -11.2,7.3 -18,7.3 z"
|
||||
id="path12430"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g></g><g
|
||||
id="g12444"><g
|
||||
id="g12438"><path
|
||||
d="m 492.9,115.8 h -98.6 c -4.6,0 -8.3,-3.7 -8.3,-8.3 V 8.9 c 0,-4.6 3.7,-8.3 8.3,-8.3 h 98.6 c 4.6,0 8.3,3.7 8.3,8.3 v 98.6 c -0.1,4.6 -3.8,8.3 -8.3,8.3 z"
|
||||
id="path12436"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" /></g><g
|
||||
id="g12442"><path
|
||||
id="g12442"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 443.8,87.3 c -2.3,0 -4.8,-0.3 -7.2,-0.4 -3.1,-0.1 -6.2,-0.5 -9.6,-0.5 h -3.5 V 49.6 c 0,-11.3 9.1,-20.5 20.3,-20.5 8.6,0 17.3,5.3 17.3,15.6 0,5.4 -1.6,9.6 -4.6,12.4 1.7,1 3.1,2.2 4.3,3.6 3,3.8 3.7,9 2.1,15.5 -2.4,9.5 -10,11.1 -19.1,11.1 z m -13.3,-7.5 c 2.3,0.1 4.4,0.2 6.4,0.2 16.1,0.7 18,-0.9 19.2,-5.6 1.1,-4.2 0.8,-7.4 -0.8,-9.5 -2.1,-2.7 -6.7,-3.5 -10.5,-3.6 -0.4,0 -0.8,0 -1.3,0 h -13 z m 0,-25.4 h 12.4 c 0.6,-0.1 1.2,0 1.8,0 8.2,-0.4 9.4,-4.9 9.4,-9.7 0,-3.9 -2.7,-8.6 -10.3,-8.6 -7.3,0 -13.3,6 -13.3,13.5 z"
|
||||
id="path12440"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g></g><g
|
||||
id="g12448"><path
|
||||
d="m 737.9,332.8 h -98.6 c -4.6,0 -8.3,-3.7 -8.3,-8.3 v -98.6 c 0,-4.6 3.7,-8.3 8.3,-8.3 h 98.6 c 4.6,0 8.3,3.7 8.3,8.3 v 98.6 c -0.1,4.6 -3.8,8.3 -8.3,8.3 z"
|
||||
id="path12446"
|
||||
|
@ -82,11 +84,12 @@
|
|||
id="path12450"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" /></g><g
|
||||
id="g12456"><path
|
||||
id="g12456"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 443.8,304.3 c -2.3,0 -4.8,-0.3 -7.2,-0.4 -3.1,-0.1 -6.2,-0.5 -9.6,-0.5 h -3.5 v -36.8 c 0,-11.3 9.1,-20.5 20.3,-20.5 8.6,0 17.3,5.3 17.3,15.6 0,5.4 -1.6,9.6 -4.6,12.4 1.7,1 3.1,2.2 4.3,3.6 3,3.8 3.7,9 2.1,15.5 -2.4,9.5 -10,11.1 -19.1,11.1 z m -13.3,-7.5 c 2.3,0.1 4.4,0.2 6.4,0.2 16.1,0.7 18,-0.9 19.2,-5.6 1.1,-4.2 0.8,-7.4 -0.8,-9.5 -2.1,-2.7 -6.7,-3.5 -10.5,-3.6 -0.4,0 -0.8,0 -1.3,0 h -13 z m 0,-25.4 h 12.4 c 0.6,-0.1 1.2,0 1.8,0 8.2,-0.4 9.4,-4.9 9.4,-9.7 0,-3.9 -2.7,-8.6 -10.3,-8.6 -7.3,0 -13.3,6 -13.3,13.5 z"
|
||||
id="path12454"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g></g><g
|
||||
id="g12474"><g
|
||||
id="g12462"><path
|
||||
d="m 247.9,115.8 h -98.6 c -4.6,0 -8.3,-3.7 -8.3,-8.3 V 8.9 c 0,-4.6 3.7,-8.3 8.3,-8.3 h 98.6 c 4.6,0 8.3,3.7 8.3,8.3 v 98.6 c 0,4.6 -3.7,8.3 -8.3,8.3 z"
|
||||
|
@ -94,228 +97,255 @@
|
|||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" /></g><g
|
||||
id="g12472"><g
|
||||
id="g12466"><path
|
||||
id="g12466"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 215.6,87.8 c -1.9,0 -3.5,-1.6 -3.5,-3.5 V 50.9 c 0,-7.4 -6,-13.5 -13.5,-13.5 -7.5,0 -13.5,6 -13.5,13.5 v 33.4 c 0,1.9 -1.6,3.5 -3.5,3.5 -1.9,0 -3.5,-1.6 -3.5,-3.5 V 50.9 c 0,-11.3 9.2,-20.5 20.5,-20.5 11.3,0 20.5,9.2 20.5,20.5 v 33.4 c 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12464"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12470"><path
|
||||
d="m 215.5,62.4 h -30 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 30 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12468"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g></g></g><g
|
||||
style="fill:#535f61;fill-opacity:0.94117647" /></g></g></g><g
|
||||
id="g12478"><path
|
||||
d="m 361.8,75.7 c -1,0 -2,-0.4 -2.6,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 l 8.9,-7.7 -8.9,-7.7 c -1.5,-1.3 -1.6,-3.5 -0.3,-4.9 1.3,-1.5 3.5,-1.6 4.9,-0.3 l 14.9,13 -15,12.9 c -0.7,0.5 -1.5,0.8 -2.3,0.8 z"
|
||||
id="path12476"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12482"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12482"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 688.6,146.8 c -1,0 -2,-0.4 -2.7,-1.2 l -7.7,-8.9 -7.7,8.9 c -1.3,1.5 -3.5,1.6 -4.9,0.3 -1.5,-1.3 -1.6,-3.5 -0.3,-4.9 l 13,-14.9 12.9,15 c 1.3,1.5 1.1,3.7 -0.4,4.9 -0.6,0.5 -1.4,0.8 -2.2,0.8 z"
|
||||
id="path12480"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12486"><path
|
||||
d="m 603.8,319.7 c -1,0 -2,-0.4 -2.7,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 l 8.9,-7.7 -8.9,-7.7 c -1.5,-1.3 -1.6,-3.5 -0.3,-4.9 1.3,-1.5 3.5,-1.6 4.9,-0.3 l 14.9,13 -15,12.9 c -0.6,0.5 -1.4,0.8 -2.2,0.8 z"
|
||||
id="path12484"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12490"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12490"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 306,100.4 h -39.5 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 H 306 c 10.2,0 18.5,-8.3 18.5,-18.5 V 58.4 h 48 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 h -41 v 9.5 c 0,14.1 -11.4,25.5 -25.5,25.5 z"
|
||||
id="path12488"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12494"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12494"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 465.4,207.3 c -1.9,0 -3.5,-1.6 -3.5,-3.5 v -32 h 194.4 c 10.2,0 18.5,-8.3 18.5,-18.5 v -13 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 13 c 0,14.1 -11.4,25.5 -25.5,25.5 H 468.9 v 25 c 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12492"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12498"><path
|
||||
d="m 604.8,75.7 c -1,0 -2,-0.4 -2.6,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 l 8.9,-7.7 -8.9,-7.7 c -1.5,-1.3 -1.6,-3.5 -0.3,-4.9 1.3,-1.5 3.5,-1.6 4.9,-0.3 l 14.9,13 -15,12.9 c -0.7,0.5 -1.5,0.8 -2.3,0.8 z"
|
||||
id="path12496"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12502"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12502"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 615.5,65.4 h -99 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 99 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12500"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12506"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12506"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 683.8,302.8 h -16.2 v -55.2 h 18.5 c 15.1,1.6 25.2,12.7 25.2,27.6 0.1,15.2 -12.2,27.6 -27.5,27.6 z m -9.1,-7 h 9.2 c 11.4,0 20.6,-9.2 20.6,-20.6 0,-11.2 -7.4,-19.3 -18.8,-20.6 h -11 z"
|
||||
id="path12504"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g><g
|
||||
id="g12510"><path
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12510"
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 473,257.9 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-2.1 -1.3,-5.6 -2.5,-6.8 -1.4,-1.4 -1.4,-3.6 0,-5 1.4,-1.4 3.6,-1.4 5,0 2.8,2.8 4.5,8.3 4.5,11.7 0,2 -1.6,3.6 -3.5,3.6 z"
|
||||
id="path12508"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845" /></g><g
|
||||
id="g12532"><g
|
||||
id="g12514"><path
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12532"
|
||||
style="fill:#466bb0;fill-opacity:1"><g
|
||||
id="g12514"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 217,143.9 c -1.9,0 -3.5,-1.6 -3.5,-3.5 v -9 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 9 c 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12512"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12518"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12518"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 217,245.9 c -1.9,0 -3.5,-1.6 -3.5,-3.5 v -17 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 17 c 0,1.9 -1.6,3.5 -3.5,3.5 z m 0,-34 c -1.9,0 -3.5,-1.6 -3.5,-3.5 v -17 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 17 c 0,1.9 -1.6,3.5 -3.5,3.5 z m 0,-34 c -1.9,0 -3.5,-1.6 -3.5,-3.5 v -17 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 17 c 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12516"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12522"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12522"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 225.5,271.4 h -12 v -12 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 5 h 5 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12520"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12526"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12526"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 345.5,271.4 h -15 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 15 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m -30,0 h -15 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 15 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m -30,0 h -15 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 15 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m -30,0 h -15 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 15 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12524"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12530"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12530"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 370.5,271.4 h -9 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 9 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12528"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g></g><g
|
||||
id="g12536"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g></g><g
|
||||
id="g12536"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 612.5,279.4 h -14 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 14 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m -28,0 h -14 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 14 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m -28,0 h -14 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 14 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z m -28,0 h -14 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 14 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12534"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12540"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12540"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 613.5,309.4 h -99 c -1.9,0 -3.5,-1.6 -3.5,-3.5 0,-1.9 1.6,-3.5 3.5,-3.5 h 99 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12538"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12572"><g
|
||||
id="g12550"><g
|
||||
id="g12544"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12572"
|
||||
style="fill:#466bb0;fill-opacity:1"><g
|
||||
id="g12550"
|
||||
style="fill:#466bb0;fill-opacity:1"><g
|
||||
id="g12544"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 92.8,27.7 c -1,0 -2,-0.4 -2.6,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 L 99.5,13.9 90.6,6.2 C 89.1,4.9 89,2.7 90.3,1.3 91.6,-0.2 93.8,-0.3 95.2,1 L 110.1,14 95,26.8 c -0.6,0.6 -1.4,0.9 -2.2,0.9 z"
|
||||
id="path12542"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12548"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12548"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="M 102.5,17.4 H 3.5 C 1.6,17.4 0,15.8 0,13.9 0,12 1.6,10.4 3.5,10.4 h 99 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12546"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g></g><g
|
||||
id="g12560"><g
|
||||
id="g12554"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g></g><g
|
||||
id="g12560"
|
||||
style="fill:#466bb0;fill-opacity:1"><g
|
||||
id="g12554"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 92.8,71.7 c -1,0 -2,-0.4 -2.6,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 l 8.9,-7.7 -8.9,-7.7 C 89.1,48.9 89,46.7 90.3,45.3 91.6,43.8 93.8,43.7 95.2,45 L 110.1,58 95,70.8 c -0.6,0.6 -1.4,0.9 -2.2,0.9 z"
|
||||
id="path12552"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12558"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12558"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="M 102.5,61.4 H 3.5 C 1.6,61.4 0,59.8 0,57.9 0,56 1.6,54.4 3.5,54.4 h 99 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12556"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g></g><g
|
||||
id="g12570"><g
|
||||
id="g12564"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g></g><g
|
||||
id="g12570"
|
||||
style="fill:#466bb0;fill-opacity:1"><g
|
||||
id="g12564"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 92.8,116.7 c -1,0 -2,-0.4 -2.6,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 l 8.9,-7.7 -8.9,-7.7 C 89.1,93.9 89,91.7 90.3,90.3 91.6,88.8 93.8,88.7 95.2,90 l 14.9,13 -15,12.9 c -0.7,0.5 -1.5,0.8 -2.3,0.8 z"
|
||||
id="path12562"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12568"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12568"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="M 102.5,106.4 H 3.5 C 1.6,106.4 0,104.8 0,102.9 0,101 1.6,99.4 3.5,99.4 h 99 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12566"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g></g></g><g
|
||||
style="fill:#466bb0;fill-opacity:1" /></g></g></g><g
|
||||
id="g12606"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><g
|
||||
id="g12576"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 17.3,139.8 c 0,2 -0.8,3.3 -2.4,3.9 l 3.2,4.5 h -3.5 l -2.8,-4 H 9.9 v 4 H 7 v -12.6 h 4.8 c 2,0 3.4,0.3 4.2,1 0.8,0.7 1.3,1.8 1.3,3.2 z m -3.4,1.5 c 0.3,-0.3 0.5,-0.8 0.5,-1.5 0,-0.7 -0.2,-1.1 -0.5,-1.4 -0.4,-0.3 -1,-0.4 -1.9,-0.4 H 9.9 v 3.7 H 12 c 0.9,0.1 1.5,-0.1 1.9,-0.4 z"
|
||||
id="path12574"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12580"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 28.3,146.8 c -1.1,1 -2.4,1.5 -3.8,1.5 -1.5,0 -2.7,-0.5 -3.6,-1.4 -0.9,-0.9 -1.4,-2.1 -1.4,-3.6 0,-1.5 0.5,-2.7 1.5,-3.6 1,-0.9 2.1,-1.3 3.5,-1.3 1.4,0 2.5,0.4 3.4,1.2 0.9,0.8 1.4,1.9 1.4,3.3 v 1.4 H 22 c 0.1,0.5 0.4,1 0.8,1.3 0.5,0.3 1,0.5 1.6,0.5 0.9,0 1.7,-0.3 2.3,-1 z m -2.6,-5.7 c -0.4,-0.3 -0.8,-0.5 -1.4,-0.5 -0.6,0 -1,0.2 -1.5,0.5 -0.4,0.3 -0.7,0.8 -0.8,1.3 h 4.2 c 0,-0.5 -0.2,-1 -0.5,-1.3 z"
|
||||
id="path12578"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12584"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 31.8,147 c -0.9,-0.9 -1.4,-2.1 -1.4,-3.6 0,-1.5 0.5,-2.7 1.3,-3.6 0.9,-0.9 1.9,-1.4 3,-1.4 1.1,0 2.1,0.4 2.9,1.2 v -1.1 h 2.7 v 13.2 h -2.7 v -4.3 c -0.8,0.6 -1.6,0.9 -2.6,0.9 -1.2,0.1 -2.2,-0.4 -3.2,-1.3 z m 1.4,-3.6 c 0,0.8 0.2,1.4 0.7,1.9 0.5,0.5 1,0.7 1.6,0.7 0.6,0 1.2,-0.2 1.6,-0.7 0.4,-0.5 0.6,-1.1 0.6,-1.9 0,-0.8 -0.2,-1.4 -0.6,-2 -0.4,-0.5 -1,-0.8 -1.6,-0.8 -0.6,0 -1.2,0.3 -1.6,0.8 -0.5,0.6 -0.7,1.2 -0.7,2 z"
|
||||
id="path12582"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12588"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 49.2,143.8 v -5.2 h 2.7 v 9.7 H 49.2 V 147 c -0.7,0.9 -1.5,1.4 -2.6,1.4 -1.1,0 -2,-0.3 -2.7,-1 -0.7,-0.7 -1.1,-1.7 -1.1,-3 v -5.9 h 2.7 v 5.3 c 0,1.5 0.5,2.2 1.6,2.2 0.5,0 1,-0.2 1.4,-0.6 0.5,-0.3 0.7,-0.9 0.7,-1.6 z"
|
||||
id="path12586"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12592"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 62.9,146.8 c -1.1,1 -2.4,1.5 -3.8,1.5 -1.5,0 -2.7,-0.5 -3.6,-1.4 -0.9,-0.9 -1.4,-2.1 -1.4,-3.6 0,-1.5 0.5,-2.7 1.5,-3.6 1,-0.9 2.1,-1.3 3.5,-1.3 1.4,0 2.5,0.4 3.4,1.2 0.9,0.8 1.4,1.9 1.4,3.3 v 1.4 h -7.1 c 0.1,0.5 0.4,1 0.8,1.3 0.5,0.3 1,0.5 1.6,0.5 0.9,0 1.7,-0.3 2.3,-1 z m -2.6,-5.7 c -0.4,-0.3 -0.8,-0.5 -1.4,-0.5 -0.6,0 -1,0.2 -1.5,0.5 -0.4,0.3 -0.7,0.8 -0.8,1.3 h 4.2 c 0.1,-0.5 -0.1,-1 -0.5,-1.3 z"
|
||||
id="path12590"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12596"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 72.9,145.2 c 0,1 -0.4,1.7 -1.1,2.3 -0.7,0.6 -1.6,0.9 -2.7,0.9 -0.7,0 -1.5,-0.1 -2.2,-0.4 -0.7,-0.3 -1.5,-0.6 -2.1,-1.1 l 1.2,-1.7 c 1,0.8 2.1,1.2 3.2,1.2 0.3,0 0.6,-0.1 0.8,-0.2 0.2,-0.1 0.3,-0.3 0.3,-0.5 0,-0.2 -0.1,-0.4 -0.4,-0.6 -0.3,-0.2 -0.7,-0.4 -1.2,-0.5 -0.5,-0.1 -0.9,-0.3 -1.2,-0.4 -0.3,-0.1 -0.6,-0.3 -1,-0.5 -0.7,-0.5 -1.1,-1.1 -1.1,-2 0,-0.9 0.4,-1.6 1.1,-2.2 0.7,-0.6 1.7,-0.8 2.8,-0.8 1.1,0 2.3,0.4 3.4,1.2 l -1,1.8 c -0.8,-0.6 -1.7,-0.9 -2.5,-0.9 -0.8,0 -1.3,0.2 -1.3,0.7 0,0.3 0.1,0.5 0.4,0.6 0.3,0.1 0.7,0.3 1.3,0.5 0.6,0.2 1,0.3 1.3,0.4 0.3,0.1 0.6,0.3 0.9,0.5 0.8,0.1 1.1,0.8 1.1,1.7 z"
|
||||
id="path12594"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12600"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 78.1,140.5 v 4.3 c 0,0.4 0.1,0.7 0.3,0.9 0.2,0.2 0.4,0.3 0.7,0.3 0.5,0 0.9,-0.2 1.3,-0.7 l 1,1.9 c -0.8,0.8 -1.7,1.2 -2.7,1.2 -0.9,0 -1.7,-0.3 -2.4,-0.9 -0.6,-0.6 -1,-1.4 -1,-2.5 v -4.5 h -1.1 v -1.9 h 1.1 v -2.9 H 78 v 2.9 h 2.3 v 1.9 z"
|
||||
id="path12598"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g><g
|
||||
id="g12604"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1"><path
|
||||
d="m 90.1,145.2 c 0,1 -0.4,1.7 -1.1,2.3 -0.7,0.6 -1.6,0.9 -2.7,0.9 -0.7,0 -1.5,-0.1 -2.2,-0.4 -0.7,-0.3 -1.5,-0.6 -2.1,-1.1 l 1.2,-1.7 c 1,0.8 2.1,1.2 3.2,1.2 0.3,0 0.6,-0.1 0.8,-0.2 0.2,-0.1 0.3,-0.3 0.3,-0.5 0,-0.2 -0.1,-0.4 -0.4,-0.6 -0.3,-0.2 -0.7,-0.4 -1.2,-0.5 -0.5,-0.1 -0.9,-0.3 -1.2,-0.4 -0.3,-0.1 -0.6,-0.3 -1,-0.5 -0.7,-0.5 -1.1,-1.1 -1.1,-2 0,-0.9 0.4,-1.6 1.1,-2.2 0.7,-0.6 1.7,-0.8 2.8,-0.8 1.1,0 2.3,0.4 3.4,1.2 l -1,1.8 c -0.8,-0.6 -1.7,-0.9 -2.5,-0.9 -0.8,0 -1.3,0.2 -1.3,0.7 0,0.3 0.1,0.5 0.4,0.6 0.3,0.1 0.7,0.3 1.3,0.5 0.6,0.2 1,0.3 1.3,0.4 0.3,0.1 0.6,0.3 0.9,0.5 0.8,0.1 1.1,0.8 1.1,1.7 z"
|
||||
id="path12602"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1;stroke:none;stroke-opacity:1" /></g></g><g
|
||||
style="fill:#535f61;fill-opacity:1;stroke:none;stroke-opacity:1" /></g></g><g
|
||||
id="g12620"
|
||||
style="fill:#452845;fill-opacity:1"><g
|
||||
style="fill:#535f61;fill-opacity:1"><g
|
||||
id="g12610"
|
||||
style="fill:#452845;fill-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 274.5,74.1 v -4 h 9.1 v 2.1 l -5.1,10.5 h -3.1 l 4.9,-10.2 h -3.2 v 1.6 z"
|
||||
id="path12608"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12614"
|
||||
style="fill:#452845;fill-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 290.3,82.8 c -1.7,0 -3,-0.6 -3.9,-1.8 -0.9,-1.2 -1.3,-2.8 -1.3,-4.7 0,-2 0.4,-3.6 1.3,-4.7 0.9,-1.2 2.2,-1.8 3.9,-1.8 1.7,0 3,0.6 3.9,1.8 0.9,1.2 1.3,2.8 1.3,4.7 0,2 -0.4,3.6 -1.3,4.7 -0.9,1.1 -2.2,1.8 -3.9,1.8 z m -1.9,-9.5 c -0.4,0.8 -0.6,1.8 -0.6,3 0,1.3 0.2,2.3 0.6,3 0.4,0.8 1,1.2 1.9,1.2 0.9,0 1.5,-0.4 1.9,-1.2 0.4,-0.8 0.6,-1.8 0.6,-3 0,-1.3 -0.2,-2.3 -0.6,-3 -0.4,-0.8 -1,-1.2 -1.9,-1.2 -0.9,0 -1.5,0.4 -1.9,1.2 z"
|
||||
id="path12612"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12618"
|
||||
style="fill:#452845;fill-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 303,72.9 c 0,0.7 -0.3,1.3 -0.8,1.8 -0.5,0.5 -1.1,0.7 -1.9,0.7 -0.8,0 -1.4,-0.2 -1.9,-0.7 -0.5,-0.5 -0.8,-1.1 -0.8,-1.8 0,-0.7 0.3,-1.3 0.8,-1.8 0.5,-0.5 1.1,-0.7 1.9,-0.7 0.8,0 1.4,0.2 1.9,0.7 0.5,0.5 0.8,1.1 0.8,1.8 z m 6.9,-2.8 -9,12.6 h -3.1 l 9,-12.6 z m -10.1,3.5 c 0.1,0.2 0.3,0.2 0.5,0.2 0.2,0 0.4,-0.1 0.5,-0.2 0.1,-0.2 0.2,-0.4 0.2,-0.6 0,-0.3 -0.1,-0.5 -0.2,-0.7 -0.1,-0.2 -0.3,-0.3 -0.5,-0.3 -0.2,0 -0.4,0.1 -0.5,0.3 -0.1,0.2 -0.2,0.4 -0.2,0.7 0,0.2 0,0.4 0.2,0.6 z m 10.3,6.7 c 0,0.7 -0.3,1.3 -0.8,1.8 -0.5,0.5 -1.1,0.7 -1.9,0.7 -0.8,0 -1.4,-0.2 -1.9,-0.7 -0.5,-0.5 -0.8,-1.1 -0.8,-1.8 0,-0.7 0.3,-1.3 0.8,-1.8 0.5,-0.5 1.1,-0.7 1.9,-0.7 0.8,0 1.4,0.2 1.9,0.7 0.5,0.5 0.8,1.1 0.8,1.8 z m -3.2,0.6 c 0.1,0.2 0.3,0.2 0.5,0.2 0.2,0 0.4,-0.1 0.5,-0.2 0.1,-0.2 0.2,-0.4 0.2,-0.6 0,-0.2 -0.1,-0.5 -0.2,-0.7 -0.1,-0.2 -0.3,-0.3 -0.5,-0.3 -0.2,0 -0.4,0.1 -0.5,0.3 -0.1,0.2 -0.2,0.4 -0.2,0.7 0,0.3 0,0.5 0.2,0.6 z"
|
||||
id="path12616"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1" /></g></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g></g><g
|
||||
id="g12634"
|
||||
style="fill:#452845;fill-opacity:1"><g
|
||||
style="fill:#535f61;fill-opacity:1"><g
|
||||
id="g12624"
|
||||
style="fill:#452845;fill-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 275,242.3 v -2.4 h 7.7 v 1.9 l -2.6,2.9 c 1,0.2 1.8,0.6 2.3,1.3 0.6,0.7 0.8,1.5 0.8,2.3 0,1.3 -0.4,2.4 -1.3,3.1 -0.9,0.8 -2,1.1 -3.4,1.1 -1.4,0 -2.8,-0.5 -4.2,-1.5 l 1.2,-2.2 c 1.2,0.8 2.2,1.3 3.2,1.3 0.6,0 1,-0.1 1.4,-0.4 0.4,-0.3 0.5,-0.7 0.5,-1.2 0,-0.5 -0.2,-0.9 -0.6,-1.2 -0.4,-0.3 -1,-0.5 -1.7,-0.5 -0.4,0 -1,0.1 -1.7,0.3 V 245 l 2.4,-2.8 h -4 z"
|
||||
id="path12622"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12628"
|
||||
style="fill:#452845;fill-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 290.5,252.6 c -1.7,0 -3,-0.6 -3.9,-1.8 -0.9,-1.2 -1.3,-2.8 -1.3,-4.7 0,-2 0.4,-3.6 1.3,-4.7 0.9,-1.2 2.2,-1.8 3.9,-1.8 1.7,0 3,0.6 3.9,1.8 0.9,1.2 1.3,2.8 1.3,4.7 0,2 -0.4,3.6 -1.3,4.7 -0.9,1.1 -2.1,1.8 -3.9,1.8 z m -1.8,-9.5 c -0.4,0.8 -0.6,1.8 -0.6,3 0,1.3 0.2,2.3 0.6,3 0.4,0.8 1,1.2 1.9,1.2 0.9,0 1.5,-0.4 1.9,-1.2 0.4,-0.8 0.6,-1.8 0.6,-3 0,-1.3 -0.2,-2.3 -0.6,-3 -0.4,-0.8 -1,-1.2 -1.9,-1.2 -0.9,0 -1.5,0.4 -1.9,1.2 z"
|
||||
id="path12626"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1" /></g><g
|
||||
style="fill:#535f61;fill-opacity:1" /></g><g
|
||||
id="g12632"
|
||||
style="fill:#452845;fill-opacity:1"><path
|
||||
style="fill:#535f61;fill-opacity:1"><path
|
||||
d="m 303.2,242.7 c 0,0.7 -0.3,1.3 -0.8,1.8 -0.5,0.5 -1.1,0.7 -1.9,0.7 -0.8,0 -1.4,-0.2 -1.9,-0.7 -0.5,-0.5 -0.8,-1.1 -0.8,-1.8 0,-0.7 0.3,-1.3 0.8,-1.8 0.5,-0.5 1.1,-0.7 1.9,-0.7 0.8,0 1.4,0.2 1.9,0.7 0.5,0.5 0.8,1.1 0.8,1.8 z m 6.9,-2.8 -9,12.6 H 298 l 9,-12.6 z m -10.1,3.5 c 0.1,0.2 0.3,0.2 0.5,0.2 0.2,0 0.4,-0.1 0.5,-0.2 0.1,-0.2 0.2,-0.4 0.2,-0.6 0,-0.3 -0.1,-0.5 -0.2,-0.7 -0.1,-0.2 -0.3,-0.3 -0.5,-0.3 -0.2,0 -0.4,0.1 -0.5,0.3 -0.1,0.2 -0.2,0.4 -0.2,0.7 0,0.2 0.1,0.4 0.2,0.6 z m 10.3,6.7 c 0,0.7 -0.3,1.3 -0.8,1.8 -0.5,0.5 -1.1,0.7 -1.9,0.7 -0.8,0 -1.4,-0.2 -1.9,-0.7 -0.5,-0.5 -0.8,-1.1 -0.8,-1.8 0,-0.7 0.3,-1.3 0.8,-1.8 0.5,-0.5 1.1,-0.7 1.9,-0.7 0.8,0 1.4,0.2 1.9,0.7 0.5,0.5 0.8,1.1 0.8,1.8 z m -3.2,0.6 c 0.1,0.2 0.3,0.2 0.5,0.2 0.2,0 0.4,-0.1 0.5,-0.2 0.1,-0.2 0.2,-0.4 0.2,-0.6 0,-0.2 -0.1,-0.5 -0.2,-0.7 -0.1,-0.2 -0.3,-0.3 -0.5,-0.3 -0.2,0 -0.4,0.1 -0.5,0.3 -0.1,0.2 -0.2,0.4 -0.2,0.7 0,0.3 0,0.5 0.2,0.6 z"
|
||||
id="path12630"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#452845;fill-opacity:1" /></g></g><g
|
||||
id="g12642"><path
|
||||
style="fill:#535f61;fill-opacity:1" /></g></g><g
|
||||
id="g12642"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 372.5,303.4 h -194 v -172 c 0,-1.9 1.6,-3.5 3.5,-3.5 1.9,0 3.5,1.6 3.5,3.5 v 165 h 187 c 1.9,0 3.5,1.6 3.5,3.5 0,1.9 -1.6,3.5 -3.5,3.5 z"
|
||||
id="path12640"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g><g
|
||||
id="g12646"><path
|
||||
style="fill:#466bb0;fill-opacity:1" /></g><g
|
||||
id="g12646"
|
||||
style="fill:#466bb0;fill-opacity:1"><path
|
||||
d="m 364.8,312.7 c -1,0 -2,-0.4 -2.6,-1.2 -1.3,-1.5 -1.1,-3.7 0.4,-4.9 l 8.9,-7.7 -8.9,-7.7 c -1.5,-1.3 -1.6,-3.5 -0.3,-4.9 1.3,-1.5 3.5,-1.6 4.9,-0.3 l 14.9,13 -15,12.9 c -0.7,0.5 -1.5,0.8 -2.3,0.8 z"
|
||||
id="path12644"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#e95f6a" /></g></g></svg>
|
||||
style="fill:#466bb0;fill-opacity:1" /></g></g></svg>
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 26 KiB |
|
@ -48,13 +48,13 @@ title: istio.io
|
|||
<div class="col-sm-7">
|
||||
<a href="{{ site.baseurl }}/docs/concepts/mixer.html"><button class="btn btn-grpc waves-effect waves-light btn-read-more">READ MORE</button></a>
|
||||
</div>
|
||||
<img class="col-sm-5 nofloat landing-image" src="{{ site.baseurl }}/img/policy.svg" alt="Web">
|
||||
<img class="col-sm-5 nofloat landing-image-small" src="{{ site.baseurl }}/img/policy.svg" alt="Web">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" >
|
||||
<div class="col-md-11 nofloat center-block landing-row">
|
||||
<img class="col-sm-5 landing-image" src="{{ site.baseurl }}/img/monitoring.svg" alt="In-depth Monitoring of Apis">
|
||||
<img class="col-sm-5 landing-image-small" src="{{ site.baseurl }}/img/monitoring.svg" alt="In-depth Monitoring of APIs">
|
||||
<h3 class="col-sm-7 landing-row-title">In-depth Telemetry and Reporting</h3>
|
||||
<p class="col-sm-7">Understand the dependencies between services, the nature and flow of traffic between them and quickly identify issues with distributed tracing.</p>
|
||||
<div class="col-sm-7 col-sm-offset-5 col-sm-offset-0">
|
||||
|
|