mirror of https://github.com/istio/istio.io.git
94 lines
22 KiB
HTML
94 lines
22 KiB
HTML
<!doctype html><html lang=zh itemscope itemtype=https://schema.org/WebPage><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=theme-color content="#466BB0"><meta name=title content="Mixer FAQ"><meta name=description content="Mixer Q & A."><meta name=keywords content="microservices,services,mesh"><meta property="og:title" content="Mixer FAQ"><meta property="og:type" content="website"><meta property="og:description" content="Mixer Q & A."><meta property="og:url" content="/v1.6/zh/faq/mixer/"><meta property="og:image" content="/v1.6/img/istio-whitelogo-bluebackground-framed.svg"><meta property="og:image:alt" content="Istio Logo"><meta property="og:image:width" content="112"><meta property="og:image:height" content="150"><meta property="og:site_name" content="Istio"><meta name=twitter:card content="summary"><meta name=twitter:site content="@IstioMesh"><title>Istioldie 1.6 / Mixer FAQ</title><script async src="https://www.googletagmanager.com/gtag/js?id=UA-98480406-2"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}
|
||
gtag('js',new Date());gtag('config','UA-98480406-2');</script><link rel=alternate type=application/rss+xml title="Istio Blog" href=/v1.6/blog/feed.xml><link rel=alternate type=application/rss+xml title="Istio News" href=/v1.6/news/feed.xml><link rel=alternate type=application/rss+xml title="Istio Blog and News" href=/v1.6/feed.xml><link rel="shortcut icon" href=/v1.6/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.6/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.6/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.6/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.6/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.6/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.6/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.6/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.6/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.6/favicons/android-192x192.png sizes=192x192><link rel=manifest href=/v1.6/manifest.json><meta name=apple-mobile-web-app-title content="Istio"><meta name=application-name content="Istio"><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Work+Sans:400|Chivo:400|Work+Sans:500,300,600,300italic,400italic,500italic,600italic|Chivo:500,300,600,300italic,400italic,500italic,600italic"><link rel=stylesheet href=/v1.6/css/all.css><script src=/v1.6/js/themes_init.min.js></script></head><body class="language-unknown archive-site"><script>const branchName="release-1.6";const docTitle="Mixer FAQ";const iconFile="\/v1.6/img/icons.svg";const buttonCopy='复制到剪切板';const buttonPrint='打印';const buttonDownload='下载';</script><script src="https://www.google.com/cse/brand?form=search-form" defer></script><script src=/v1.6/js/all.min.js data-manual defer></script><header><nav><a id=brand href=/v1.6/zh/><span class=logo><svg viewBox="0 0 300 300"><circle cx="150" cy="150" r="146" stroke-width="2"/><polygon points="65 240 225 240 125 270"/><polygon points="65 230 125 220 125 110"/><polygon points="135 220 225 230 135 30"/></svg></span><span class=name>Istioldie 1.6</span></a><div id=hamburger><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#hamburger"/></svg></div><div id=header-links><a title="了解如何部署、使用和运维 Istio。" href=/v1.6/zh/docs/>文档</a>
|
||
<a title="关于使用 Istio 的博客文章。" href=/v1.6/zh/blog/2020/>博客<i class=dot data-prefix=/blog></i></a>
|
||
<a title="关于 Istio 项目的最新报道。" href=/v1.6/zh/news/>新闻<i class=dot data-prefix=/news></i></a>
|
||
<a class=current title="关于 Istio 的常见问题。" href=/v1.6/zh/faq/>FAQ</a>
|
||
<a title="关于 Istio 项目的说明。" href=/v1.6/zh/about/>关于</a><div class=menu><button id=gearDropdownButton class=menu-trigger title=选项和设置 aria-label="Options and Settings" aria-controls=gearDropdownContent><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#gear"/></svg></button><div id=gearDropdownContent class=menu-content aria-labelledby=gearDropdownButton role=menu><a tabindex=-1 role=menuitem lang=en id=switch-lang-en>English</a>
|
||
<a tabindex=-1 role=menuitem lang=zh id=switch-lang-zh class=active>中文</a><div role=separator></div><a tabindex=-1 role=menuitem class=active id=light-theme-item>亮主题</a>
|
||
<a tabindex=-1 role=menuitem id=dark-theme-item>暗主题</a><div role=separator></div><a tabindex=-1 role=menuitem id=syntax-coloring-item>代码高亮</a><div role=separator></div><h6>本站的其它版本</h6><a tabindex=-1 role=menuitem onclick="navigateToUrlOrRoot('https://istio.io/faq\/mixer\/');return false;">当前版本</a>
|
||
<a tabindex=-1 role=menuitem onclick="navigateToUrlOrRoot('https://preliminary.istio.io/faq\/mixer\/');return false;">下个版本</a>
|
||
<a tabindex=-1 role=menuitem href=https://istio.io/archive>旧版本</a></div></div><button id=search-show title="搜索 istio.io" aria-label=搜索><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#magnifier"/></svg></button></div><form id=search-form name=cse role=search><input type=hidden name=cx value=002184991200833970123:iwwf17ikgf4>
|
||
<input type=hidden name=ie value=utf-8>
|
||
<input type=hidden name=hl value=en>
|
||
<input type=hidden id=search-page-url value=/v1.6/search>
|
||
<input id=search-textbox class=form-control name=q type=search aria-label="搜索 istio.io">
|
||
<button id=search-close title=取消搜索 type=reset aria-label=取消搜索><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#cancel-x"/></svg></button></form></nav></header><div class=banner-container></div><main class="primary notoc"><div id=sidebar-container class="sidebar-container sidebar-offcanvas"><nav id=sidebar aria-label="Section Navigation"><div class=directory><div class=card><div id=header0 class=header title="关于 Istio 的常见问题。"><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#faq"/></svg>FAQ</div><div class="body default" aria-labelledby=header0><ul role=tree aria-expanded=true class=leaf-section aria-labelledby=header0><li role=none><a role=treeitem title=常见问题。 href=/v1.6/zh/faq/general/>常见问题</a></li><li role=none><a role=treeitem title=安装相关问答。 href=/v1.6/zh/faq/setup/>安装</a></li><li role=none><a role=treeitem title=安全常见问题。 href=/v1.6/zh/faq/security/>安全</a></li><li role=none><a role=treeitem title=特定应用问答。 href=/v1.6/zh/faq/applications/>应用</a></li><li role=none><span role=treeitem class=current title="Mixer Q & A.">Mixer</span></li><li role=none><a role=treeitem title=度量和日志的常见问题。 href=/v1.6/zh/faq/metrics-and-logs/>度量和日志</a></li><li role=none><a role=treeitem title=分布式追踪问答。 href=/v1.6/zh/faq/distributed-tracing/>分布式追踪</a></li><li role=none><a role=treeitem title=流量管理的常见问题。 href=/v1.6/zh/faq/traffic-management/>流量管理</a></li></ul></div></div></div></nav></div><div class=article-container><nav aria-label=Breadcrumb><ol><li><a href=/v1.6/zh/ title=用于连接、保护、控制和观测服务。>Istio</a></li><li><a href=/v1.6/zh/faq/ title="关于 Istio 的常见问题。">FAQ</a></li><li>Mixer</li></ol></nav><article aria-labelledby=title><div class=title-area><i class=title-icon><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#faq"/></svg></i><div style=width:100%><h1 id=title>Mixer FAQ</h1></div></div><nav class="toc-inlined toc-forced"><hr><div class=directory role=directory><nav id=InlineTableOfContents><ol><li role=none aria-label="为什么 Istio 需要 Mixer?"><a href=#why-mixer>为什么 Istio 需要 Mixer?</a></li><li role=none aria-label="如何查看 Mixer 配置?"><a href=#seeing-mixer-config>如何查看 Mixer 配置?</a></li><li role=none aria-label="Mixer 支持的全部属性表达式有哪些?"><a href=#attribute-expressions>Mixer 支持的全部属性表达式有哪些?</a></li><li role=none aria-label="Mixer 是否提供内部监控?"><a href=#mixer-self-monitoring>Mixer 是否提供内部监控?</a></li><li role=none aria-label="如何编写用于 Mixer 的自定义适配器?"><a href=#writing-custom-adapters>如何编写用于 Mixer 的自定义适配器?</a></li><li role=none aria-label=为什么我的规则无法匹配?><a href=#header-rules>为什么我的规则无法匹配?</a></li></ol></nav></div><hr></nav><div class=faq><h5 id=why-mixer class=question>为什么 Istio 需要 Mixer?</h5><div class=answer><p>Mixer 为 Istio 组件和基于 Istio 的服务之间提供了丰富的中介层。Mixer 作为基础设施后端服务可用于访问控制检查控制和遥测数据采集。Mixer 提供的中介层可在不修改服务二进制的情况下,帮助运维人员获得对服务内部机制的洞悉力和控制力。</p><p>Mixer 被设计为独立组件,这与 Envoy 不同。这样的设计有很多好处:</p><ul><li><p><em>可伸缩性</em> 。
|
||
Mixer 和 Envoy 的功能在本质上有很大不同,这也导致了它们各自对于可伸缩性要求不同。保持组件分离可以实现独立的组件适当伸缩。</p></li><li><p><em>资源使用</em> 。
|
||
Istio 依赖于能够被部署的代理实例,因此最小化每个代理实例的成本是非常重要的。将 Mixer 的复杂逻辑移动到独立的组件中让 Envoy 保持轻量和灵活变为可能。</p></li><li><p><em>可靠性</em> 。
|
||
Mixer 及其开放式扩展性模型代表了数据路径处理流水线最复杂部分。之所以在 Mixer 而不是在 Envoy 中实现此功能,是因为这样可以创建不同的故障域,使得 Envoy 即使在 Mixer 发生故障的情况下也能继续运行,从而避免了宕机。</p></li><li><p><em>隔离性</em> 。
|
||
Mixer 在 Istio 和 基础设施后端之间提供了一定程度的隔离。每个 Envoy 实例都可配置为在非常小范围内进行交互操作,从而限制了潜在攻击的影响。</p></li><li><p><em>可扩展性</em> 。
|
||
必须设计一个简单的可扩展性模型,使得 Istio 尽可能广泛地与后端进行交互操作。由于其设计和语言选择,Mixer 比 Envoy 具备更好的扩展性。功能点的分离也使得 Istio 策略和遥测处理的功能可以采用不同的代理一起实现,例如 Envoy 和 NGINX 的混合。</p></li></ul><p>Envoy 实现了复杂的缓存,批处理和预取策略,从而在很大程度上减轻了在请求路径上与 Mixer 交互的延迟影响。</p></div><h5 id=seeing-mixer-config class=question>如何查看 Mixer 配置?</h5><div class=answer><p><em>instances</em> 、<em>handlers</em> 和 <em>rules</em> 的相关配置以 Kubernetes <a href=https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/>CRD</a> 的方式进行存储。其配置可以使用 <code>kubectl</code> 访问 Kubernetes API server 获得。</p><h2 id=rules>Rules</h2><p>查看所有的 <code>rule</code> 列表,执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl get rules --all-namespaces
|
||
NAMESPACE NAME AGE
|
||
istio-system kubeattrgenrulerule 20h
|
||
istio-system promhttp 20h
|
||
istio-system promtcp 20h
|
||
istio-system stdiohttp 20h
|
||
istio-system stdiotcp 20h
|
||
istio-system tcpkubeattrgenrulerule 20h
|
||
</code></pre><p>查看单个 <code>rule</code> 配置,执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl -n <namespace> get rules <name> -o yaml
|
||
</code></pre><h2 id=handlers>Handlers</h2><p><code>Handlers</code> 基于 Kubernetes <a href=https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions>CRD</a> 中的 <code>adapters</code> 资源进行定义。</p><p>首先,查看所有的 <code>adapter</code> 列表,执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl get crd -listio=mixer-adapter
|
||
NAME AGE
|
||
adapters.config.istio.io 20h
|
||
bypasses.config.istio.io 20h
|
||
circonuses.config.istio.io 20h
|
||
deniers.config.istio.io 20h
|
||
fluentds.config.istio.io 20h
|
||
kubernetesenvs.config.istio.io 20h
|
||
listcheckers.config.istio.io 20h
|
||
memquotas.config.istio.io 20h
|
||
noops.config.istio.io 20h
|
||
opas.config.istio.io 20h
|
||
prometheuses.config.istio.io 20h
|
||
rbacs.config.istio.io 20h
|
||
servicecontrols.config.istio.io 20h
|
||
signalfxs.config.istio.io 20h
|
||
solarwindses.config.istio.io 20h
|
||
stackdrivers.config.istio.io 20h
|
||
statsds.config.istio.io 20h
|
||
stdios.config.istio.io 20h
|
||
</code></pre><p>然后,对列表中的每个 <code>adapter</code> 执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl get <adapter kind name> --all-namespaces
|
||
</code></pre><p><code>stdios</code> 将输出以下类似内容:</p><pre><code class=language-plain data-expandlinks=true data-repo=istio>NAMESPACE NAME AGE
|
||
istio-system handler 20h
|
||
</code></pre><p>查看单个 <code>handler</code> 配置,执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl -n <namespace> get <adapter kind name> <name> -o yaml
|
||
</code></pre><h2 id=instances>Instances</h2><p><code>Instances</code> 基于 Kubernetes <a href=https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions>CRD</a> 中的 <code>instances</code> 资源进行定义。</p><p>首先,查看所有的 <code>instance</code> 列表,执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl get crd -listio=mixer-instance
|
||
NAME AGE
|
||
apikeys.config.istio.io 20h
|
||
authorizations.config.istio.io 20h
|
||
checknothings.config.istio.io 20h
|
||
edges.config.istio.io 20h
|
||
instances.config.istio.io 20h
|
||
kuberneteses.config.istio.io 20h
|
||
listentries.config.istio.io 20h
|
||
logentries.config.istio.io 20h
|
||
metrics.config.istio.io 20h
|
||
quotas.config.istio.io 20h
|
||
reportnothings.config.istio.io 20h
|
||
servicecontrolreports.config.istio.io 20h
|
||
tracespans.config.istio.io 20h
|
||
</code></pre><p>然后,对列表中的每个 <code>instance</code> 执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl get <instance kind name> --all-namespaces
|
||
</code></pre><p><code>metrics</code> 将输出以下类似内容:</p><pre><code class=language-plain data-expandlinks=true data-repo=istio>NAMESPACE NAME AGE
|
||
istio-system requestcount 20h
|
||
istio-system requestduration 20h
|
||
istio-system requestsize 20h
|
||
istio-system responsesize 20h
|
||
istio-system tcpbytereceived 20h
|
||
istio-system tcpbytesent 20h
|
||
</code></pre><p>查看单个 <code>instance</code> 配置,执行以下命令:</p><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl -n <namespace> get <instance kind name> <name> -o yaml
|
||
</code></pre></div><h5 id=attribute-expressions class=question>Mixer 支持的全部属性表达式有哪些?</h5><div class=answer><p>Mixer 支持的全部属性表达式参见<a href=/v1.6/zh/docs/reference/config/policy-and-telemetry/expression-language/>表达式语言参考</a>。</p></div><h5 id=mixer-self-monitoring class=question>Mixer 是否提供内部监控?</h5><div class=answer><p>Mixer 提供了监控端点(默认端口:<code>15014</code>)。Mixer 提供的性能和审计功能的服务路径如下:</p><ul><li><code>/metrics</code> 提供有关 Mixer 处理的 Prometheus 指标、API 调用相关的 gRPC 指标和 adapter 调度指标。</li><li><code>/debug/pprof</code> 提供了性能剖析相关的数据,格式为 <a href=https://golang.org/pkg/net/http/pprof/>pprof</a>。</li><li><code>/debug/vars</code> 提供了服务器指标,数据为 JSON 格式。</li></ul><p>可通过 <code>kubectl logs</code> 命令访问 Mixer 的日志,如下所示:</p><ul><li>关于 <code>istio-policy</code> 服务:</li></ul><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl -n istio-system logs -l app=policy -c mixer
|
||
</code></pre><ul><li>关于 <code>istio-telemetry</code> 服务:</li></ul><pre><code class=language-bash data-expandlinks=true data-repo=istio>$ kubectl -n istio-system logs -l app=telemetry -c mixer
|
||
</code></pre><p>Mixer 追踪功能由以下命令行参数控制:<code>trace_zipkin_url</code>、<code>trace_jaeger_url</code> 和 <code>trace_log_spans</code>。如果设置了以上参数中的任何一个,则追踪数据将上报至配置的相关服务地址。如果未提供追踪相关设置参数,则 Mixer 将不会产生应用程序级别的追踪信息。</p></div><h5 id=writing-custom-adapters class=question>如何编写用于 Mixer 的自定义适配器?</h5><div class=answer><p>可以阅读
|
||
<a href=https://github.com/istio/istio/wiki/Mixer-Compiled-In-Adapter-Dev-Guide>适配器开发指南</a>
|
||
了解有关如何为 Mixer 实施新适配器。</p><div><aside class="callout idea"><div class=type><svg class="large-icon"><use xlink:href="/v1.6/img/icons.svg#callout-idea"/></svg></div><div class=content>Istio 1.0 开始支持进程外适配器。这是推荐与 Mixer 持续集成的方法。有关如何开始构建进程外适配器的文档有
|
||
<a href=https://github.com/istio/istio/wiki/Mixer-Out-Of-Process-Adapter-Dev-Guide>进程外适配器开发指南</a>
|
||
和<a href=https://github.com/istio/istio/wiki/Mixer-Out-Of-Process-Adapter-Walkthrough>进程外适配器概览</a>。</div></aside></div></div><h5 id=header-rules class=question>为什么我的规则无法匹配?</h5><div class=answer><p>Mixer 的规则必须在运行时验证。这意味着匹配条件的必须是<a href=/v1.6/zh/docs/reference/config/policy-and-telemetry/expression-language/>语言</a>中定义良好的表达式,
|
||
属性是<a href=/v1.6/zh/docs/reference/config/policy-and-telemetry/attribute-vocabulary/>属性清单</a>中声明过的,
|
||
并且规则所指向的 handler 和 instance 也必须存在。</p><p>在执行规则之前,属性值通常会被标准化。比如,在 <code>request.headers</code> 和 <code>response.headers</code> 属性中,HTTP 头的键是小写的。
|
||
表达式 <code>request.headers ["X-Forwarded-Proto"] == "http"</code> 不会匹配任何请求,即使 HTTP 头部是不区分大小写的。
|
||
相反,应该使用这样的表达式 <code>request.headers ["x-forwarded-proto"] == "http"</code>。</p></div></div></article><nav class=pagenav><div class=left><a title=特定应用问答。 href=/v1.6/zh/faq/applications/><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#left-arrow"/></svg>应用</a></div><div class=right><a title=度量和日志的常见问题。 href=/v1.6/zh/faq/metrics-and-logs/>度量和日志<svg class="icon"><use xlink:href="/v1.6/img/icons.svg#right-arrow"/></svg></a></div></nav><div id=endnotes-container aria-hidden=true><h2>链接</h2><ol id=endnotes></ol></div></div></main><footer><div class=user-links><a class=channel title="立刻下载 Istio 1.6.8" href=/v1.6/docs/setup/getting-started/#download aria-label="Download Istio"><span>download</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#download"/></svg>
|
||
</a><a class=channel title="加入 Istio discussion board 参与讨论获取帮助" href=https://discuss.istio.io aria-label="Istio discussion board"><span>discuss</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#discourse"/></svg></a>
|
||
<a class=channel title="Stack Overflow 中列举了针对实际问题以及部署、配置和使用 Istio 的各项回答" href=https://stackoverflow.com/questions/tagged/istio aria-label="Stack Overflow"><span>stack overflow</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#stackoverflow"/></svg></a>
|
||
<a class=channel title="在 Slack 上与 Istio 社区交互讨论开发问题(仅限邀请)" href=https://istio.slack.com aria-label=slack><span>slack</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#slack"/></svg></a>
|
||
<a class=channel title="关注我们的 Twitter 来获取最新信息" href=https://twitter.com/IstioMesh aria-label=Twitter><span>twitter</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#twitter"/></svg></a><div class=tag>对于用户</div></div><div class=info><p class=copyright>中文内容由 ServiceMesher 社区维护,部分文档可能稍微滞后于英文版本,同步工作持续进行中<br>Istio 归档
|
||
1.6.8<br>© 2020 Istio Authors, <a href=https://policies.google.com/privacy>隐私政策</a><br>归档于 2020年8月21日</p></div><div class=dev-links><a class=channel title="Istio 的代码在 GitHub 上开发" href=https://github.com/istio/community aria-label=GitHub><span>github</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#github"/></svg></a>
|
||
<a class=channel title="如果您想深入了解 Istio 的技术细节,请查看我们日益完善的设计文档" href=https://groups.google.com/forum/#!forum/istio-team-drive-access aria-label="team drive"><span>drive</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#drive"/></svg></a>
|
||
<a class=channel title="如果您想为 Istio 项目做出贡献,请考虑加入我们的工作组" href=https://github.com/istio/community/blob/master/WORKING-GROUPS.md aria-label="working groups"><span>working groups</span><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#working-groups"/></svg></a><div class=tag>对于开发者</div></div></footer><div id=scroll-to-top-container aria-hidden=true><button id=scroll-to-top title=回到顶部><svg class="icon"><use xlink:href="/v1.6/img/icons.svg#top"/></svg></button></div></body></html> |