istio.io/archive/v1.1/zh/docs/examples/advanced-gateways/egress-gateway/index.html

435 lines
78 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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="配置 Egress gateway"><meta name=description content="描述如何通过专用网关服务将流量定向到外部服务来配置 Istio。"><meta name=keywords content=microservices,services,mesh,traffic-management,egress><meta property=og:title content="配置 Egress gateway"><meta property=og:type content=website><meta property=og:description content="描述如何通过专用网关服务将流量定向到外部服务来配置 Istio。"><meta property=og:url content=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway/><meta property=og:image content=/v1.1/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.1 / 配置 Egress gateway</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.1/feed.xml><link rel="shortcut icon" href=/v1.1/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.1/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.1/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.1/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.1/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.1/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.1/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.1/favicons/android-96x96.png sizes=96xW96><link rel=icon type=image/png href=/v1.1/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.1/favicons/android-192x192.png sizes=192x192><link rel=manifest href=/v1.1/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.1/css/all.css></head><body class="language-unknown archive-site"><script src=/v1.1/js/themes_init.min.js></script><script>const branchName="release-1.1";const docTitle="配置 Egress gateway";const iconFile="\/v1.1/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.1/js/all.min.js data-manual defer></script><header><nav><a id=brand href=/v1.1/zh/><span class=logo><svg viewBox="0 0 300 300"><circle cx="150" cy="150" r="146" stroke-width="2" /><path d="M65 240H225L125 270z"/><path d="M65 230l60-10V110z"/><path d="M135 220l90 10L135 30z"/></svg></span><span class=name>Istioldie 1.1</span></a><div id=hamburger><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#hamburger"/></svg></div><div id=header-links><span title="了解如何部署、使用和运维 Istio。">文档</span>
<a title="关于使用 Istio 的博客文章。" href=/v1.1/zh/blog/2019/root-transition/>博客</a>
<a title="一堆帮助您部署、配置和使用 Istio 的资源。" href=/v1.1/zh/help/>帮助</a>
<a title=关于Istio的说明。 href=/v1.1/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.1/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/docs\/examples\/advanced-gateways\/egress-gateway\/');return false;">当前版本</a>
<a tabindex=-1 role=menuitem onclick="navigateToUrlOrRoot('https://preliminary.istio.io/docs\/examples\/advanced-gateways\/egress-gateway\/');return false;">下个版本</a>
<a tabindex=-1 role=menuitem href=https://archive.istio.io>旧版本</a></div></div><button id=search-show title=搜索istio.io aria-label=Search><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#magnifier"/></svg></button></div><form id=search-form name=cse role=search><input type=hidden name=cx value=013699703217164175118: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.1/search.html>
<input id=search-textbox class=form-control name=q type=search aria-label=搜索istio.io>
<button id=search-close title="Cancel search" type=reset aria-label="Cancel search"><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#cancel-x"/></svg></button></form></nav></header><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=card28 title="一些概念,理解它们有助于您更好地了解 Istio 系统的不同部分及其使用的抽象。" aria-controls=card28-body><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#concepts"/></svg>概念</button><div class=body aria-labelledby=card28 role=region id=card28-body><ul role=tree aria-expanded=true class=leaf-section aria-labelledby=card28><li role=none><a role=treeitem title="介绍 Istio 及其要解决的问题、顶层架构和设计目标。" href=/v1.1/zh/docs/concepts/what-is-istio/>Istio 是什么?</a></li><li role=none><a role=treeitem title="介绍 Istio 中关于流量路由与控制的各项功能。" href=/v1.1/zh/docs/concepts/traffic-management/>流量管理</a></li><li role=none><a role=treeitem title="描述 Istio 的授权与鉴权功能。" href=/v1.1/zh/docs/concepts/security/>安全</a></li><li role=none><a role=treeitem title=描述策略实施和遥测机制。 href=/v1.1/zh/docs/concepts/policies-and-telemetry/>策略与遥测</a></li><li role=none><a role=treeitem title="介绍 Istio 组件的性能与可伸缩性。" href=/v1.1/zh/docs/concepts/performance-and-scalability/>性能与可伸缩性</a></li><li role=none><a role=treeitem title=描述如何配置服务网格以包含来自多个集群的服务。 href=/v1.1/zh/docs/concepts/multicluster-deployments/>多集群部署</a></li></ul></div></div><div class=card><button class="header dynamic" id=card41 title="在不同的环境下(例如 Kubernetes、Consul 等)如何部署和升级 Istio。" aria-controls=card41-body><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#setup"/></svg>安装</button><div class=body aria-labelledby=card41 role=region id=card41-body><ul role=tree aria-expanded=true aria-labelledby=card41><li role=treeitem aria-label=Kubernetes><button aria-hidden=true></button><a title="关于如何在 Kubernetes 集群中安装 Istio 控制平面和添加虚拟机到 mesh 中的说明。" href=/v1.1/zh/docs/setup/kubernetes/>Kubernetes</a><ul role=group aria-expanded=false><li role=none><a role=treeitem title="关于 Istio 发布包下载过程的说明。" href=/v1.1/zh/docs/setup/kubernetes/download/>下载 Istio 发布包</a></li><li role=treeitem aria-label=准备><button aria-hidden=true></button><a title="为 Istio 做准备。" href=/v1.1/zh/docs/setup/kubernetes/prepare/>准备</a><ul role=group aria-expanded=false><li role=treeitem aria-label=平台搭建><button aria-hidden=true></button><a title="在安装 Istio 前,如何准备各种 Kubernetes 平台。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/>平台搭建</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="为 Istio 设置阿里云 Kubernetes 集群的说明。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/alicloud/>阿里云</a></li><li role=none><a role=treeitem title="对 Azure 集群进行配置以便安装运行 Istio。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/azure/>Azure</a></li><li role=none><a role=treeitem title="使用桌面版 Docker 安装 Istio 的说明。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/docker/>桌面版 Docker</a></li><li role=none><a role=treeitem title="对 Google Kubernetes EngineGKE集群进行配置以便安装运行 Istio。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/gke/>Google Kubernetes Engine</a></li><li role=none><a role=treeitem title="为 IBM Cloud 集群设置 Istio 的说明。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/ibm/>IBM Cloud</a></li><li role=none><a role=treeitem title="对 Minikube 集群进行配置以便安装运行 Istio。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/minikube/>Minikube</a></li><li role=none><a role=treeitem title="对 OpenShift 集群进行配置以便安装运行 Istio。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/openshift/>OpenShift</a></li><li role=none><a role=treeitem title="为 Istio 对 OKE 集群环境进行配置。" href=/v1.1/zh/docs/setup/kubernetes/prepare/platform-setup/oci/>Oracle Cloud Infrastructure</a></li></ul></li></ul></li><li role=treeitem aria-label=安装方案><button aria-hidden=true></button><a title=选择最适合您需求和平台的方案。 href=/v1.1/zh/docs/setup/kubernetes/install/>安装方案</a><ul role=group aria-expanded=false><li role=none><a role=treeitem title="在 Kubernetes 集群中快速安装 Istio 服务网格的说明。" href=/v1.1/zh/docs/setup/kubernetes/install/kubernetes/>在 Kubernetes 中快速开始</a></li><li role=none><a role=treeitem title="使用内含的 Helm chart 安装 Istio。" href=/v1.1/zh/docs/setup/kubernetes/install/helm/>使用 Helm 进行安装</a></li><li role=treeitem aria-label=多集群安装><button aria-hidden=true></button><a title="配置跨越多个 Kubernetes 集群的 Istio 服务网格。" href=/v1.1/zh/docs/setup/kubernetes/install/multicluster/>多集群安装</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="使用 Istio Gateway 跨越多个 Kubernetes 集群安装 Istio 网格以访问远程 pod。" href=/v1.1/zh/docs/setup/kubernetes/install/multicluster/gateways/>Gateway 连接</a></li><li role=none><a role=treeitem title="通过直连远程 pods 实现多 Kubernetes 集群安装 Istio 网格。" href=/v1.1/zh/docs/setup/kubernetes/install/multicluster/vpn/>VPN 连接</a></li></ul></li><li role=treeitem aria-label=特定平台安装说明><button aria-hidden=true></button><a title="支持的 Kubernetes 平台的额外安装流程。" href=/v1.1/zh/docs/setup/kubernetes/install/platform/>特定平台安装说明</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="如何使用阿里云 Kubernetes 容器服务快速安装 Istio。" href=/v1.1/zh/docs/setup/kubernetes/install/platform/alicloud/>阿里云</a></li><li role=none><a role=treeitem title="在 Google Kubernetes Engine (GKE) 上快速搭建 Istio 服务。" href=/v1.1/zh/docs/setup/kubernetes/install/platform/gke/>Google Kubernetes Engine</a></li><li role=none><a role=treeitem title="如何使用 IBM 公有云或 IBM 私有云快速安装 Istio。" href=/v1.1/zh/docs/setup/kubernetes/install/platform/ibm/>IBM Cloud</a></li></ul></li></ul></li><li role=treeitem aria-label=升级><button aria-hidden=true></button><a title="升级 Istio 的相关信息。" href=/v1.1/zh/docs/setup/kubernetes/upgrade/>升级</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="在升级到 Istio 1.1 之前,运维人员必须了解的重要更改。" href=/v1.1/zh/docs/setup/kubernetes/upgrade/notice/>1.1 升级通知</a></li><li role=none><a role=treeitem title="演示如何独立升级 Istio 控制平面和数据平面。" href=/v1.1/zh/docs/setup/kubernetes/upgrade/steps/>升级步骤</a></li></ul></li><li role=treeitem aria-label=更多指南><button aria-hidden=true></button><a title=有关其他设置任务的更多信息。 href=/v1.1/zh/docs/setup/kubernetes/additional-setup/>更多指南</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="Istio 内置的安装配置文件介绍。" href=/v1.1/zh/docs/setup/kubernetes/additional-setup/config-profiles/>安装配置</a></li><li role=none><a role=treeitem title="介绍两种将 Istio sidecar 注入应用 Pod 的方法:使用 Sidecar 注入 Webhook 自动完成,或使用 istioctl 客户端工具手工完成。" href=/v1.1/zh/docs/setup/kubernetes/additional-setup/sidecar-injection/>注入 Istio sidecar</a></li><li role=none><a role=treeitem title="这里讲述了 Istio 对 Kubernetes 中 Pod 和服务的要求。" href=/v1.1/zh/docs/setup/kubernetes/additional-setup/requirements/>Istio 对 Pod 和服务的要求</a></li><li role=none><a role=treeitem title="Istio CNI 插件的安装和使用 Istio该插件让运维人员可以用较低的权限来完成网格服务的部署工作。" href=/v1.1/zh/docs/setup/kubernetes/additional-setup/cni/>Istio CNI 插件的安装和使用 Istio</a></li><li role=none><a role=treeitem title="部署在 Kubernetes 之中的 Istio 服务网格,将虚拟机和物理机集成进入到服务网格的方法。" href=/v1.1/zh/docs/setup/kubernetes/additional-setup/mesh-expansion/>网格扩展</a></li></ul></li></ul></li><li role=treeitem aria-label="Nomad &amp; Consul"><button aria-hidden=true></button><a title="基于 Consul 和 Nomad 安装 Istio 控制平面。" href=/v1.1/zh/docs/setup/consul/>Nomad &amp; Consul</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="通过 Docker Compose 快速安装 Istio service mesh。" href=/v1.1/zh/docs/setup/consul/quick-start/>通过 Docker 快速安装</a></li><li role=none><a role=treeitem title="基于 Consul 和 Nomad 安装 Istio 控制平面。" href=/v1.1/zh/docs/setup/consul/install/>安装</a></li></ul></li></ul></div></div><div class=card><button class="header dynamic" id=card49 title="如何用 Istio 系统实现特定目标的行为。" aria-controls=card49-body><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#tasks"/></svg>任务</button><div class=body aria-labelledby=card49 role=region id=card49-body><ul role=tree aria-expanded=true aria-labelledby=card49><li role=treeitem aria-label=流量管理><button aria-hidden=true></button><a title="演示 Istio 流量路由功能的任务。" href=/v1.1/zh/docs/tasks/traffic-management/>流量管理</a><ul role=group aria-expanded=false><li role=none><a role=treeitem title=此任务将说明如何将请求动态路由到多个版本的微服务。 href=/v1.1/zh/docs/tasks/traffic-management/request-routing/>配置请求路由</a></li><li role=none><a role=treeitem title=此任务说明如何注入延迟并测试应用程序的弹性。 href=/v1.1/zh/docs/tasks/traffic-management/fault-injection/>故障注入</a></li><li role=none><a role=treeitem title=向您展示如何将流量从旧版本迁移到新版本的服务。 href=/v1.1/zh/docs/tasks/traffic-management/traffic-shifting/>流量转移</a></li><li role=none><a role=treeitem title="展示如何将一个 TCP 服务的流量从老版本迁移到新版本。" href=/v1.1/zh/docs/tasks/traffic-management/tcp-traffic-shifting/>TCP 流量转移</a></li><li role=none><a role=treeitem title="本任务用于示范如何使用 Istio 在 Envoy 中设置请求超时。" href=/v1.1/zh/docs/tasks/traffic-management/request-timeouts/>设置请求超时</a></li><li role=none><a role=treeitem title="介绍在服务网格 Istio 中如何配置外部公开服务。" href=/v1.1/zh/docs/tasks/traffic-management/ingress/>控制 Ingress 流量</a></li><li role=treeitem aria-label="加密 Ingress Gateway"><button aria-hidden=true></button><a title="使用多种方法为 Gateway 控制器提供加密支持。" href=/v1.1/zh/docs/tasks/traffic-management/secure-ingress/>加密 Ingress Gateway</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="如何配置 Istio借助 SDSSecret 发现服务),使用 TLS 或双向 TLS 将服务开放到网格之外。" href=/v1.1/zh/docs/tasks/traffic-management/secure-ingress/sds/>使用 SDS 为 Gateway 提供 HTTPS 加密支持</a></li></ul></li><li role=none><a role=treeitem title="在 Istio 中配置从网格内访问外部服务的流量路由。" href=/v1.1/zh/docs/tasks/traffic-management/egress/>控制 Egress 流量</a></li><li role=none><a role=treeitem title=用连接、请求以及外部检测来进行熔断配置的过程。 href=/v1.1/zh/docs/tasks/traffic-management/circuit-breaking/>熔断</a></li><li role=none><a role=treeitem title="此任务演示了 Istio 的流量镜像功能。" href=/v1.1/zh/docs/tasks/traffic-management/mirroring/>镜像</a></li></ul></li><li role=treeitem aria-label=安全><button aria-hidden=true></button><a title=演示对服务网格进行安全加固的方法。 href=/v1.1/zh/docs/tasks/security/>安全</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="展示为 HTTP 服务设置基于角色的访问控制方法。" href=/v1.1/zh/docs/tasks/security/authz-http/>HTTP 服务的访问控制</a></li><li role=none><a role=treeitem title="整合 Vault CA 到 Istio 中为双向 TLS 提供 支持。" href=/v1.1/zh/docs/tasks/security/vault-ca/>Istio Vault CA 集成</a></li><li role=none><a role=treeitem title="有关如何在 Istio 中配置基于组的授权和配置列表类型声明的授权的教程。" href=/v1.1/zh/docs/tasks/security/rbac-groups/>基于组和列表类型声明的授权</a></li><li role=none><a role=treeitem title="介绍如何使用 Istio 认证策略设置双向 TLS 和基本的终端用户认证。" href=/v1.1/zh/docs/tasks/security/authn-policy/>基础认证策略</a></li><li role=none><a role=treeitem title="对 Istio 的自动双向 TLS 认证功能进行体验和测试。" href=/v1.1/zh/docs/tasks/security/mutual-tls/>深入了解双向 TLS</a></li><li role=none><a role=treeitem title=展示宽容模式的的鉴权过程。 href=/v1.1/zh/docs/tasks/security/authz-permissive/>鉴权过程中的宽容模式</a></li><li role=none><a role=treeitem title="展示如何为 TCP 服务设置基于角色的访问控制。" href=/v1.1/zh/docs/tasks/security/authz-tcp/>TCP 服务的访问控制</a></li><li role=none><a role=treeitem title=展示如何在服务网格中进行基于角色的访问控制。 href=/v1.1/zh/docs/tasks/security/role-based-access-control/>基于角色的访问控制</a></li><li role=none><a role=treeitem title="运维人员如何使用现有根证书配置 Citadel 进行证书以及密钥的签发。" href=/v1.1/zh/docs/tasks/security/plugin-ca-cert/>插入外部 CA 密钥和证书</a></li><li role=none><a role=treeitem title="如何在 Kubernetes 中启用 Citadel 的健康检查。" href=/v1.1/zh/docs/tasks/security/health-check/>Citadel 的健康检查</a></li><li role=none><a role=treeitem title="展示启用 SDS 来为 Istio 提供身份服务的过程。" href=/v1.1/zh/docs/tasks/security/auth-sds/>通过 SDS 提供身份服务</a></li><li role=none><a role=treeitem title="如何渐进式的为现有 Istio 服务添加双向 TLS 支持。" href=/v1.1/zh/docs/tasks/security/mtls-migration/>双向 TLS 的迁移</a></li><li role=none><a role=treeitem title="展示如何在 HTTPS 服务上启用双向 TLS。" href=/v1.1/zh/docs/tasks/security/https-overlay/>通过 HTTPS 进行双向 TLS</a></li></ul></li><li role=treeitem aria-label=策略><button aria-hidden=true></button><a title=演示策略实施功能。 href=/v1.1/zh/docs/tasks/policy-enforcement/>策略</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="本任务讲解如何启用 Istio 策略检查功能。" href=/v1.1/zh/docs/tasks/policy-enforcement/enabling-policy/>启用策略检查</a></li><li role=none><a role=treeitem title="这一任务展示了如何使用 Istio 动态的对服务通信进行速率限制。" href=/v1.1/zh/docs/tasks/policy-enforcement/rate-limiting/>启用速率限制</a></li><li role=none><a role=treeitem title="展示使用简单的 Denier 适配器或黑白名单对服务进行访问控制的方法。" href=/v1.1/zh/docs/tasks/policy-enforcement/denial-and-list/>Denier 适配器以及黑白名单</a></li><li role=none><a role=treeitem title="显示如何使用策略适配器修改请求 header 和路由。" href=/v1.1/zh/docs/tasks/policy-enforcement/control-headers/>控制 header 和路由</a></li></ul></li><li role=treeitem aria-label=遥测><button aria-hidden=true></button><a title=演示从服务网格收集遥测信息的方法。 href=/v1.1/zh/docs/tasks/telemetry/>遥测</a><ul role=group aria-expanded=false><li role=treeitem aria-label=指标度量><button aria-hidden=true></button><a title="演示 Istio 网格指标度量的配置、收集和处理。" href=/v1.1/zh/docs/tasks/telemetry/metrics/>指标度量</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="这一任务讲述如何配置 Istio进行指标和日志的收集工作。" href=/v1.1/zh/docs/tasks/telemetry/metrics/collecting-metrics/>收集指标和日志</a></li><li role=none><a role=treeitem title="本任务展示了如何配置 Istio 进行 TCP 服务的指标收集。" href=/v1.1/zh/docs/tasks/telemetry/metrics/tcp-metrics/>获取 TCP 服务指标</a></li><li role=none><a role=treeitem title="此任务说明如何使用 Prometheus 查询 Istio 指标。" href=/v1.1/zh/docs/tasks/telemetry/metrics/querying-metrics/>查询 Prometheus 的指标</a></li><li role=none><a role=treeitem title="这个任务向您展示了如何设置和使用 Istio 仪表盘来监视网格流量。" href=/v1.1/zh/docs/tasks/telemetry/metrics/using-istio-dashboard/>使用 Grafana 可视化指标度量</a></li></ul></li><li role=treeitem aria-label=日志><button aria-hidden=true></button><a title="演示 Istio 网格日志的配置、收集和处理。" href=/v1.1/zh/docs/tasks/telemetry/logs/>日志</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="这一任务讲述如何配置 Istio进行日志的收集工作。" href=/v1.1/zh/docs/tasks/telemetry/logs/collecting-logs/>收集日志</a></li><li role=none><a role=treeitem title="此任务向您展示如何配置 Envoy 代理将访问日志打印到其标准输出。" href=/v1.1/zh/docs/tasks/telemetry/logs/access-log/>获取 Envoy 访问日志</a></li><li role=none><a role=treeitem title="此任务说明如何配置 Istio 以将日志输出到 Fluentd 守护程序。" href=/v1.1/zh/docs/tasks/telemetry/logs/fluentd/>使用 Fluentd 记录日志</a></li></ul></li><li role=treeitem aria-label=分布式追踪><button aria-hidden=true></button><a title="该任务展示了如何为启用了 Istio 支持的应用进行追踪。" href=/v1.1/zh/docs/tasks/telemetry/distributed-tracing/>分布式追踪</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="Istio 分布式追踪概述。" href=/v1.1/zh/docs/tasks/telemetry/distributed-tracing/overview/>概述</a></li><li role=none><a role=treeitem title="了解如何配置代理以向 Jaeger 发送追踪请求。" href=/v1.1/zh/docs/tasks/telemetry/distributed-tracing/jaeger/>Jaeger</a></li><li role=none><a role=treeitem title="了解如何配置代理以向 Zipkin 发送追踪请求。" href=/v1.1/zh/docs/tasks/telemetry/distributed-tracing/zipkin/>Zipkin</a></li><li role=none><a role=treeitem title="如何配置代理以发送请求至 LightStep [𝑥]PM." href=/v1.1/zh/docs/tasks/telemetry/distributed-tracing/lightstep/>使用 LightStep [𝑥]PM 进行分布式追踪</a></li></ul></li><li role=none><a role=treeitem title="本任务展示了在 Istio 网格中对服务进行可视化的过程。" href=/v1.1/zh/docs/tasks/telemetry/kiali/>网格可视化</a></li><li role=none><a role=treeitem title="本任务展示了为 Istio 遥测插件配置外部访问的过程。" href=/v1.1/zh/docs/tasks/telemetry/gateways/>遥测插件的远程访问</a></li></ul></li></ul></div></div><div class=card><button class="header dynamic" id=card84 title="这里包括多个可供 Istio 使用的可完整工作的示例,你可以用来亲自部署和体验这些示例。" aria-controls=card84-body><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#examples"/></svg>示例</button><div class="body default" aria-labelledby=card84 role=region id=card84-body><ul role=tree aria-expanded=true aria-labelledby=card84><li role=none><a role=treeitem title="部署一个用于演示多种 Istio 特性的应用,由四个单独的微服务构成。" href=/v1.1/zh/docs/examples/bookinfo/>Bookinfo 应用</a></li><li role=none><a role=treeitem title="如何在 Istio 服务网格中使用多种流量管理功能。" href=/v1.1/zh/docs/examples/intelligent-routing/>智能路由</a></li><li role=none><a role=treeitem title="演示如何使用 Istio Mixer 和 Istio sidecar 获取指标和日志,并在不同的服务间进行追踪。" href=/v1.1/zh/docs/examples/telemetry/>深入遥测</a></li><li role=none><a role=treeitem title="说明如何在谷歌云 Endpoints 服务中手动整合 Istio。" href=/v1.1/zh/docs/examples/endpoints/>在谷歌云 Endpoints 服务中安装 Istio</a></li><li role=none><a role=treeitem title="在单一服务网格中,如何使用 Istio 对 Kubernetes 集群以及虚拟机进行控制。" href=/v1.1/zh/docs/examples/integrating-vms/>虚拟机集成</a></li><li role=treeitem aria-label=边缘流量控制><button class=show aria-hidden=true></button><a title="用于管理 Istio 服务网格的边缘流量(即 Ingress 和 Egress 流量)的各种高级示例。" href=/v1.1/zh/docs/examples/advanced-gateways/>边缘流量控制</a><ul role=group aria-expanded=true class=leaf-section><li role=none><a role=treeitem title="介绍如何为入口网关配置 SNI 直通。" href=/v1.1/zh/docs/examples/advanced-gateways/ingress-sni-passthrough/>没有 TLS 的 Ingress gateway</a></li><li role=none><span role=treeitem class=current title="描述如何通过专用网关服务将流量定向到外部服务来配置 Istio。">配置 Egress gateway</span></li><li role=none><a role=treeitem title="描述了配置 Egress 网关来发起对外部服务进行 TLS 通信的过程。" href=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway-tls-origination/>Egress 网关的 TLS 发起过程</a></li><li role=none><a role=treeitem title="此任务描述 Istio 如何配置出口流量的 TLS。" href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination/>出口流量的 TLS</a></li><li role=none><a role=treeitem title="介绍如何为公共域中的一组主机启用 Egress 流量,而不是单独配置每个主机。" href=/v1.1/zh/docs/examples/advanced-gateways/wildcard-egress-hosts/>使用通配符主机配置 Egress 流量</a></li><li role=none><a role=treeitem title="如何为 Egress TLS 流量配置 SNI 监控并应用策略。" href=/v1.1/zh/docs/examples/advanced-gateways/egress_sni_monitoring_and_policies/>Egress TLS 流量中的 SNI 监控及策略</a></li><li role=none><a role=treeitem title="描述如何配置 Istio 以允许应用程序使用外部 HTTPS 代理。" href=/v1.1/zh/docs/examples/advanced-gateways/http-proxy/>连接到外部 HTTPS 代理</a></li><li role=none><a role=treeitem title="展示使用 cert-Manager 为 Kubernetes Ingress 获取 Let's Encrypt TLS 证书的过程。" href=/v1.1/zh/docs/examples/advanced-gateways/ingress-certmgr/>使用 cert-manager 加密 Kubernetes Ingress</a></li></ul></li><li role=treeitem aria-label=单一三层网络的多集群网格><button aria-hidden=true></button><a title="您可以尝试各种基于 VPN 的 Istio 多集群示例。" href=/v1.1/zh/docs/examples/multicluster/>单一三层网络的多集群网格</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title=在一个使用网关进行连接的多集群网格中配置远程服务。 href=/v1.1/zh/docs/examples/multicluster/gateways/>通过网关进行连接的多集群</a></li><li role=none><a role=treeitem title="基于 GKE 的 Istio 多集群安装。" href=/v1.1/zh/docs/examples/multicluster/gke/>Google Kubernetes Engine</a></li><li role=none><a role=treeitem title="多 IBM Cloud Private 集群安装 Istio 示例。" href=/v1.1/zh/docs/examples/multicluster/icp/>IBM Cloud Private</a></li><li role=none><a role=treeitem title="IBM Cloud Kubernetes Service 和 IBM Cloud Private 之间的多集群示例。" href=/v1.1/zh/docs/examples/multicluster/iks-icp/>IBM Cloud Kubernetes Service &amp; IBM Cloud Private</a></li><li role=none><a role=treeitem title="利用 Istio 的水平分割 EDS 来创建多集群网格。" href=/v1.1/zh/docs/examples/multicluster/split-horizon-eds/>集群感知的服务路由</a></li></ul></li></ul></div></div><div class=card><button class="header dynamic" id=card114 title="参考部分包含详细的权威参考资料,如命令行选项、配置选项和 API 调用参数。" aria-controls=card114-body><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#reference"/></svg>参考</button><div class=body aria-labelledby=card114 role=region id=card114-body><ul role=tree aria-expanded=true aria-labelledby=card114><li role=treeitem aria-label=配置><button aria-hidden=true></button><a title=关于配置选项的详细信息。 href=/v1.1/zh/docs/reference/config/>配置</a><ul role=group aria-expanded=false><li role=treeitem aria-label=流量管理><button aria-hidden=true></button><a title="描述如何配置 HTTP/TCP 路由功能。" href=/v1.1/zh/docs/reference/config/networking/>流量管理</a><ul role=group aria-expanded=false class=leaf-section></ul></li><li role=none><a role=treeitem title="描述了使用 Helm chart 安装 Istio 时可以使用的选项。" href=/v1.1/zh/docs/reference/config/installation-options/>安装选项</a></li><li role=none><a role=treeitem title="详细描述 release-1.0 和 release-1.1 之间 Helm chart 安装选项的差异。" href=/v1.1/zh/docs/reference/config/installation-options-changes/>安装选项的变更</a></li><li role=treeitem aria-label=授权><button aria-hidden=true></button><a title=关于如何配置Istio授权特性的描述。 href=/v1.1/zh/docs/reference/config/authorization/>授权</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title=描述所支持的约束和属性。 href=/v1.1/zh/docs/reference/config/authorization/constraints-and-properties/>约束和属性</a></li><li role=none><a role=treeitem title=配置基于角色的访问控制。 href=/v1.1/zh/docs/reference/config/authorization/istio.rbac.v1alpha1/>RBAC</a></li></ul></li><li role=treeitem aria-label=策略和遥测><button aria-hidden=true></button><a title="描述如何配置 Istio 的策略和遥测功能。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/>策略和遥测</a><ul role=group aria-expanded=false><li role=none><a role=treeitem title=介绍策略和控制中会用到的一些基础属性词汇。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/attribute-vocabulary/>属性词汇</a></li><li role=none><a role=treeitem title="Mixer 的配置表达式语言参考。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/expression-language/>表达式语言</a></li><li role=treeitem aria-label=适配器><button aria-hidden=true></button><a title="Mixer 适配器能够让 Istio 连接各种基础设施后端以完成类似指标和日志这样的功能。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/>适配器</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="Apigee 的分布式策略检查以及分析适配器。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/apigee/>Apigee</a></li><li role=none><a role=treeitem title="适用于 circonus.com 的监控解决方案。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/circonus/>Circonus</a></li><li role=none><a role=treeitem title="CloudMonitor 适配器使 Istio 可以向 AliCloud CloudMonitor 提供指标。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/cloudmonitor/>CloudMonitor</a></li><li role=none><a role=treeitem title=始终返回按前提条件拒绝的适配器。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/denier/>Denier</a></li><li role=none><a role=treeitem title="用于将日志发送给 Fluentd 守护进程的适配器。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/fluentd/>Fluentd</a></li><li role=none><a role=treeitem title="将指标发送到 SignalFx 的适配器。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/signalfx/>SignalFx</a></li><li role=none><a role=treeitem title="从 Kubernetes 环境中获取集群信息。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/kubernetesenv/>Kubernetes Env</a></li><li role=none><a role=treeitem title=用于执行黑名单或白名单检测的适配器。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/list/>List</a></li><li role=none><a role=treeitem title=简单内存配额管理系统适配器。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/memquota/>Memory quota</a></li><li role=none><a role=treeitem title="基于 Redis 的配额管理系统。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/redisquota/>Redis Quota</a></li><li role=none><a role=treeitem title="用于向 Google Service Control 发送日志和指标的适配器。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/servicecontrol/>Service Control</a></li><li role=none><a role=treeitem title="该适配器用于向 statsd 后端发送指标数据。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/statsd/>statsd</a></li><li role=none><a role=treeitem title=该适配器可以在本地输出日志和指标。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/adapters/stdio/>Stdio</a></li></ul></li><li role=treeitem aria-label=模板><button aria-hidden=true></button><a title="Mixer 模板用于将数据发送到各个适配器。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/>模板</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="该模板用于表达一个 API Key。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/apikey/>API Key</a></li><li role=none><a role=treeitem title="Analytics 模板用于向 Apigee 发送运行时遥测数据。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/analytics/>Analytics</a></li><li role=none><a role=treeitem title=该模版用于访问控制查询。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/authorization/>Authorization</a></li><li role=none><a role=treeitem title=该模板不包含任何数据,用于测试。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/checknothing/>Check Nothing</a></li><li role=none><a role=treeitem title="用于生成 Kubernetes 的特定属性。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/kubernetes/>Kubernetes</a></li><li role=none><a role=treeitem title=该模板用于执行列表检查操作。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/listentry/>List Entry</a></li><li role=none><a role=treeitem title=该模板用于表达一条运行时日志项。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/logentry/>Log Entry</a></li><li role=none><a role=treeitem title=该模板用于表达一个运行时产生的监控指标数据。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/metric/>Metric</a></li><li role=none><a role=treeitem title=该模板用于表达占用配额的请求。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/quota/>Quota</a></li><li role=none><a role=treeitem title=该模板不包含数据,用于测试。 href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/reportnothing/>Report Nothing</a></li><li role=none><a role=treeitem title="用于 Google Service Control 适配器的模板。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/servicecontrolreport/>Service Control Report</a></li><li role=none><a role=treeitem title="该模板用于表达分布式追踪数据中的一个 Span。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/templates/tracespan/>Trace Span</a></li></ul></li><li role=none><a role=treeitem title="通过 Mixer 从 Istio 导出的默认监控指标。" href=/v1.1/zh/docs/reference/config/policy-and-telemetry/metrics/>默认监控指标</a></li></ul></li><li role=none><a role=treeitem title=流量路由配置。 href=/v1.1/zh/docs/reference/config/istio.networking.v1alpha3/>通信路由</a></li></ul></li><li role=treeitem aria-label=命令><button aria-hidden=true></button><a title="描述 Istio 命令和工具的用法及选项。" href=/v1.1/zh/docs/reference/commands/>命令</a><ul role=group aria-expanded=false class=leaf-section><li role=none><a role=treeitem title="Galley 为 Istio 提供配置管理服务。" href=/v1.1/zh/docs/reference/commands/galley/>galley</a></li><li role=none><a role=treeitem title="自动注入 Istio sidecar 的 Kubernetes webhook。" href=/v1.1/zh/docs/reference/commands/sidecar-injector/>sidecar-injector</a></li><li role=none><a role=treeitem title="Istio 控制界面。" href=/v1.1/zh/docs/reference/commands/istioctl/>istioctl</a></li><li role=none><a role=treeitem title="Istio 证书颁发CA。" href=/v1.1/zh/docs/reference/commands/istio_ca/>istio_ca</a></li><li role=none><a role=treeitem title="用于触发直接调用 Mixer API 的实用程序。" href=/v1.1/zh/docs/reference/commands/mixc/>mixc</a></li><li role=none><a role=treeitem title="Mixer 是 Istio 在后端基础设施之上的抽象。" href=/v1.1/zh/docs/reference/commands/mixs/>mixs</a></li><li role=none><a role=treeitem title="节点一级的 Istio 安全代理。" href=/v1.1/zh/docs/reference/commands/node_agent/>node_agent</a></li><li role=none><a role=treeitem title="Istio Pilot。" href=/v1.1/zh/docs/reference/commands/pilot-discovery/>pilot-discovery</a></li></ul></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.1/img/icons.svg#pull"/></svg></button><nav aria-label=Breadcrumb><ol><li><a href=/v1.1/zh/>Istio</a></li><li><a href=/v1.1/zh/docs/ title="了解如何部署、使用和运维 Istio。">文档</a></li><li><a href=/v1.1/zh/docs/examples/ title="这里包括多个可供 Istio 使用的可完整工作的示例,你可以用来亲自部署和体验这些示例。">示例</a></li><li><a href=/v1.1/zh/docs/examples/advanced-gateways/ title="用于管理 Istio 服务网格的边缘流量(即 Ingress 和 Egress 流量)的各种高级示例。">边缘流量控制</a></li><li>配置 Egress gateway</li></ol></nav><article aria-labelledby=title><div class=title-area><div><h1 id=title>配置 Egress gateway</h1><p class=byline><span title="1672 字"><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#clock"/></svg><span>&nbsp;</span>阅读大约需要 8 分钟</span></p></div></div><nav class=toc-inlined aria-label="Table of Contents"><div><hr><ol><li role=none aria-label=用例><a href=#%e7%94%a8%e4%be%8b>用例</a><li role=none aria-label=开始之前><a href=#%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d>开始之前</a><li role=none aria-label="部署 Istio Egress gateway"><a href=#%e9%83%a8%e7%bd%b2-istio-egress-gateway>部署 Istio Egress gateway</a><li role=none aria-label="HTTP 流量的 Egress gateway"><a href=#http-%e6%b5%81%e9%87%8f%e7%9a%84-egress-gateway>HTTP 流量的 Egress gateway</a><ol><li role=none aria-label="清除 HTTP gateway"><a href=#%e6%b8%85%e9%99%a4-http-gateway>清除 HTTP gateway</a></ol></li><li role=none aria-label="HTTPS 流量的 Egress gateway"><a href=#https-%e6%b5%81%e9%87%8f%e7%9a%84-egress-gateway>HTTPS 流量的 Egress gateway</a><ol><li role=none aria-label="清除 HTTPS gateway"><a href=#%e6%b8%85%e9%99%a4-https-gateway>清除 HTTPS gateway</a></ol></li><li role=none aria-label=额外的安全考量><a href=#%e9%a2%9d%e5%a4%96%e7%9a%84%e5%ae%89%e5%85%a8%e8%80%83%e9%87%8f>额外的安全考量</a><li role=none aria-label="应用 Kubernetes 网络策略"><a href=#%e5%ba%94%e7%94%a8-kubernetes-%e7%bd%91%e7%bb%9c%e7%ad%96%e7%95%a5>应用 Kubernetes 网络策略</a><ol><li role=none aria-label=清理网络策略><a href=#%e6%b8%85%e7%90%86%e7%bd%91%e7%bb%9c%e7%ad%96%e7%95%a5>清理网络策略</a></ol></li><li role=none aria-label=故障排除><a href=#%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4>故障排除</a><li role=none aria-label=清理><a href=#%e6%b8%85%e7%90%86>清理</a><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.1/img/icons.svg#callout-warning"/></svg></div><div class=content>此示例不适用于 Minikube。</div></aside></div><p><a href=/v1.1/zh/docs/tasks/traffic-management/egress/>控制 Egress 流量</a>任务演示了如何从网格内的应用程序访问外部Kubernetes 集群外部HTTP 和 HTTPS 服务。这里提醒一下:默认情况下,启用 Istio 的应用程序无法访问集群外的 URL。要启用此类访问必须定义外部服务的 <a href=/v1.1/zh/docs/reference/config/istio.networking.v1alpha3/#serviceentry><code>ServiceEntry</code></a>,或者配置<a href=/v1.1/zh/docs/tasks/traffic-management/egress/#直接调用外部服务>直接访问外部服务</a></p><p><a href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination/>Egress 流量的 TLS</a> 任务演示了如何允许应用程序将 HTTP 请求发送到需要 HTTPS 的外部服务器。</p><p>此任务描述了通过名为 <code>Egress Gateway</code> 的专用服务如何配置 Istio 引导出口流量。我们实现了与 <a href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination/>Egress 流量的 TLS</a> 任务中描述的相同功能,唯一的区别就是,这里会使用 Egress gateway 来完成这一任务。</p><h2 id=用例>用例</h2><p>设想一个具有严格安全要求的组织。根据这些要求,服务网格的所有外发流量必须流经一组专用节点。这些节点和运行其他应用分别在不同的节点上运行。这些专用的节点将用于 Egress 流量的策略实施,并且将比其余节点进行更详细地监控。</p><p>另一个用例是应用程序节点没有公共 IP 的集群,因此在其上运行的网格内服务无法访问 Internet。定义 Egress gateway ,通过它引导所有出口流量并将公共 IP 分配给 Egress gateway 节点,允许应用节点以受控方式访问外部服务。</p><h2 id=开始之前>开始之前</h2><ul><li><p>按照<a href=/v1.1/zh/docs/setup/>安装指南</a>中的说明安装 Istio。</p></li><li><p>部署 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> 示例,以获取发送请求的测试源。
如果您启用了
<a href=/v1.1/zh/docs/setup/kubernetes/additional-setup/sidecar-injection/#sidecar-的自动注入>自动 sidecar 注入</a>,请执行</p><div><a data-skipendnotes=true style=display:none href=https://raw.githubusercontent.com/istio/istio/release-1.1/samples/sleep/sleep.yaml>Zip</a><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f @samples/sleep/sleep.yaml@
</code></pre></div><p>否则,在部署 <code>sleep</code> 应用程序前,您必须手动注入 sidecar</p><div><a data-skipendnotes=true style=display:none href=https://raw.githubusercontent.com/istio/istio/release-1.1/samples/sleep/sleep.yaml>Zip</a><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f &lt;(istioctl kube-inject -f @samples/sleep/sleep.yaml@)
</code></pre></div><div><aside class="callout tip"><div class=type><svg class="large-icon"><use xlink:href="/v1.1/img/icons.svg#callout-tip"/></svg></div><div class=content>您可以使用任何安装了 <code>curl</code> 的 pod 作为测试源。</div></aside></div></li><li><p>为了发送请求,您需要创建 <code>SOURCE_POD</code> 环境变量来存储源 pod 的名称:</p><pre><code class=language-bash data-expandlinks=true>$ export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
</code></pre></li></ul><h2 id=部署-istio-egress-gateway>部署 Istio Egress gateway</h2><ol><li><p>检查是否部署了 Istio Egress gateway</p><pre><code class=language-bash data-expandlinks=true>$ kubectl get pod -l istio=egressgateway -n istio-system
</code></pre><p>如果未返回任何 pod请通过执行下一步来部署 Istio egress 网关。</p></li><li><p>使用 <code>helm template</code>(或 <code>helm install</code> 及相应的标志):</p><pre><code class=language-bash data-expandlinks=true>$ helm template install/kubernetes/helm/istio --name istio-egressgateway --namespace istio-system \
-x charts/gateways/templates/deployment.yaml -x charts/gateways/templates/service.yaml \
-x charts/gateways/templates/serviceaccount.yaml -x charts/gateways/templates/autoscale.yaml \
-x charts/gateways/templates/clusterrole.yaml -x charts/gateways/templates/clusterrolebindings.yaml \
--set global.istioNamespace=istio-system --set gateways.istio-ingressgateway.enabled=false \
--set gateways.istio-egressgateway.enabled=true | kubectl apply -f -
</code></pre></li></ol><h2 id=http-流量的-egress-gateway>HTTP 流量的 Egress gateway</h2><p>首先创建一个 <code>ServiceEntry</code> 以允许流量直接访问外部服务。</p><ol><li><p><code>edition.cnn.com</code> 定义一个 <code>ServiceEntry</code></p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: cnn
spec:
hosts:
- edition.cnn.com
ports:
- number: 80
name: http-port
protocol: HTTP
- number: 443
name: https
protocol: HTTPS
resolution: DNS
EOF
</code></pre></li><li><p>验证 <code>ServiceEntry</code> 是否已正确应用。发送 HTTPS 请求到 <a href=http://edition.cnn.com/politics>http://edition.cnn.com/politics</a></p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics
HTTP/1.1 301 Moved Permanently
...
location: https://edition.cnn.com/politics
...
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
Content-Length: 151654
...
</code></pre><p>输出应与 <a href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination/>Egress 流量的 TLS</a> 任务中的输出相同,不带 TLS。</p></li><li><p><code>edition.cnn.com</code> 端口 80 创建 Egress gateway。除此之外还要创建一个 <code>DestinationRule</code><code>VirtualService</code> 来引导流量通过 Egress gateway 与外部服务通信。</p><p>如果在 Istio 中启用了<a href=/v1.1/zh/docs/tasks/security/mutual-tls/>双向 TLS 认证</a>,请使用以下命令。</p><div id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1 role=tablist class=tabset><div class=tab-strip data-cookie-name=mtls><button aria-selected=true data-cookie-value=enabled aria-controls=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-0-panel id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-0-tab role=tab><span>mutual TLS enabled</span>
</button><button tabindex=-1 data-cookie-value=disabled aria-controls=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-1-panel id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-1-tab role=tab><span>mutual TLS disabled</span></button></div><div class=tab-content><div id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-0-panel role=tabpanel tabindex=0 aria-labelledby=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-0-tab><pre><code class=language-bash>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-egressgateway
spec:
selector:
istio: egressgateway
servers:
- port:
number: 80
name: https
protocol: HTTPS
hosts:
- edition.cnn.com
tls:
mode: MUTUAL
serverCertificate: /etc/certs/cert-chain.pem
privateKey: /etc/certs/key.pem
caCertificates: /etc/certs/root-cert.pem
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: egressgateway-for-cnn
spec:
host: istio-egressgateway.istio-system.svc.cluster.local
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 80
tls:
mode: ISTIO_MUTUAL
subsets:
- name: cnn
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 80
tls:
mode: ISTIO_MUTUAL
sni: edition.cnn.com
EOF
</code></pre></div><div hidden id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-1-panel role=tabpanel tabindex=0 aria-labelledby=tabset-zh-docs-examples-advanced-gateways-egress-gateway-1-1-tab><pre><code class=language-bash>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-egressgateway
spec:
selector:
istio: egressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- edition.cnn.com
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: egressgateway-for-cnn
spec:
host: istio-egressgateway.istio-system.svc.cluster.local
subsets:
- name: cnn
EOF
</code></pre></div></div></div></li><li><p>定义一个 <code>VirtualService</code> 来引导从 sidecar 到 Egress gateway 以及从 Egress gateway 到外部服务的流量:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: direct-cnn-through-egress-gateway
spec:
hosts:
- edition.cnn.com
gateways:
- istio-egressgateway
- mesh
http:
- match:
- gateways:
- mesh
port: 80
route:
- destination:
host: istio-egressgateway.istio-system.svc.cluster.local
subset: cnn
port:
number: 80
weight: 100
- match:
- gateways:
- istio-egressgateway
port: 80
route:
- destination:
host: edition.cnn.com
port:
number: 80
weight: 100
EOF
</code></pre></li><li><p>将 HTTP 请求重新发送到 <a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a></p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- curl -sL -o /dev/null -D - http://edition.cnn.com/politics
HTTP/1.1 301 Moved Permanently
...
location: https://edition.cnn.com/politics
...
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
Content-Length: 151654
...
</code></pre><p>输出应与步骤 2 中的输出相同。</p></li><li><p>检查 <code>istio-egressgateway</code> pod 的日志,并查看与我们的请求对应的行。如果 Istio 部署在 <code>istio-system</code> 命名空间中,则打印日志的命令是:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl logs -l istio=egressgateway -c istio-proxy -n istio-system | tail
</code></pre><p>我们看到与请求相关的行,类似于以下内容:</p><pre><code class=language-plain data-expandlinks=true>[2018-06-14T11:46:23.596Z] &#34;GET /politics HTTP/1.1&#34; 301 - 0 0 3 1 &#34;172.30.146.87&#34; &#34;curl/7.35.0&#34; &#34;ab7be694-e367-94c5-83d1-086eca996dae&#34; &#34;edition.cnn.com&#34; &#34;151.101.193.67:80&#34;
</code></pre><p>请注意,我们只将流量从 80 端口重定向到 Egress gateway ,到 443 端口的 HTTPS 流量直接转到 <code>edition.cnn.com</code></p></li></ol><h3 id=清除-http-gateway>清除 HTTP gateway</h3><p>在继续下一步之前删除先前的定义:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl delete gateway istio-egressgateway
$ kubectl delete serviceentry cnn
$ kubectl delete virtualservice direct-cnn-through-egress-gateway
$ kubectl delete destinationrule egressgateway-for-cnn
</code></pre><h2 id=https-流量的-egress-gateway>HTTPS 流量的 Egress gateway</h2><p>在本节中,将通过 Egress gateway 进行 HTTPS 流量透传(由应用程序发起的 TLS。在相应的 <code>ServiceEntry</code><code>Egress gateway</code> 以及 <code>VirtualService</code> 中指定端口 443协议 <code>TLS</code></p><ol><li><p><code>edition.cnn.com</code> 定义 <code>ServiceEntry</code></p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: cnn
spec:
hosts:
- edition.cnn.com
ports:
- number: 443
name: tls
protocol: TLS
resolution: DNS
EOF
</code></pre></li><li><p>验证 <code>ServiceEntry</code> 是否已正确生效。发送 HTTPS 请求到 <a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a>。输出应与上一节中的输出相同。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
Content-Length: 151654
...
</code></pre></li><li><p><code>edition.cnn.com</code> 创建 Egress gateway端口 443TLS 协议。除此之外还创建了一个 <code>DestinationRule</code><code>VirtualService</code> 来引导流量通过 Egress gateway 与外部服务通信。</p><p>如果在 Istio 中启用了<a href=/v1.1/zh/docs/tasks/security/mutual-tls/>双向 TLS 认证</a>,请使用以下命令。</p><div id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2 role=tablist class=tabset><div class=tab-strip data-cookie-name=mtls><button aria-selected=true data-cookie-value=enabled aria-controls=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-0-panel id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-0-tab role=tab><span>mutual TLS enabled</span>
</button><button tabindex=-1 data-cookie-value=disabled aria-controls=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-1-panel id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-1-tab role=tab><span>mutual TLS disabled</span></button></div><div class=tab-content><div id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-0-panel role=tabpanel tabindex=0 aria-labelledby=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-0-tab><pre><code class=language-bash>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-egressgateway
spec:
selector:
istio: egressgateway
servers:
- port:
number: 443
name: tls-cnn
protocol: TLS
hosts:
- edition.cnn.com
tls:
mode: MUTUAL
serverCertificate: /etc/certs/cert-chain.pem
privateKey: /etc/certs/key.pem
caCertificates: /etc/certs/root-cert.pem
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: egressgateway-for-cnn
spec:
host: istio-egressgateway.istio-system.svc.cluster.local
subsets:
- name: cnn
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
portLevelSettings:
- port:
number: 443
tls:
mode: ISTIO_MUTUAL
sni: edition.cnn.com
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: direct-cnn-through-egress-gateway
spec:
hosts:
- edition.cnn.com
gateways:
- mesh
- istio-egressgateway
tls:
- match:
- gateways:
- mesh
port: 443
sni_hosts:
- edition.cnn.com
route:
- destination:
host: istio-egressgateway.istio-system.svc.cluster.local
subset: cnn
port:
number: 443
tcp:
- match:
- gateways:
- istio-egressgateway
port: 443
route:
- destination:
host: edition.cnn.com
port:
number: 443
weight: 100
EOF
</code></pre></div><div hidden id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-1-panel role=tabpanel tabindex=0 aria-labelledby=tabset-zh-docs-examples-advanced-gateways-egress-gateway-2-1-tab><pre><code class=language-bash>$ kubectl apply -f - &lt;&lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-egressgateway
spec:
selector:
istio: egressgateway
servers:
- port:
number: 443
name: tls
protocol: TLS
hosts:
- edition.cnn.com
tls:
mode: PASSTHROUGH
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: egressgateway-for-cnn
spec:
host: istio-egressgateway.istio-system.svc.cluster.local
subsets:
- name: cnn
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: direct-cnn-through-egress-gateway
spec:
hosts:
- edition.cnn.com
gateways:
- mesh
- istio-egressgateway
tls:
- match:
- gateways:
- mesh
port: 443
sni_hosts:
- edition.cnn.com
route:
- destination:
host: istio-egressgateway.istio-system.svc.cluster.local
subset: cnn
port:
number: 443
- match:
- gateways:
- istio-egressgateway
port: 443
sni_hosts:
- edition.cnn.com
route:
- destination:
host: edition.cnn.com
port:
number: 443
weight: 100
EOF
</code></pre></div></div></div></li><li><p>发送 HTTPS 请求到 <a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a>。输出应与之前相同。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- curl -sL -o /dev/null -D - https://edition.cnn.com/politics
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
Content-Length: 151654
...
</code></pre></li><li><p>检查 Egress gateway 代理的统计信息,并查看与我们对 <code>edition.cnn.com</code> 的请求相对应的计数器。如果 Istio 部署在 <code>istio-system</code> 命名空间中,则打印计数器的命令是:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl logs -l istio=egressgateway -n istio-system
</code></pre><p>您应该看到类似于以下内容的行:</p><pre><code class=language-plain data-expandlinks=true>[2019-01-02T11:46:46.981Z] &#34;- - -&#34; 0 - 627 1879689 44 - &#34;-&#34; &#34;-&#34; &#34;-&#34; &#34;-&#34; &#34;151.101.129.67:443&#34; outbound|443||edition.cnn.com 172.30.109.80:41122 172.30.109.80:443 172.30.109.112:59970 edition.cnn.com
</code></pre></li></ol><h3 id=清除-https-gateway>清除 HTTPS gateway</h3><pre><code class=language-bash data-expandlinks=true>$ kubectl delete serviceentry cnn
$ kubectl delete gateway istio-egressgateway
$ kubectl delete virtualservice direct-cnn-through-egress-gateway
$ kubectl delete destinationrule egressgateway-for-cnn
</code></pre><h2 id=额外的安全考量>额外的安全考量</h2><p>在 Istio 中定义的 Egress gateway本身并不会对运行 Egress gateway 服务的节点进行任何特殊处理。集群管理员或云提供商可以在专用节点上部署 Egress gateway ,并引入额外的安全措施,使这些节点比网格的其余部分更安全。</p><p>另外要注意的是,实际上 Istio 本身无法安全地强制将所有 Egress 流量流经 Egress gateway Istio 仅通过其 Sidecar 代理启用此类流量。
攻击者只要绕过 Sidecar 代理,就可以不经 Egress gateway 直接与网格外面的服务进行通信,从而避免了 Istio 的控制和监控。
集群管理员或云供应商必须确保所有外发流量都从 Egress gateway 途径发起。需要用 Istio 之外的机制来满足这一需求,例如以下几种做法:
使用防火墙拒绝所有来自 Egress gateway 以外的流量。
<a href=https://kubernetes.io/docs/concepts/services-networking/network-policies/>Kubernetes 网络策略</a>也能禁止所有不是从 Egress gateway 发起的 Egress 流量(<a href=#应用-kubernetes-网络策略>#下一节</a>中举出了这样的例子)。
管理员或者云供应商还可以对网络进行限制,让运行应用的节点只能通过 Gateway 来访问外部网络。要完成这一限制,可以只给 Gateway Pod 分配公网 IP或者可以配置 NAT 设备,丢弃来自 Egress gateway 以外 Pod 的流量。</p><h2 id=应用-kubernetes-网络策略>应用 Kubernetes 网络策略</h2><p>本节中会创建 <a href=https://kubernetes.io/docs/concepts/services-networking/network-policies/>Kubernetes 网络策略</a>,阻止绕过 Egress gateway 的外发流量。要完成这一示例,首先创建一个 <code>test-egress</code> 命名空间,并在其中部署 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> 示例应用。</p><ol><li><p>重复执行<a href=#HTTPS-流量的-Egress-gateway>“HTTPS 流量的 Egress gateway”</a>一节的内容。</p></li><li><p>创建 <code>test-egress</code> 命名空间:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl create namespace test-egress
</code></pre></li><li><p><code>test-egress</code> 命名空间中部署 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> 示例应用:</p><div><a data-skipendnotes=true style=display:none href=https://raw.githubusercontent.com/istio/istio/release-1.1/samples/sleep/sleep.yaml>Zip</a><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -n test-egress -f @samples/sleep/sleep.yaml@
</code></pre></div></li><li><p>检查生成的 Pod其中应该只有一个容器也就是说没有注入 Istio sidecar</p><pre><code class=language-bash data-expandlinks=true>$ kubectl get pod $(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name}) -n test-egress
NAME READY STATUS RESTARTS AGE
sleep-776b7bcdcd-z7mc4 1/1 Running 0 18m
</code></pre></li><li><p><code>test-egress</code> 命名空间的 <code>sleep</code> Pod 中向 <a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a> 发送 HTTPS 请求。因为没有任何限制,所以这一请求应该会成功:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name}) -n test-egress -c sleep -- curl -s -o /dev/null -w &#34;%{http_code}\n&#34; https://edition.cnn.com/politics
200
</code></pre></li><li><p>给 Istio 组件(控制平面和 Gateway所在的命名空间打上标签例如 <code>istio-system</code></p><pre><code class=language-bash data-expandlinks=true>$ kubectl label namespace istio-system istio=system
</code></pre></li><li><p><code>kube-system</code> 命名空间打标签:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl label ns kube-system kube-system=true
</code></pre></li><li><p>创建一个 <code>NetworkPolicy</code>,来自 <code>test-egress</code> 命名空间的流量,只允许目标为 <code>kube-system</code> 的 DNS端口 53请求以及目标为 <code>istio-system</code> 命名空间的所有请求:</p><pre><code class=language-bash data-expandlinks=true>$ cat &lt;&lt;EOF | kubectl apply -n test-egress -f -
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-egress-to-istio-system-and-kube-dns
spec:
podSelector: {}
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kube-system: &#34;true&#34;
ports:
- protocol: UDP
port: 53
- to:
- namespaceSelector:
matchLabels:
istio: system
EOF
</code></pre></li><li><p>重新发送前面的 HTTPS 请求到 <a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a>。这次请求就不会成功了,这是因为流量被网络策略拦截了。测试 Pod 无法越过 <code>istio-egressgateway</code>。要访问 <code>edition.cnn.com</code>,只能通过 Istio sidecar 将流量转给 <code>istio-egressgateway</code> 才能完成。这一设置演示了即使绕过了 Sidecar也会被网络策略拦截而无法访问到外部站点。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name}) -n test-egress -c sleep -- curl -v https://edition.cnn.com/politics
Hostname was NOT found in DNS cache
Trying 151.101.65.67...
Trying 2a04:4e42:200::323...
Immediate connect fail for 2a04:4e42:200::323: Cannot assign requested address
Trying 2a04:4e42:400::323...
Immediate connect fail for 2a04:4e42:400::323: Cannot assign requested address
Trying 2a04:4e42:600::323...
Immediate connect fail for 2a04:4e42:600::323: Cannot assign requested address
Trying 2a04:4e42::323...
Immediate connect fail for 2a04:4e42::323: Cannot assign requested address
connect to 151.101.65.67 port 443 failed: Connection timed out
</code></pre></li><li><p>接下来在 <code>test-egress</code> 命名空间的 <code>sleep</code> Pod 上注入 Sidecar启用 <code>test-egress</code> 命名空间的自动注入:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl label namespace test-egress istio-injection=enabled
</code></pre></li><li><p>重新部署 <code>sleep</code></p><div><a data-skipendnotes=true style=display:none href=https://raw.githubusercontent.com/istio/istio/release-1.1/samples/sleep/sleep.yaml>Zip</a><pre><code class=language-bash data-expandlinks=true>$ kubectl delete deployment sleep -n test-egress
$ kubectl apply -f @samples/sleep/sleep.yaml@ -n test-egress
</code></pre></div></li><li><p>检查生成的 Pod其中应该有了两个容器其中包含了注入的 Sidecar<code>istio-proxy</code></p><pre><code class=language-bash data-expandlinks=true>$ kubectl get pod $(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name}) -n test-egress -o jsonpath={.spec.containers[*].name}
sleep istio-proxy
</code></pre></li><li><p><a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a> 发送 HTTP 请求,这次会成功,原因是网络策略允许流量流向 <code>istio-system</code> 中的 <code>istio-egressgateway</code><code>istio-egressgateway</code> 最终把流量转发到 <code>edition.cnn.com</code></p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $(kubectl get pod -n test-egress -l app=sleep -o jsonpath={.items..metadata.name}) -n test-egress -c sleep -- curl -s -o /dev/null -w &#34;%{http_code}\n&#34; https://edition.cnn.com/politics
200
</code></pre></li><li><p>检查 Egress gateway 中的代理统计数据,查看对 <code>edition.cnn.com</code> 的请求计数。如果 Istio 部署在 <code>istio-system</code> 命名空间,那么打印计数器的命令就是:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $(kubectl get pod -l istio=egressgateway -n istio-system -o jsonpath=&#39;{.items[0].metadata.name}&#39;) -c istio-proxy -n istio-system -- curl -s localhost:15000/stats | grep edition.cnn.com.upstream_cx_total
cluster.outbound|443||edition.cnn.com.upstream_cx_total: 2
</code></pre></li></ol><h3 id=清理网络策略>清理网络策略</h3><ol><li><p>删除本节中建立的资源:</p><div><a data-skipendnotes=true style=display:none href=https://raw.githubusercontent.com/istio/istio/release-1.1/samples/sleep/sleep.yaml>Zip</a><pre><code class=language-bash data-expandlinks=true>$ kubectl delete -f @samples/sleep/sleep.yaml@ -n test-egress
$ kubectl delete networkpolicy allow-egress-to-istio-system-and-kube-dns -n test-egress
$ kubectl label namespace kube-system kube-system-
$ kubectl label namespace istio-system istio-
$ kubectl delete namespace test-egress
</code></pre></div></li><li><p>执行<a href=#HTTPS-流量的-Egress-gateway>“HTTPS 流量的 Egress gateway”</a> 一节中的<a href=#清除-HTTPS-gateway>清理工作</a></p></li></ol><h2 id=故障排除>故障排除</h2><ol><li><p>检查是否在 Istio 中启用了<a href=/v1.1/zh/docs/tasks/security/mutual-tls/>双向 TLS 认证</a>,然后执行以下步骤:<a href=/v1.1/zh/docs/tasks/security/mutual-tls/#检查-istio-双向-tls-认证的配置>验证 Istio 的双向 TLS 认证设置</a>。如果启用了双向 TLS请确保创建相应的项目配置请注意备注<strong>如果您在 Istio 中启用了双向 TLS 认证,则必须创建&hellip;</strong>)。</p></li><li><p>如果<a href=/v1.1/zh/docs/tasks/security/mutual-tls/>双向 TLS 认证</a>启用后, 验证 Egress gateway 的证书:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -i -n istio-system $(kubectl get pod -l istio=egressgateway -n istio-system -o jsonpath=&#39;{.items[0].metadata.name}&#39;) -- cat /etc/certs/cert-chain.pem | openssl x509 -text -noout | grep &#39;Subject Alternative Name&#39; -A 1
X509v3 Subject Alternative Name:
URI:spiffe://cluster.local/ns/istio-system/sa/istio-egressgateway-service-account
</code></pre></li><li><p>HTTPS 透传流量情况,需要使用 <code>openssl</code> 命令测试流量。<code>openssl</code><code>-servername</code> 选项可以用来设置 SNI</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- openssl s_client -connect edition.cnn.com:443 -servername edition.cnn.com
CONNECTED(00000003)
...
Certificate chain
0 s:/C=US/ST=California/L=San Francisco/O=Fastly, Inc./CN=turner-tls.map.fastly.net
i:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
1 s:/C=BE/O=GlobalSign nv-sa/CN=GlobalSign CloudSSL CA - SHA256 - G3
i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
---
Server certificate
-----BEGIN CERTIFICATE-----
...
</code></pre><p>如果在上面命令的输出中看到了类似的证书信息,就表明路由是正确的。接下来检查 Egress gateway 代理,查找对应请求的计数器(由 <code>openssl</code><code>curl</code> 发送,目标是 <code>edition.cnn.com</code></p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $(kubectl get pod -l istio=egressgateway -n istio-system -o jsonpath=&#39;{.items[0].metadata.name}&#39;) -c istio-proxy -n istio-system -- curl -s localhost:15000/stats | grep edition.cnn.com.upstream_cx_total
cluster.outbound|443||edition.cnn.com.upstream_cx_total: 2
</code></pre></li></ol><h2 id=清理>清理</h2><p>关闭 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> 服务:</p><div><a data-skipendnotes=true style=display:none href=https://raw.githubusercontent.com/istio/istio/release-1.1/samples/sleep/sleep.yaml>Zip</a><pre><code class=language-bash data-expandlinks=true>$ kubectl delete -f @samples/sleep/sleep.yaml@
</code></pre></div><nav id=see-also><h2>相关内容</h2><div class=see-also><div class=entry><p class=link><a data-skipendnotes=true href=/v1.1/zh/blog/2019/egress-performance/>Egress gateway 性能测试</a></p><p class=desc>评估加入 Egress gateway 对性能造成的影响。</p></div><div class=entry><p class=link><a data-skipendnotes=true href=/v1.1/zh/blog/2018/egress-mongo/>使用外部 MongoDB 服务</a></p><p class=desc>描述了一个基于 Istio 的 Bookinfo 示例的简单场景。</p></div><div class=entry><p class=link><a data-skipendnotes=true href=/v1.1/zh/blog/2018/egress-monitoring-access-control/>HTTP Egress 流量监控和访问策略</a></p><p class=desc>描述如何配置 Istio 进行 HTTP Egress 流量监控和访问策略。</p></div><div class=entry><p class=link><a data-skipendnotes=true href=/v1.1/zh/blog/2018/egress-tcp/>使用外部 TCP 服务</a></p><p class=desc>描述基于 Istio 的 Bookinfo 示例的简单场景。</p></div><div class=entry><p class=link><a data-skipendnotes=true href=/v1.1/zh/blog/2018/egress-https/>使用外部 Web 服务</a></p><p class=desc>描述基于 Istio Bookinfo 示例的简单场景。</p></div><div class=entry><p class=link><a data-skipendnotes=true href=/v1.1/zh/docs/examples/advanced-gateways/egress_sni_monitoring_and_policies/>Egress TLS 流量中的 SNI 监控及策略</a></p><p class=desc>如何为 Egress TLS 流量配置 SNI 监控并应用策略。</p></div></div></nav></article><nav class=pagenav><div class=left><a title="介绍如何为入口网关配置 SNI 直通。" href=/v1.1/zh/docs/examples/advanced-gateways/ingress-sni-passthrough/><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#left-arrow"/></svg>没有 TLS 的 Ingress gateway</a></div><div class=right><a title="描述了配置 Egress 网关来发起对外部服务进行 TLS 通信的过程。" href=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway-tls-origination/>Egress 网关的 TLS 发起过程<svg class="icon"><use xlink:href="/v1.1/img/icons.svg#right-arrow"/></svg></a></div></nav><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=#%e7%94%a8%e4%be%8b>用例</a><li role=none aria-label=开始之前><a href=#%e5%bc%80%e5%a7%8b%e4%b9%8b%e5%89%8d>开始之前</a><li role=none aria-label="部署 Istio Egress gateway"><a href=#%e9%83%a8%e7%bd%b2-istio-egress-gateway>部署 Istio Egress gateway</a><li role=none aria-label="HTTP 流量的 Egress gateway"><a href=#http-%e6%b5%81%e9%87%8f%e7%9a%84-egress-gateway>HTTP 流量的 Egress gateway</a><ol><li role=none aria-label="清除 HTTP gateway"><a href=#%e6%b8%85%e9%99%a4-http-gateway>清除 HTTP gateway</a></ol></li><li role=none aria-label="HTTPS 流量的 Egress gateway"><a href=#https-%e6%b5%81%e9%87%8f%e7%9a%84-egress-gateway>HTTPS 流量的 Egress gateway</a><ol><li role=none aria-label="清除 HTTPS gateway"><a href=#%e6%b8%85%e9%99%a4-https-gateway>清除 HTTPS gateway</a></ol></li><li role=none aria-label=额外的安全考量><a href=#%e9%a2%9d%e5%a4%96%e7%9a%84%e5%ae%89%e5%85%a8%e8%80%83%e9%87%8f>额外的安全考量</a><li role=none aria-label="应用 Kubernetes 网络策略"><a href=#%e5%ba%94%e7%94%a8-kubernetes-%e7%bd%91%e7%bb%9c%e7%ad%96%e7%95%a5>应用 Kubernetes 网络策略</a><ol><li role=none aria-label=清理网络策略><a href=#%e6%b8%85%e7%90%86%e7%bd%91%e7%bb%9c%e7%ad%96%e7%95%a5>清理网络策略</a></ol></li><li role=none aria-label=故障排除><a href=#%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4>故障排除</a><li role=none aria-label=清理><a href=#%e6%b8%85%e7%90%86>清理</a><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="Go download Istio 1.1.9 now" href=https://github.com/istio/istio/releases/tag/1.1.9 aria-label="Download Istio"><span>download</span><svg class="icon"><use xlink:href="/v1.1/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.1/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.1/img/icons.svg#stackoverflow"/></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.1/img/icons.svg#twitter"/></svg></a><div class=tag>对于用户</div></div><div class=info><p class=copyright>中文内容由 ServiceMesher 社区维护,部分文档可能稍微滞后于英文版本,同步工作持续进行中<br>Istio 归档
1.1.9<br>&copy; 2019 Istio Authors, <a href=https://policies.google.com/privacy>隐私政策</a><br>归档于 2019年6月18日</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.1/img/icons.svg#github"/></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.1/img/icons.svg#slack"/></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.1/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.1/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.1/img/icons.svg#top"/></svg></button></div></body></html>