mirror of https://github.com/istio/istio.io.git
235 lines
41 KiB
HTML
235 lines
41 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="监控被阻止的和透传的外部服务流量"><meta name=description content="如何使用 Istio 去监控被阻止的和透传的外部服务流量。"><meta name=author content="Neeraj Poddar (Aspen Mesh)"><meta name=keywords content="microservices,services,mesh,monitoring,blackhole,passthrough"><meta property="og:title" content="监控被阻止的和透传的外部服务流量"><meta property="og:type" content="website"><meta property="og:description" content="如何使用 Istio 去监控被阻止的和透传的外部服务流量。"><meta property="og:url" content="/v1.5/zh/blog/2019/monitoring-external-service-traffic/"><meta property="og:image" content="/v1.5/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.5 / 监控被阻止的和透传的外部服务流量</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.5/blog/feed.xml><link rel=alternate type=application/rss+xml title="Istio News" href=/v1.5/news/feed.xml><link rel=alternate type=application/rss+xml title="Istio Blog and News" href=/v1.5/feed.xml><link rel="shortcut icon" href=/v1.5/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.5/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.5/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.5/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.5/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.5/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.5/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.5/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.5/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.5/favicons/android-192x192.png sizes=192x192><link rel=manifest href=/v1.5/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.5/css/all.css><script src=/v1.5/js/themes_init.min.js></script></head><body class="language-unknown archive-site"><script>const branchName="release-1.5";const docTitle="监控被阻止的和透传的外部服务流量";const iconFile="\/v1.5/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.5/js/all.min.js data-manual defer></script><header><nav><a id=brand href=/v1.5/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.5</span></a><div id=hamburger><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#hamburger"/></svg></div><div id=header-links><a title="了解如何部署、使用和运维 Istio。" href=/v1.5/zh/docs/>文档</a>
|
||
<a class=current title="关于使用 Istio 的博客文章。" href=/v1.5/zh/blog/2020/>博客<i class=dot data-prefix=/blog></i></a>
|
||
<a title="关于 Istio 项目的最新报道。" href=/v1.5/zh/news/>新闻<i class=dot data-prefix=/news></i></a>
|
||
<a title="关于 Istio 的常见问题。" href=/v1.5/zh/faq/>FAQ</a>
|
||
<a title="关于 Istio 项目的说明。" href=/v1.5/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.5/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/blog\/2019\/monitoring-external-service-traffic\/');return false;">当前版本</a>
|
||
<a tabindex=-1 role=menuitem onclick="navigateToUrlOrRoot('https://preliminary.istio.io/blog\/2019\/monitoring-external-service-traffic\/');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.5/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.5/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.5/img/icons.svg#cancel-x"/></svg></button></form></nav></header><div class=banner-container></div><main class=primary><div id=sidebar-container class="sidebar-container sidebar-offcanvas"><nav id=sidebar aria-label="Section Navigation"><div class=directory><div class=card><button class="header dynamic" id=card0 title="2020 年的博客文章。" aria-controls=card0-body><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#blog"/></svg>2020 年的博客文章</button><div class=body aria-labelledby=card0 role=region id=card0-body><ul role=tree aria-expanded=true class=leaf-section aria-labelledby=card0><li role=none><a role=treeitem title="Istio 的扩展中使用 WASM 的前景。 (2020年3月5日)" href=/v1.5/zh/blog/2020/wasm-announce/>重新定义代理的扩展性:Envoy 和 Istio 引入 WebAssembly</a></li><li role=none><a role=treeitem title="Istio 在 2020 年的愿景声明及路线图。 (2020年3月3日)" href=/v1.5/zh/blog/2020/tradewinds-2020/>Istio 2020——为了商用</a></li><li role=none><a role=treeitem title="一种更安全的秘密管理方式。 (2020年2月20日)" href=/v1.5/zh/blog/2020/istio-agent/>移除跨 pod Unix domain socket</a></li><li role=none><a role=treeitem title="为 Istio deployment(cluster)提供自动化 Istio 配置,并让其像单个网格一样工作。 (2020年1月5日)" href=/v1.5/zh/blog/2020/multi-cluster-mesh-automation/>使用 Admiral 管理 Istio 多集群的配置和服务发现</a></li></ul></div></div><div class=card><button class="header dynamic" id=card1 title="2019 年的博客文章。" aria-controls=card1-body><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#blog"/></svg>2019 年的博客文章</button><div class="body default" aria-labelledby=card1 role=region id=card1-body><ul role=tree aria-expanded=true class=leaf-section aria-labelledby=card1><li role=none><a role=treeitem title="一种更安全管理 Istio webhook 的方法。 (2019年11月14日)" href=/v1.5/zh/blog/2019/webhook/>安全管理 Webhook</a></li><li role=none><a role=treeitem title="关于 Istio 基于 operator 的安装和控制平面管理特性的介绍。 (2019年11月14日)" href=/v1.5/zh/blog/2019/introducing-istio-operator/>Istio Operator 简介</a></li><li role=none><a role=treeitem title="Istio v1beta1 授权策略的设计原则、基本概述及迁移操作。 (2019年11月14日)" href=/v1.5/zh/blog/2019/v1beta1-authorization-policy/>Istio v1beta1 授权策略概述</a></li><li role=none><a role=treeitem title="通过分析 Istio 配置来发现潜在问题和一般问题。 (2019年11月14日)" href=/v1.5/zh/blog/2019/introducing-istioctl-analyze/>istioctl analyze 介绍</a></li><li role=none><a role=treeitem title="在 Istio 中配置和管理 DNS 证书。 (2019年11月14日)" href=/v1.5/zh/blog/2019/dns-cert/>DNS 证书管理</a></li><li role=none><a role=treeitem title="正式启用访问 Istio 资源。 (2019年11月14日)" href=/v1.5/zh/blog/2019/announcing-istio-client-go/>Istio client-go 发布公告</a></li><li role=none><a role=treeitem title="把 Istio 入口网关配置为外部服务的代理。 (2019年10月15日)" href=/v1.5/zh/blog/2019/proxy/>把 Istio 作为外部服务的代理</a></li><li role=none><a role=treeitem title="将需要隔离的环境部署到单独的网格中,并通过网格联邦启用网格间通信。 (2019年10月2日)" href=/v1.5/zh/blog/2019/isolated-clusters/>用于隔离和边界保护的多网格部署</a></li><li role=none><span role=treeitem class=current title="如何使用 Istio 去监控被阻止的和透传的外部服务流量。 (2019年9月28日)">监控被阻止的和透传的外部服务流量</span></li><li role=none><a role=treeitem title="本文演示 Mixer 进程外适配器实现 Knative scale-from-zero 逻辑的具体过程。 (2019年9月18日)" href=/v1.5/zh/blog/2019/knative-activator-adapter/>适用于 Knative 的 Mixer 适配器</a></li><li role=none><a role=treeitem title="使用 Istio 实现零代码改动保护多云 Kubernetes 应用。 (2019年9月18日)" href=/v1.5/zh/blog/2019/app-identity-and-access-adapter/>APP 身份和访问适配器</a></li><li role=none><a role=treeitem title="利用 Kubernetes 可信任的 JWT 来更安全地为工作负载实例颁发证书。 (2019年9月10日)" href=/v1.5/zh/blog/2019/trustworthy-jwt-sds/>Istio 1.3 Secret 服务发现的更改</a></li><li role=none><a role=treeitem title="Istio API 的设计原则和这些 API 是如何演变的。 (2019年8月5日)" href=/v1.5/zh/blog/2019/evolving-istios-apis/>Istio API 的演变</a></li><li role=none><a role=treeitem title="管控出口流量的备选方案比较,包括性能因素。 (2019年7月22日)" href=/v1.5/zh/blog/2019/egress-traffic-control-in-istio-part-3/>Istio 中安全管控出口流量,第三部分</a></li><li role=none><a role=treeitem title="使用 Istio 的出口流量管控来阻止相关出口流量攻击。 (2019年7月10日)" href=/v1.5/zh/blog/2019/egress-traffic-control-in-istio-part-2/>Istio 中的安全管控出口流量,第二部分</a></li><li role=none><a role=treeitem title="评估 Istio 数据平面性能的工具和指南。 (2019年7月9日)" href=/v1.5/zh/blog/2019/performance-best-practices/>最佳实践:Service Mesh 基准性能测试</a></li><li role=none><a role=treeitem title="了解如何延长 Istio 自签名根证书的有效期。 (2019年6月7日)" href=/v1.5/zh/blog/2019/root-transition/>延长 Istio 自签名根证书的有效期</a></li><li role=none><a role=treeitem title="涉及出口流量攻击和出口流量管控要求。 (2019年5月22日)" href=/v1.5/zh/blog/2019/egress-traffic-control-in-istio-part-1/>Istio 中的安全管控出口流量,第一部分</a></li><li role=none><a role=treeitem title="Istio 1.1 性能概览。 (2019年3月19日)" href=/v1.5/zh/blog/2019/istio1.1_perf/>为性能而设计的 Istio 1.1</a></li><li role=none><a role=treeitem title="在多集群服务网格环境中配置 Istio 的路由规则。 (2019年2月7日)" href=/v1.5/zh/blog/2019/multicluster-version-routing/>多集群服务网格中的分版本路由</a></li><li role=none><a role=treeitem title="宣布新的博客策略。 (2019年2月5日)" href=/v1.5/zh/blog/2019/sail-the-blog/>博客策略更新!</a></li><li role=none><a role=treeitem title="揭秘 Istio 是如何将其数据平面组件添加到现有 deployment。 (2019年1月31日)" href=/v1.5/zh/blog/2019/data-plane-setup/>揭开 Istio Sidecar 注入模型的神秘面纱</a></li><li role=none><a role=treeitem title="评估加入 Egress gateway 对性能造成的影响。 (2019年1月31日)" href=/v1.5/zh/blog/2019/egress-performance/>Egress gateway 性能测试</a></li><li role=none><a role=treeitem title="使用 AppSwitch 解决应用程序启动顺序和启动延迟。 (2019年1月14日)" href=/v1.5/zh/blog/2019/appswitch/>使用 AppSwitch 进行 Sidestepping 依赖性排序</a></li><li role=none><a role=treeitem title="Istio 有了一个新的论坛。 (2019年1月10日)" href=/v1.5/zh/blog/2019/announcing-discuss.istio.io/>Istio 论坛成立</a></li><li role=none><a role=treeitem title="如何使用 cert-manager 手工部署一个自定义 Ingress 网关。 (2019年1月10日)" href=/v1.5/zh/blog/2019/custom-ingress-gateway/>使用 Cert-Manager 部署一个自定义 Ingress 网关</a></li></ul></div></div><div class=card><button class="header dynamic" id=card2 title="2018 年的博客文章。" aria-controls=card2-body><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#blog"/></svg>2018 年的博客文章</button><div class=body aria-labelledby=card2 role=region id=card2-body><ul role=tree aria-expanded=true class=leaf-section aria-labelledby=card2><li role=none><a role=treeitem title="如何在不部署 Sidecar 代理的情况下使用 Istio 进行流量管理。 (2018年11月21日)" href=/v1.5/zh/blog/2018/incremental-traffic-management/>增量式应用 Istio 第一部分,流量管理</a></li><li role=none><a role=treeitem title="描述了一个基于 Istio 的 Bookinfo 示例的简单场景。 (2018年11月16日)" href=/v1.5/zh/blog/2018/egress-mongo/>使用外部 MongoDB 服务</a></li><li role=none><a role=treeitem title="Istio 在 Twitch 举办了为期一天的直播庆祝 1.0 的发布。 (2018年8月3日)" href=/v1.5/zh/blog/2018/istio-twitch-stream/>Istio 在 Twitch 上全天直播</a></li><li role=none><a role=treeitem title="惠普如何在 Istio 上构建其下一代鞋类个性化平台。 (2018年7月31日)" href=/v1.5/zh/blog/2018/hp/>Istio 是惠普 FitStation 平台的改变者</a></li><li role=none><a role=treeitem title="使用 AppSwitch 自动接入应用并降低延迟。 (2018年7月30日)" href=/v1.5/zh/blog/2018/delayering-istio/>使用 AppSwitch 精简 Istio 层次</a></li><li role=none><a role=treeitem title="描述 Istio 的授权功能以及如何在各种用例中使用它。 (2018年7月20日)" href=/v1.5/zh/blog/2018/istio-authorization/>基于 Istio 授权的 Micro-Segmentation</a></li><li role=none><a role=treeitem title="如何通过 Stackdriver 将 Istio 访问日志导出到 BigQuery、GCS、Pub/Sub 等不同的接收器。 (2018年7月9日)" href=/v1.5/zh/blog/2018/export-logs-through-stackdriver/>通过 Stackdriver 将日志导出到 BigQuery、GCS、Pub/Sub</a></li><li role=none><a role=treeitem title="描述如何配置 Istio 进行 HTTP Egress 流量监控和访问策略。 (2018年6月22日)" href=/v1.5/zh/blog/2018/egress-monitoring-access-control/>HTTP Egress 流量监控和访问策略</a></li><li role=none><a role=treeitem title="Istio v1alpha3 路由 API 介绍, 动机及其设计原则。 (2018年4月25日)" href=/v1.5/zh/blog/2018/v1alpha3-routing/>Istio v1aplha3 路由 API 介绍</a></li><li role=none><a role=treeitem title="描述如何在 AWS 上使用网络负载均衡器配置 Istio Ingress。 (2018年4月20日)" href=/v1.5/zh/blog/2018/aws-nlb/>使用 AWS NLB 配置 Istio Ingress</a></li><li role=none><a role=treeitem title="使用 Kubernetes 命名空间和 RBAC 为 Istio 构建软性多租户环境。 (2018年4月19日)" href=/v1.5/zh/blog/2018/soft-multitenancy/>Istio 的软性多租户支持</a></li><li role=none><a role=treeitem title="介绍更安全,低风险的部署和发布到生产。 (2018年2月8日)" href=/v1.5/zh/blog/2018/traffic-mirroring/>用于在生产环境进行测试的 Istio 流量镜像功能</a></li><li role=none><a role=treeitem title="描述基于 Istio 的 Bookinfo 示例的简单场景。 (2018年2月6日)" href=/v1.5/zh/blog/2018/egress-tcp/>使用外部 TCP 服务</a></li><li role=none><a role=treeitem title="描述基于 Istio Bookinfo 示例的简单场景。 (2018年1月31日)" href=/v1.5/zh/blog/2018/egress-https/>使用外部 Web 服务</a></li></ul></div></div><div class=card><button class="header dynamic" id=card3 title="2017 年的博客文章。" aria-controls=card3-body><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#blog"/></svg>2017 年的博客文章</button><div class=body aria-labelledby=card3 role=region id=card3-body><ul role=tree aria-expanded=true class=leaf-section aria-labelledby=card3><li role=none><a role=treeitem title="提高可用,降低延迟。 (2017年12月7日)" href=/v1.5/zh/blog/2017/mixer-spof-myth/>Mixer 和 SPOF 神话</a></li><li role=none><a role=treeitem title="概要说明 Mixer 的插件架构。 (2017年11月3日)" href=/v1.5/zh/blog/2017/adapter-model/>Mixer 适配器模型</a></li><li role=none><a role=treeitem title="Istio 的策略如何关联 Kubernetes 的网络策略 。 (2017年8月10日)" href=/v1.5/zh/blog/2017/0.1-using-network-policy/>Istio 使用网络策略</a></li><li role=none><a role=treeitem title="使用 Istio 创建自动缩放的金丝雀部署。 (2017年6月14日)" href=/v1.5/zh/blog/2017/0.1-canary/>使用 Istio 进行金丝雀部署</a></li><li role=none><a role=treeitem title="Istio Auth 0.1 公告。 (2017年5月25日)" href=/v1.5/zh/blog/2017/0.1-auth/>使用 Istio 增强端到端安全</a></li></ul></div></div></div></nav></div><div class=article-container><button tabindex=-1 id=sidebar-toggler title=折叠导航栏><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#pull"/></svg></button><nav aria-label=Breadcrumb><ol><li><a href=/v1.5/zh/ title=用于连接、保护、控制和观测服务。>Istio</a></li><li><a href=/v1.5/zh/blog/ title="关于使用 Istio 的博客文章。">博客</a></li><li><a href=/v1.5/zh/blog/2019/ title="2019 年的博客文章。">2019 年的博客文章</a></li><li>监控被阻止的和透传的外部服务流量</li></ol></nav><article aria-labelledby=title><div class=title-area><div style=width:100%><h1 id=title>监控被阻止的和透传的外部服务流量</h1><p class=byline><span>作者</span>
|
||
<span class=attribution>Neeraj Poddar (Aspen Mesh)</span><span> | </span><span><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#calendar"/></svg><span> </span>2019年9月28日</span><span> | </span><span title="574 字"><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#clock"/></svg><span> </span>阅读大约需要 3 分钟</span></p></div></div><nav class=toc-inlined aria-label="Table of Contents"><div><hr><ol><li role=none aria-label=外部和内部服务><a href=#external-and-internal-services>外部和内部服务</a><li role=none aria-label="什么是 BlackHole 和 Passthrough 集群?"><a href=#what-are-black-hole-and-pass-through-clusters>什么是 BlackHole 和 Passthrough 集群?</a><li role=none aria-label=使用增强指标><a href=#using-the-augmented-metrics>使用增强指标</a><ol><li role=none aria-label="PassthroughCluster 指标"><a href=#pass-through-cluster-metrics>PassthroughCluster 指标</a><li role=none aria-label="BlackHoleCluster 指标"><a href=#black-hole-cluster-metrics>BlackHoleCluster 指标</a></ol></li><li role=none aria-label=相关内容><a href=#see-also>相关内容</a></li></ol><hr></div></nav><div><aside class="callout warning"><div class=type><svg class="large-icon"><use xlink:href="/v1.5/img/icons.svg#callout-warning"/></svg></div><div class=content>该博客文章是在 Istio 1.3 的版本下编写的,因此其中某些内容现在可能已过时。</div></aside></div><p>了解,控制和保护外部服务访问权限是你能够从 Istio 这样的服务网格中获得的主要好处之一。
|
||
从安全和操作的角度来看,监控哪些外部服务流量被阻止是非常重要的;因为如果程序试图与不合适的服务进行通信,它们可能会出现错误配置或安全漏洞。
|
||
同样,如果你现在有允许任何外部服务访问的策略,那么你可以根据对流量的监控,逐步地添加明确的 Istio 配置来限制访问并提高集群的安全性。
|
||
在任何情况下,通过遥测了解这种流量都非常有帮助,因为你可以根据它来创建警报和仪表板,并更好地了解安全状况。
|
||
这是 Istio 的生产用户强烈要求的功能,我们很高兴在版本 1.3 中添加了对此功能的支持。</p><p>为了实现此功能,Istio 的<a href=/v1.5/zh/docs/reference/config/policy-and-telemetry/metrics>默认监控指标</a>增加了显式标签,以捕获被阻止和透传的外部服务流量。
|
||
这篇博客将介绍如何使用这些增强指标来监视所有外部服务流量。</p><p>Istio 控制平面使用了预定义集群 BlackHoleCluster 和 Passthrough 来配置 sidecar 代理,它们的作用分别是阻止和通过所有流量。
|
||
为了了解这些集群,让我们先从外部和内部服务在 Istio 服务网格的意义开始。</p><h2 id=external-and-internal-services>外部和内部服务</h2><p>内部服务被定义为平台中的一部分,并被视为在网格中。对于内部服务,默认情况下,Istio 控制平面为 sidecars 提供所有必需的配置。
|
||
例如,在 Kubernetes 集群中,Istio 会为所有 Kubernetes 服务配置 sidecar,以保留所有能够与其他服务通信的服务的默认 Kubernetes 行为。</p><p>外部服务是不属于平台的服务,即不在网格内的服务。
|
||
对于外部服务,Istio 提供了两个选项,一个是阻止所有外部服务访问(通过将 <code>global.outboundTrafficPolicy.mode</code> 设置
|
||
为 <code>REGISTRY_ONLY</code> 启用), 另一个是允许所有对外部服务的访问(通过将 <code>global.outboundTrafficPolicy.mode</code> 设置为 <code>ALLOW_ANY</code> 启用)。
|
||
从 Istio 1.3 开始,此设置的默认选项是允许所有外部服务访问。此选项可以通过<a href=/v1.5/zh/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig-OutboundTrafficPolicy-Mode>网格配置</a>进行配置。</p><p>这就是使用 BlackHole 和 Passthrough 集群的地方。</p><h2 id=what-are-black-hole-and-pass-through-clusters>什么是 BlackHole 和 Passthrough 集群?</h2><ul><li><strong>BlackHoleCluster</strong> - 当将 <code>global.outboundTrafficPolicy.mode</code> 设置为 <code>REGISTRY_ONLY</code> 时,BlackHoleCluster 是
|
||
在 Envoy 配置中创建的虚拟集群。在这种模式下,除非为每个服务显式添加了
|
||
<a href=/v1.5/zh/docs/reference/config/networking/service-entry>service entries</a>,否则
|
||
所有到外部服务的流量都会被阻止。为了实现此目的,
|
||
将使用了 <a href=https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/service_discovery#original-destination>original destination</a> 且在 <code>0.0.0.0:15001</code> 的默认虚拟出站监听器设置为以 BlackHoleCluster 为静态集群的 TCP 代理。
|
||
BlackHoleCluster 的配置如下所示:</li></ul><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"name": "BlackHoleCluster",
|
||
"type": "STATIC",
|
||
"connectTimeout": "10s"
|
||
}
|
||
</code></pre><p>如你所见,这个集群是静态的且没有任何的 endpoints,所以所有的流量都会被丢弃。
|
||
此外,Istio 会为平台服务的每个端口/协议组合创建唯一的监听器,如果对同一端口上的外部服务发出了请求,则监听器将会取代虚拟监听器。
|
||
在这种情况下,Envoy 中每个虚拟路由的路由配置都会被扩展,以添加 BlackHoleCluster,如下所示:</p><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"name": "block_all",
|
||
"domains": [
|
||
"*"
|
||
],
|
||
"routes": [
|
||
{
|
||
"match": {
|
||
"prefix": "/"
|
||
},
|
||
"directResponse": {
|
||
"status": 502
|
||
}
|
||
}
|
||
]
|
||
}
|
||
</code></pre><p>该路由被设置为响应码是 502 的<a href=https://www.envoyproxy.io/docs/envoy/latest/api-v2/api/v2/route/route_components.proto#envoy-api-field-route-route-direct-response>直接响应</a>,这意味着如果没有其他路由匹配,则 Envoy 代理将直接返回 502 HTTP 状态代码。</p><ul><li><strong>PassthroughCluster</strong> - 当将 <code>global.outboundTrafficPolicy.mode</code> 设置为 <code>ALLOW_ANY</code> 时,
|
||
PassthroughCluster 是在 Envoy 配置中创建的虚拟集群。在此模式下,允许流向外部服务的所有流量。
|
||
为了实现此目的,将使用 <code>SO_ORIGINAL_DST</code> 且监听 <code>0.0.0.0:15001</code> 的默认虚拟出站监听器设置为 TCP 代理,并将 PassthroughCluster 作为静态集群。
|
||
PassthroughCluster 的配置如下所示:</li></ul><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"name": "PassthroughCluster",
|
||
"type": "ORIGINAL_DST",
|
||
"connectTimeout": "10s",
|
||
"lbPolicy": "ORIGINAL_DST_LB",
|
||
"circuitBreakers": {
|
||
"thresholds": [
|
||
{
|
||
"maxConnections": 102400,
|
||
"maxRetries": 1024
|
||
}
|
||
]
|
||
}
|
||
}
|
||
</code></pre><p>该集群使用<a href=https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/service_discovery#original-destination>原始目标负载均衡策略</a>,
|
||
该策略将 Envoy 配置为将流量发送到原始目标,即透传。</p><p>与 BlackHoleCluster 类似,对于每个基于端口/协议的监听器,虚拟路由配置都会添加 PassthroughCluster 以作为默认路由:</p><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"name": "allow_any",
|
||
"domains": [
|
||
"*"
|
||
],
|
||
"routes": [
|
||
{
|
||
"match": {
|
||
"prefix": "/"
|
||
},
|
||
"route": {
|
||
"cluster": "PassthroughCluster"
|
||
}
|
||
}
|
||
]
|
||
}
|
||
</code></pre><p>在 Istio 1.3 之前,没有流量报告,即使流量报告到达这些群集,也没有报告明确的标签设置,从而导致流经网格的流量缺乏可见性。</p><p>下一节将介绍如何利用此增强功能,因为发出的指标和标签取决于是否命中了虚拟出站或显式端口/协议监听器。</p><h2 id=using-the-augmented-metrics>使用增强指标</h2><p>要捕获两种情况( BlackHole 或 Passthrough)中的所有外部服务流量,你将需要监控 <code>istio_requests_total</code> 和 <code>istio_tcp_connections_closed_total</code> 指标。
|
||
根据 Envoy 监听器的类型,即被调用的 TCP 代理或 HTTP 代理,将增加相应的指标。</p><p>此外,如果使用 TCP 代理监听器以查看被 BlackHole 阻止或被 Passthrough 透传的外部服务的 IP 地址,
|
||
则需要将 <code>destination_ip</code> 标签添加到 <code>istio_tcp_connections_closed_total</code> 指标。
|
||
在这种情况下,不会捕获外部服务的主机名。默认情况下不添加此标签,但是可以通过扩展 Istio 配置以生成属性和 Prometheus 处理程序,轻松地添加此标签。
|
||
如果你有许多服务的 IP 地址不稳定,则应注意时序的基数爆炸。</p><h3 id=pass-through-cluster-metrics>PassthroughCluster 指标</h3><p>本节将说明基于被 Envoy 调用的监听器类型的指标和发出的标签。</p><ul><li>HTTP 代理监听器: 当外部服务的端口与集群中定义的服务端口之一相同时,就会触发这种情况。
|
||
在这种情况下,当命中 PassthroughCluster 时,指标 <code>istio_requests_total</code> 会增加类似以下内容:</li></ul><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"metric": {
|
||
"__name__": "istio_requests_total",
|
||
"connection_security_policy": "unknown",
|
||
"destination_app": "unknown",
|
||
"destination_principal": "unknown",
|
||
"destination_service": "httpbin.org",
|
||
"destination_service_name": "PassthroughCluster",
|
||
"destination_service_namespace": "unknown",
|
||
"destination_version": "unknown",
|
||
"destination_workload": "unknown",
|
||
"destination_workload_namespace": "unknown",
|
||
"instance": "100.96.2.183:42422",
|
||
"job": "istio-mesh",
|
||
"permissive_response_code": "none",
|
||
"permissive_response_policyid": "none",
|
||
"reporter": "source",
|
||
"request_protocol": "http",
|
||
"response_code": "200",
|
||
"response_flags": "-",
|
||
"source_app": "sleep",
|
||
"source_principal": "unknown",
|
||
"source_version": "unknown",
|
||
"source_workload": "sleep",
|
||
"source_workload_namespace": "default"
|
||
},
|
||
"value": [
|
||
1567033080.282,
|
||
"1"
|
||
]
|
||
}
|
||
</code></pre><p>请注意,标签 <code>destination_service_name</code> 设置为 PassthroughCluster,以表明已命中该集群,而 <code>destination_service</code> 设置为外部服务的主机。</p><ul><li>TCP 代理虚拟监听器 - 如果外部服务端口未映射到集群中任何基于 HTTP 的服务端口,则将调用此监听器,
|
||
并且会增加指标 <code>istio_tcp_connections_closed_total</code>:</li></ul><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"status": "success",
|
||
"data": {
|
||
"resultType": "vector",
|
||
"result": [
|
||
{
|
||
"metric": {
|
||
"__name__": "istio_tcp_connections_closed_total",
|
||
"connection_security_policy": "unknown",
|
||
"destination_app": "unknown",
|
||
"destination_ip": "52.22.188.80",
|
||
"destination_principal": "unknown",
|
||
"destination_service": "unknown",
|
||
"destination_service_name": "PassthroughCluster",
|
||
"destination_service_namespace": "unknown",
|
||
"destination_version": "unknown",
|
||
"destination_workload": "unknown",
|
||
"destination_workload_namespace": "unknown",
|
||
"instance": "100.96.2.183:42422",
|
||
"job": "istio-mesh",
|
||
"reporter": "source",
|
||
"response_flags": "-",
|
||
"source_app": "sleep",
|
||
"source_principal": "unknown",
|
||
"source_version": "unknown",
|
||
"source_workload": "sleep",
|
||
"source_workload_namespace": "default"
|
||
},
|
||
"value": [
|
||
1567033761.879,
|
||
"1"
|
||
]
|
||
}
|
||
]
|
||
}
|
||
}
|
||
</code></pre><p>在这种情况下,<code>destination_service_name</code> 设置为 PassthroughCluster,而 <code>destination_ip</code> 设置为外部服务的 IP 地址。
|
||
标签 <code>destination_ip</code> 可用于执行反向 DNS 查找并获取外部服务的主机名。
|
||
在通过该集群时,还将更新其他与 TCP 相关的指标,例如 <code>istio_tcp_connections_opened_total</code>,
|
||
<code>istio_tcp_received_bytes_total</code> 和 <code>istio_tcp_sent_bytes_total</code>。</p><h3 id=black-hole-cluster-metrics>BlackHoleCluster 指标</h3><p>与 PassthroughCluster 类似,本节将说明基于被 Envoy 调用的监听器类型的指标和发出的标签。</p><ul><li>HTTP 代理监听器: 这种情况发生在外部服务的端口与群集中定义的服务端口之一相同时。
|
||
在这种情况下,如果命中了 BlackHoleCluster,标签 <code>istio_requests_total</code> 会增加类似以下的内容:</li></ul><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"metric": {
|
||
"__name__": "istio_requests_total",
|
||
"connection_security_policy": "unknown",
|
||
"destination_app": "unknown",
|
||
"destination_principal": "unknown",
|
||
"destination_service": "httpbin.org",
|
||
"destination_service_name": "BlackHoleCluster",
|
||
"destination_service_namespace": "unknown",
|
||
"destination_version": "unknown",
|
||
"destination_workload": "unknown",
|
||
"destination_workload_namespace": "unknown",
|
||
"instance": "100.96.2.183:42422",
|
||
"job": "istio-mesh",
|
||
"permissive_response_code": "none",
|
||
"permissive_response_policyid": "none",
|
||
"reporter": "source",
|
||
"request_protocol": "http",
|
||
"response_code": "502",
|
||
"response_flags": "-",
|
||
"source_app": "sleep",
|
||
"source_principal": "unknown",
|
||
"source_version": "unknown",
|
||
"source_workload": "sleep",
|
||
"source_workload_namespace": "default"
|
||
},
|
||
"value": [
|
||
1567034251.717,
|
||
"1"
|
||
]
|
||
}
|
||
</code></pre><p>请注意,标签 <code>destination_service_name</code> 设置为 BlackHoleCluster,而 <code>destination_service</code> 设置为外部服务的主机名。
|
||
在这种情况下,响应码应始终为 502。</p><ul><li>TCP 代理虚拟监听器 - 如果外部服务端口未映射到集群中任何基于 HTTP 的服务端口,则会调用此监听器,
|
||
并增加指标 <code>istio_tcp_connections_closed_total</code>:</li></ul><pre><code class=language-json data-expandlinks=true data-repo=istio>{
|
||
"metric": {
|
||
"__name__": "istio_tcp_connections_closed_total",
|
||
"connection_security_policy": "unknown",
|
||
"destination_app": "unknown",
|
||
"destination_ip": "52.22.188.80",
|
||
"destination_principal": "unknown",
|
||
"destination_service": "unknown",
|
||
"destination_service_name": "BlackHoleCluster",
|
||
"destination_service_namespace": "unknown",
|
||
"destination_version": "unknown",
|
||
"destination_workload": "unknown",
|
||
"destination_workload_namespace": "unknown",
|
||
"instance": "100.96.2.183:42422",
|
||
"job": "istio-mesh",
|
||
"reporter": "source",
|
||
"response_flags": "-",
|
||
"source_app": "sleep",
|
||
"source_principal": "unknown",
|
||
"source_version": "unknown",
|
||
"source_workload": "sleep",
|
||
"source_workload_namespace": "default"
|
||
},
|
||
"value": [
|
||
1567034481.03,
|
||
"1"
|
||
]
|
||
}
|
||
</code></pre><p>请注意,标签 <code>destination_ip</code> 表示外部服务的 IP 地址,而 <code>destination_service_name</code> 设置为 BlackHoleCluster,表示此流量已被网格阻止。
|
||
有趣的是,对于 BlackHole 集群,由于未建立任何连接,因此其他与 TCP 相关的指标(例如 <code>istio_tcp_connections_opened_total</code>)不会增加。</p><p>监控这些指标可以帮助管理员轻松了解其集群中的应用程序接收的所有外部服务。</p><nav id=see-also><h2>相关内容</h2><div class=see-also><div class=entry><p class=link><a data-skipendnotes=true href=/v1.5/zh/blog/2018/egress-monitoring-access-control/>HTTP Egress 流量监控和访问策略</a></p><p class=desc>描述如何配置 Istio 进行 HTTP Egress 流量监控和访问策略。</p></div></div></nav></article><nav class=pagenav><div class=left><a title=将需要隔离的环境部署到单独的网格中,并通过网格联邦启用网格间通信。 href=/v1.5/zh/blog/2019/isolated-clusters/><svg class="icon"><use xlink:href="/v1.5/img/icons.svg#left-arrow"/></svg>用于隔离和边界保护的多网格部署</a></div><div class=right><a title="使用 Istio 实现零代码改动保护多云 Kubernetes 应用。" href=/v1.5/zh/blog/2019/app-identity-and-access-adapter/>APP 身份和访问适配器<svg class="icon"><use xlink:href="/v1.5/img/icons.svg#right-arrow"/></svg></a></div></nav><div id=feedback><div id=feedback-initial>这些信息有用吗?<br><button class="btn feedback" onclick="sendFeedback('zh',1)">是的</button>
|
||
<button class="btn feedback" onclick="sendFeedback('zh',0)">没有</button></div><div id=feedback-comment>Do you have any suggestions for improvement?<br><br><input id=feedback-textbox type=text placeholder="Help us improve..." data-lang=zh></div><div id=feedback-thankyou>Thanks for your feedback!</div></div><div id=endnotes-container aria-hidden=true><h2>链接</h2><ol id=endnotes></ol></div></div><div class=toc-container><nav class=toc aria-label="Table of Contents"><div id=toc><ol><li role=none aria-label=外部和内部服务><a href=#external-and-internal-services>外部和内部服务</a><li role=none aria-label="什么是 BlackHole 和 Passthrough 集群?"><a href=#what-are-black-hole-and-pass-through-clusters>什么是 BlackHole 和 Passthrough 集群?</a><li role=none aria-label=使用增强指标><a href=#using-the-augmented-metrics>使用增强指标</a><ol><li role=none aria-label="PassthroughCluster 指标"><a href=#pass-through-cluster-metrics>PassthroughCluster 指标</a><li role=none aria-label="BlackHoleCluster 指标"><a href=#black-hole-cluster-metrics>BlackHoleCluster 指标</a></ol></li><li role=none aria-label=相关内容><a href=#see-also>相关内容</a></li></ol></div></nav></div></main><footer><div class=user-links><a class=channel title="立刻下载 Istio 1.5.4" href=/v1.5/docs/setup/getting-started/#download aria-label="Download Istio"><span>download</span><svg class="icon"><use xlink:href="/v1.5/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.5/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.5/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.5/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.5/img/icons.svg#twitter"/></svg></a><div class=tag>对于用户</div></div><div class=info><p class=copyright>中文内容由 ServiceMesher 社区维护,部分文档可能稍微滞后于英文版本,同步工作持续进行中<br>Istio 归档
|
||
1.5.4<br>© 2020 Istio Authors, <a href=https://policies.google.com/privacy>隐私政策</a><br>归档于 2020年5月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.5/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.5/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.5/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.5/img/icons.svg#top"/></svg></button></div></body></html> |