mirror of https://github.com/istio/istio.io.git
539 lines
77 KiB
HTML
539 lines
77 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="Egress 网关的 TLS 发起过程"><meta name=description content="描述了配置 Egress 网关来发起对外部服务进行 TLS 通信的过程。"><meta name=keywords content=microservices,services,mesh,traffic-management,egress><meta property=og:title content="Egress 网关的 TLS 发起过程"><meta property=og:type content=website><meta property=og:description content="描述了配置 Egress 网关来发起对外部服务进行 TLS 通信的过程。"><meta property=og:url content=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway-tls-origination/><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 网关的 TLS 发起过程</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 网关的 TLS 发起过程";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-tls-origination\/');return false;">当前版本</a>
|
||
<a tabindex=-1 role=menuitem onclick="navigateToUrlOrRoot('https://preliminary.istio.io/docs\/examples\/advanced-gateways\/egress-gateway-tls-origination\/');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 Engine(GKE)集群进行配置以便安装运行 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 & Consul"><button aria-hidden=true></button><a title="基于 Consul 和 Nomad 安装 Istio 控制平面。" href=/v1.1/zh/docs/setup/consul/>Nomad & 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,借助 SDS(Secret 发现服务),使用 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><a role=treeitem title="描述如何通过专用网关服务将流量定向到外部服务来配置 Istio。" href=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway/>配置 Egress gateway</a></li><li role=none><span role=treeitem class=current title="描述了配置 Egress 网关来发起对外部服务进行 TLS 通信的过程。">Egress 网关的 TLS 发起过程</span></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 & 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 网关的 TLS 发起过程</li></ol></nav><article aria-labelledby=title><div class=title-area><div><h1 id=title>Egress 网关的 TLS 发起过程</h1><p class=byline><span title="1727 字"><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#clock"/></svg><span> </span>阅读大约需要 9 分钟</span></p></div></div><nav class=toc-inlined aria-label="Table of Contents"><div><hr><ol><li role=none aria-label=开始之前><a href=#before-you-begin>开始之前</a><li role=none aria-label="使用 Egress 网关发起 TLS"><a href=#%e4%bd%bf%e7%94%a8-egress-%e7%bd%91%e5%85%b3%e5%8f%91%e8%b5%b7-tls>使用 Egress 网关发起 TLS</a><ol><li role=none aria-label="清理 TLS 发起示例的内容"><a href=#cleanup-origination-example>清理 TLS 发起示例的内容</a></ol></li><li role=none aria-label="使用 Egress 网关执行双向 TLS 的发起"><a href=#%e4%bd%bf%e7%94%a8-egress-%e7%bd%91%e5%85%b3%e6%89%a7%e8%a1%8c%e5%8f%8c%e5%90%91-tls-%e7%9a%84%e5%8f%91%e8%b5%b7>使用 Egress 网关执行双向 TLS 的发起</a><ol><li role=none aria-label=生成客户端和服务端的证书及私钥><a href=#generate-client-and-server-certificates-and-keys>生成客户端和服务端的证书及私钥</a><li role=none aria-label="部署一个双向 TLS 服务器"><a href=#deploy-a-mutual-server>部署一个双向 TLS 服务器</a><ol><li role=none aria-label="部署一个容器来测试 NGINX Deployment"><a href=#deploy-a-container-to-test-the-nginx-deployment>部署一个容器来测试 NGINX Deployment</a></ol></li><li role=none aria-label="重新部署带有客户端证书的 Egress 网关"><a href=#redeploy-the-egress-gateway-with-the-%20client-certificates>重新部署带有客户端证书的 Egress 网关</a><li role=none aria-label="为 Egress 流量配置双向 TLS 的发起"><a href=#%e4%b8%ba-egress-%e6%b5%81%e9%87%8f%e9%85%8d%e7%bd%ae%e5%8f%8c%e5%90%91-tls-%e7%9a%84%e5%8f%91%e8%b5%b7>为 Egress 流量配置双向 TLS 的发起</a><li role=none aria-label="清理双向 TLS 发起的例子"><a href=#clean-example-2>清理双向 TLS 发起的例子</a></ol></li><li role=none aria-label=清理><a href=#cleanup>清理</a><li role=none aria-label=相关内容><a href=#see-also>相关内容</a></li></ol><hr></div></nav><p><a href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination>Egress 流量 TLS 示例</a>中展示了如何配置 Istio 来<a href=/v1.1/zh/help/glossary/>发起 TLS</a>,用于和外部进行通信。<a href=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway>配置 Egress 网关</a>示例中展示了如何使用独立的 <strong>egress 网关服务</strong>来对 Egress 流量进行转发。这个例子中结合了前面的两个,描述了如何配置 Egress 网关,来发起对外的 TLS 访问。</p><h2 id=before-you-begin>开始之前</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> 示例应用,这一应用将作为后续步骤中的测试工具,用于发起对外连接。</p><p>如果启用了 <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> 应用了:</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 <(istioctl kube-inject -f @samples/sleep/sleep.yaml@)
|
||
</code></pre></div><p>记录一下 Pod 名称,后面的步骤中会使用 <code>exec</code> 进入 Pod 执行 <code>curl</code> 命令。</p></li><li><p>创建一个环境变量,保存用于向外部服务发送流量的 Pod 名称。</p><p>如果使用的是 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> 应用,运行:</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><li><p><a href=/v1.1/docs/examples/advanced-gateways/egress-gateway/#deploy-istio-egress-gateway>部署 Istio egress 网关</a></p></li></ul><h2 id=使用-egress-网关发起-tls>使用 Egress 网关发起 TLS</h2><p>本节描述了如何执行和<a href=/v1.1/docs/examples/advanced-gateways/egress-tls-origination/>在 Egress 流量中发起 TLS</a> 示例中一样的过程,只不过这次使用的是 Egress 网关,而不是 Sidecar。</p><ol><li><p>为 <code>edition.cnn.com</code> 定义一个 <code>ServiceEntry</code>:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: ServiceEntry
|
||
metadata:
|
||
name: cnn
|
||
spec:
|
||
hosts:
|
||
- edition.cnn.com
|
||
ports:
|
||
- number: 80
|
||
name: http
|
||
protocol: HTTP
|
||
- number: 443
|
||
name: https
|
||
protocol: HTTPS
|
||
resolution: DNS
|
||
EOF
|
||
</code></pre></li><li><p>发送请求到 <a href=https://edition.cnn.com/politics>http://edition.cnn.com/politics</a>,确认一下新建的 <code>ServiceEntry</code> 已经正常工作。</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
|
||
...
|
||
|
||
command terminated with exit code 35
|
||
</code></pre><p>如果输出内容中看到了 <code>301 Moved Permanently</code>,表示 <code>ServiceEntry</code> 已经成功配置。</p></li><li><p>为 <code>edition.cnn.com</code> 创建一个 Egress 网关,端口为 <code>443</code>,然后创建一个 <code>DestinationRule</code>,将 Sidecar 的请求重定向到 Egress 网关。</p><div><aside class="callout idea"><div class=type><svg class="large-icon"><use xlink:href="/v1.1/img/icons.svg#callout-idea"/></svg></div><div class=content>你可能会想启用双向 TLS,这样源 Pod 和 Egress 网关之间的流量就会被加密了。另外双向 TLS 启用之后,Egress 网关就能够监控到源 Pod 的身份,并根据这一身份执行 Mixer 策略了。</div></aside></div><div id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-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-tls-origination-1-0-panel id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-1-0-tab role=tab><span>启用双向 TLS</span>
|
||
</button><button tabindex=-1 data-cookie-value=disabled aria-controls=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-1-1-panel id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-1-1-tab role=tab><span>禁用双向 TLS</span></button></div><div class=tab-content><div id=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-1-0-panel role=tabpanel tabindex=0 aria-labelledby=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-1-0-tab><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<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
|
||
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-tls-origination-1-1-panel role=tabpanel tabindex=0 aria-labelledby=tabset-zh-docs-examples-advanced-gateways-egress-gateway-tls-origination-1-1-tab><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: Gateway
|
||
metadata:
|
||
name: istio-egressgateway
|
||
spec:
|
||
selector:
|
||
istio: egressgateway
|
||
servers:
|
||
- port:
|
||
number: 80
|
||
name: http-port-for-tls-origination
|
||
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> 把流量传递给 Egress 网关,然后创建一个 <code>DestinationRule</code> 来为发往 <code>edition.cnn.com</code> 的流量发起 TLS:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<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: 443
|
||
weight: 100
|
||
---
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: DestinationRule
|
||
metadata:
|
||
name: originate-tls-for-edition-cnn-com
|
||
spec:
|
||
host: edition.cnn.com
|
||
trafficPolicy:
|
||
loadBalancer:
|
||
simple: ROUND_ROBIN
|
||
portLevelSettings:
|
||
- port:
|
||
number: 443
|
||
tls:
|
||
mode: SIMPLE # initiates HTTPS for connections to edition.cnn.com
|
||
EOF
|
||
</code></pre></li><li><p>发送请求到 <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 200 OK
|
||
...
|
||
content-length: 150793
|
||
...
|
||
</code></pre><p>输出内容应该和<a href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination/>出口流量的 TLS</a> 一文中的描述一致,消除了 <code>301 Moved Permanently</code> 消息。</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-14T13:49:36.340Z] "GET /politics HTTP/1.1" 200 - 0 148528 5096 90 "172.30.146.87" "curl/7.35.0" "c6bfdfc3-07ec-9c30-8957-6904230fd037" "edition.cnn.com" "151.101.65.67:443"
|
||
</code></pre></li></ol><h3 id=cleanup-origination-example>清理 TLS 发起示例的内容</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 originate-tls-for-edition-cnn-com
|
||
$ kubectl delete destinationrule egressgateway-for-cnn
|
||
</code></pre><h2 id=使用-egress-网关执行双向-tls-的发起>使用 Egress 网关执行双向 TLS 的发起</h2><p>和前面一节内容类似,这一节中讲述的是配置一个 Egress 网关来为外部服务进行 TLS 发起,不同的是,这次发起的是双向 TLS。</p><p>这个例子相对复杂一些,需要一些特定的准备工作:</p><ol><li>生成客户端和服务端证书。</li><li>部署一个支持双向 TLS 的外部服务。</li><li>重新部署包含双向 TLS 证书的 Egress 网关。</li></ol><p>然后就可以配置外发流量,通过 Egress 网关来执行 TLS 的发起。</p><h3 id=generate-client-and-server-certificates-and-keys>生成客户端和服务端的证书及私钥</h3><ol><li><p>克隆 <a href=https://github.com/nicholasjackson/mtls-go-example>https://github.com/nicholasjackson/mtls-go-example</a> 仓库:</p><pre><code class=language-bash data-expandlinks=true>$ git clone https://github.com/nicholasjackson/mtls-go-example
|
||
</code></pre></li><li><p>进入源码目录:</p><pre><code class=language-bash data-expandlinks=true>$ cd mtls-go-example
|
||
</code></pre></li><li><p>为 <code>nginx.example.com</code> 生成证书,注意用密码替换下面的 <code>password</code>:</p><pre><code class=language-bash data-expandlinks=true>$ ./generate.sh nginx.example.com password
|
||
</code></pre><p>所有提示都输入 <code>y</code>。</p></li><li><p>把证书移动到 <code>nginx.example.com</code> 目录:</p><pre><code class=language-bash data-expandlinks=true>$ mkdir ../nginx.example.com && mv 1_root 2_intermediate 3_application 4_client ../nginx.example.com
|
||
</code></pre></li><li><p>回到前面的目录:</p><pre><code class=language-bash data-expandlinks=true>$ cd ..
|
||
</code></pre></li></ol><h3 id=deploy-a-mutual-server>部署一个双向 TLS 服务器</h3><p>要模拟一个支持双向 TLS 协议的外部服务,可以在 Kubernetes 集群上部署一个 <a href=https://www.nginx.com>NGINX</a>,但这个服务要排除在服务网格之外,例如部署到一个没有进行 Istio 自动注入的命名空间里。</p><ol><li><p>创建一个 Istio 服务网格范围之外的命名空间,命名为 <code>mesh-external</code>。注意不要在这个命名空间里<a href=/v1.1/zh/docs/setup/kubernetes/additional-setup/sidecar-injection/#应用部署>启用自动注入</a>。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl create namespace mesh-external
|
||
</code></pre></li><li><p>创建一个 Kubernetes <a href=https://kubernetes.io/docs/concepts/configuration/secret/>Secrets</a>,用于保存服务和 CA 的证书。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl create -n mesh-external secret tls nginx-server-certs --key nginx.example.com/3_application/private/nginx.example.com.key.pem --cert nginx.example.com/3_application/certs/nginx.example.com.cert.pem
|
||
$ kubectl create -n mesh-external secret generic nginx-ca-certs --from-file=nginx.example.com/2_intermediate/certs/ca-chain.cert.pem
|
||
</code></pre></li><li><p>为 NGINX 服务器创建一个配置文件:</p><pre><code class=language-bash data-expandlinks=true>$ cat <<EOF > ./nginx.conf
|
||
events {
|
||
}
|
||
|
||
http {
|
||
log_format main '$remote_addr - $remote_user [$time_local] $status '
|
||
'"$request" $body_bytes_sent "$http_referer" '
|
||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||
access_log /var/log/nginx/access.log main;
|
||
error_log /var/log/nginx/error.log;
|
||
|
||
server {
|
||
listen 443 ssl;
|
||
|
||
root /usr/share/nginx/html;
|
||
index index.html;
|
||
|
||
server_name nginx.example.com;
|
||
ssl_certificate /etc/nginx-server-certs/tls.crt;
|
||
ssl_certificate_key /etc/nginx-server-certs/tls.key;
|
||
ssl_client_certificate /etc/nginx-ca-certs/ca-chain.cert.pem;
|
||
ssl_verify_client on;
|
||
}
|
||
}
|
||
EOF
|
||
</code></pre></li><li><p>创建一个 Kubernetes <a href=https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/>ConfigMap</a>,用于保存 NGINX 服务器的配置:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl create configmap nginx-configmap -n mesh-external --from-file=nginx.conf=./nginx.conf
|
||
</code></pre></li><li><p>部署 NGINX 服务器:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: my-nginx
|
||
namespace: mesh-external
|
||
labels:
|
||
run: my-nginx
|
||
spec:
|
||
ports:
|
||
- port: 443
|
||
protocol: TCP
|
||
selector:
|
||
run: my-nginx
|
||
---
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: my-nginx
|
||
namespace: mesh-external
|
||
spec:
|
||
selector:
|
||
matchLabels:
|
||
run: my-nginx
|
||
replicas: 1
|
||
template:
|
||
metadata:
|
||
labels:
|
||
run: my-nginx
|
||
spec:
|
||
containers:
|
||
- name: my-nginx
|
||
image: nginx
|
||
ports:
|
||
- containerPort: 443
|
||
volumeMounts:
|
||
- name: nginx-config
|
||
mountPath: /etc/nginx
|
||
readOnly: true
|
||
- name: nginx-server-certs
|
||
mountPath: /etc/nginx-server-certs
|
||
readOnly: true
|
||
- name: nginx-ca-certs
|
||
mountPath: /etc/nginx-ca-certs
|
||
readOnly: true
|
||
volumes:
|
||
- name: nginx-config
|
||
configMap:
|
||
name: nginx-configmap
|
||
- name: nginx-server-certs
|
||
secret:
|
||
secretName: nginx-server-certs
|
||
- name: nginx-ca-certs
|
||
secret:
|
||
secretName: nginx-ca-certs
|
||
EOF
|
||
</code></pre></li><li><p>为 <code>nginx.example.com</code> 定义一个 <code>ServiceEntry</code> 和 <code>VirtualService</code>,让 Istio 把流向 <code>nginx.example.com</code> 的流量转发到你的 NGINX 服务器:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: ServiceEntry
|
||
metadata:
|
||
name: nginx
|
||
spec:
|
||
hosts:
|
||
- nginx.example.com
|
||
ports:
|
||
- number: 80
|
||
name: http
|
||
protocol: HTTP
|
||
- number: 443
|
||
name: https
|
||
protocol: HTTPS
|
||
resolution: DNS
|
||
endpoints:
|
||
- address: my-nginx.mesh-external.svc.cluster.local
|
||
ports:
|
||
https: 443
|
||
---
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: VirtualService
|
||
metadata:
|
||
name: nginx
|
||
spec:
|
||
hosts:
|
||
- nginx.example.com
|
||
tls:
|
||
- match:
|
||
- port: 443
|
||
sni_hosts:
|
||
- nginx.example.com
|
||
route:
|
||
- destination:
|
||
host: nginx.example.com
|
||
port:
|
||
number: 443
|
||
weight: 100
|
||
EOF
|
||
</code></pre></li></ol><h4 id=deploy-a-container-to-test-the-nginx-deployment>部署一个容器来测试 NGINX Deployment</h4><ol><li><p>创建 Kubernetes <a href=https://kubernetes.io/docs/concepts/configuration/secret/>Secrets</a> 来保存客户端和 CA 的证书:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl create secret tls nginx-client-certs --key nginx.example.com/4_client/private/nginx.example.com.key.pem --cert nginx.example.com/4_client/certs/nginx.example.com.cert.pem
|
||
$ kubectl create secret generic nginx-ca-certs --from-file=nginx.example.com/2_intermediate/certs/ca-chain.cert.pem
|
||
</code></pre></li><li><p>部署 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> 示例应用,加载客户端和 CA 证书,用于测试向 NGINX 服务器发送流量:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
# Copyright 2017 Istio Authors
|
||
#
|
||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
# you may not use this file except in compliance with the License.
|
||
# You may obtain a copy of the License at
|
||
#
|
||
# http://www.apache.org/licenses/LICENSE-2.0
|
||
#
|
||
# Unless required by applicable law or agreed to in writing, software
|
||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
# See the License for the specific language governing permissions and
|
||
# limitations under the License.
|
||
|
||
##################################################################################################
|
||
# Sleep service
|
||
##################################################################################################
|
||
apiVersion: v1
|
||
kind: Service
|
||
metadata:
|
||
name: sleep
|
||
labels:
|
||
app: sleep
|
||
spec:
|
||
ports:
|
||
- port: 80
|
||
name: http
|
||
selector:
|
||
app: sleep
|
||
---
|
||
apiVersion: extensions/v1beta1
|
||
kind: Deployment
|
||
metadata:
|
||
name: sleep
|
||
spec:
|
||
replicas: 1
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: sleep
|
||
spec:
|
||
containers:
|
||
- name: sleep
|
||
image: tutum/curl
|
||
command: ["/bin/sleep","infinity"]
|
||
imagePullPolicy: IfNotPresent
|
||
volumeMounts:
|
||
- name: nginx-client-certs
|
||
mountPath: /etc/nginx-client-certs
|
||
readOnly: true
|
||
- name: nginx-ca-certs
|
||
mountPath: /etc/nginx-ca-certs
|
||
readOnly: true
|
||
volumes:
|
||
- name: nginx-client-certs
|
||
secret:
|
||
secretName: nginx-client-certs
|
||
- name: nginx-ca-certs
|
||
secret:
|
||
secretName: nginx-ca-certs
|
||
EOF
|
||
</code></pre></li><li><p>定义一个环境变量来保存 <code>sleep</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><li><p>使用 <a href=https://github.com/istio/istio/tree/release-1.1/samples/sleep>sleep</a> Pod 向 NGINX 服务器发送流量。
|
||
因为 <code>nginx.example.com</code> 并不存在,DNS 也无法解析,所以在 <code>curl</code> 命令中使用了 <code>--resolve</code> 参数来手工完成解析。传递给 <code>--resolve</code> 的 IP(1.1.1.1)无关紧要,只要不是 127.0.0.1 即可。而正常情况下,目标主机的解析是靠 DNS 完成的,就无需这种参数了。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- curl -v --resolve nginx.example.com:443:1.1.1.1 --cacert /etc/nginx-ca-certs/ca-chain.cert.pem --cert /etc/nginx-client-certs/tls.crt --key /etc/nginx-client-certs/tls.key https://nginx.example.com
|
||
...
|
||
Server certificate:
|
||
subject: C=US; ST=Denial; L=Springfield; O=Dis; CN=nginx.example.com
|
||
start date: 2018-08-16 04:31:20 GMT
|
||
expire date: 2019-08-26 04:31:20 GMT
|
||
common name: nginx.example.com (matched)
|
||
issuer: C=US; ST=Denial; O=Dis; CN=nginx.example.com
|
||
SSL certificate verify ok.
|
||
> GET / HTTP/1.1
|
||
> User-Agent: curl/7.35.0
|
||
> Host: nginx.example.com
|
||
...
|
||
< HTTP/1.1 200 OK
|
||
|
||
< Server: nginx/1.15.2
|
||
...
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>Welcome to nginx!</title>
|
||
...
|
||
</code></pre></li><li><p>检查服务器,看它是不是需要客户端证书:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl -k --resolve nginx.example.com:443:1.1.1.1 https://nginx.example.com
|
||
<html>
|
||
<head><title>400 No required SSL certificate was sent</title></head>
|
||
<body bgcolor="white">
|
||
<center><h1>400 Bad Request</h1></center>
|
||
<center>No required SSL certificate was sent</center>
|
||
<hr><center>nginx/1.15.2</center>
|
||
</body>
|
||
</html>
|
||
</code></pre></li></ol><h3 id="redeploy-the-egress-gateway-with-the- client-certificates">重新部署带有客户端证书的 Egress 网关</h3><ol><li><p>创建 Kubernetes <a href=https://kubernetes.io/docs/concepts/configuration/secret/>Secrets</a> 来保存客户端和 CA 证书:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl create -n istio-system secret tls nginx-client-certs --key nginx.example.com/4_client/private/nginx.example.com.key.pem --cert nginx.example.com/4_client/certs/nginx.example.com.cert.pem
|
||
$ kubectl create -n istio-system secret generic nginx-ca-certs --from-file=nginx.example.com/2_intermediate/certs/ca-chain.cert.pem
|
||
</code></pre></li><li><p>生成 <code>istio-egressgateway</code>,加载新的 Secret,参数和生成 <code>istio.yaml</code> 时候一致:</p><pre><code class=language-bash data-expandlinks=true>$ helm template install/kubernetes/helm/istio/ --name istio --namespace istio-system -x charts/gateways/templates/deployment.yaml --set gateways.istio-ingressgateway.enabled=false \
|
||
--set gateways.istio-egressgateway.enabled=true \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[0].name'=egressgateway-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[0].secretName'=istio-egressgateway-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[0].mountPath'=/etc/istio/egressgateway-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[1].name'=egressgateway-ca-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[1].secretName'=istio-egressgateway-ca-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[1].mountPath'=/etc/istio/egressgateway-ca-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[2].name'=nginx-client-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[2].secretName'=nginx-client-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[2].mountPath'=/etc/nginx-client-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[3].name'=nginx-ca-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[3].secretName'=nginx-ca-certs \
|
||
--set 'gateways.istio-egressgateway.secretVolumes[3].mountPath'=/etc/nginx-ca-certs > \
|
||
./istio-egressgateway.yaml
|
||
</code></pre></li><li><p>重新部署 <code>istio-egressgateway</code>:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f ./istio-egressgateway.yaml
|
||
deployment "istio-egressgateway" configured
|
||
</code></pre></li><li><p>校验证书和私钥,是否被成功加载到 <code>istio-egressgateway</code> Pod 之中:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it -n istio-system $(kubectl -n istio-system get pods -l istio=egressgateway -o jsonpath='{.items[0].metadata.name}') -- ls -al /etc/nginx-client-certs /etc/nginx-ca-certs
|
||
</code></pre><p>在 <code>/etc/istio/nginx-client-certs</code> 中应该存在 <code>tls.crt</code> 和 <code>tls.key</code>,<code>ca-chain.cert.pem</code> 则应该存在于 <code>/etc/istio/nginx-ca-certs</code>。</p></li></ol><h3 id=为-egress-流量配置双向-tls-的发起>为 Egress 流量配置双向 TLS 的发起</h3><ol><li><p>为 <code>nginx.example.com</code> 创建 Egress 网关,端口为 443,使用 <code>DestinationRule</code> 和 <code>VirtualService</code> 将流量引入 Egress 网关,并从 Egress 网关发到外部服务。</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: Gateway
|
||
metadata:
|
||
name: istio-egressgateway
|
||
spec:
|
||
selector:
|
||
istio: egressgateway
|
||
servers:
|
||
- port:
|
||
number: 443
|
||
name: https
|
||
protocol: HTTPS
|
||
hosts:
|
||
- nginx.example.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-nginx
|
||
spec:
|
||
host: istio-egressgateway.istio-system.svc.cluster.local
|
||
subsets:
|
||
- name: nginx
|
||
trafficPolicy:
|
||
loadBalancer:
|
||
simple: ROUND_ROBIN
|
||
portLevelSettings:
|
||
- port:
|
||
number: 443
|
||
tls:
|
||
mode: ISTIO_MUTUAL
|
||
sni: nginx.example.com
|
||
EOF
|
||
</code></pre></li><li><p>定义一个 <code>VirtualService</code> 来把流量转发到 Egress 网关,<code>DestinationRule</code> 用于执行双向 TLS 的发起:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl apply -f - <<EOF
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: VirtualService
|
||
metadata:
|
||
name: direct-nginx-through-egress-gateway
|
||
spec:
|
||
hosts:
|
||
- nginx.example.com
|
||
gateways:
|
||
- istio-egressgateway
|
||
- mesh
|
||
http:
|
||
- match:
|
||
- gateways:
|
||
- mesh
|
||
port: 80
|
||
route:
|
||
- destination:
|
||
host: istio-egressgateway.istio-system.svc.cluster.local
|
||
subset: nginx
|
||
port:
|
||
number: 443
|
||
weight: 100
|
||
- match:
|
||
- gateways:
|
||
- istio-egressgateway
|
||
port: 443
|
||
route:
|
||
- destination:
|
||
host: nginx.example.com
|
||
port:
|
||
number: 443
|
||
weight: 100
|
||
---
|
||
apiVersion: networking.istio.io/v1alpha3
|
||
kind: DestinationRule
|
||
metadata:
|
||
name: originate-mtls-for-nginx
|
||
spec:
|
||
host: nginx.example.com
|
||
trafficPolicy:
|
||
loadBalancer:
|
||
simple: ROUND_ROBIN
|
||
portLevelSettings:
|
||
- port:
|
||
number: 443
|
||
tls:
|
||
mode: MUTUAL
|
||
clientCertificate: /etc/nginx-client-certs/tls.crt
|
||
privateKey: /etc/nginx-client-certs/tls.key
|
||
caCertificates: /etc/nginx-ca-certs/ca-chain.cert.pem
|
||
sni: nginx.example.com
|
||
EOF
|
||
</code></pre></li><li><p>发送 HTTP 请求到 <code>http://nginx.example.com</code>:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl exec -it $SOURCE_POD -c sleep -- curl -s --resolve nginx.example.com:80:1.1.1.1 http://nginx.example.com
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>Welcome to nginx!</title>
|
||
...
|
||
</code></pre></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 -n istio-system | grep 'nginx.example.com' | grep HTTP
|
||
</code></pre><p>应该会看到类似的内容:</p><pre><code class=language-plain data-expandlinks=true>[2018-08-19T18:20:40.096Z] "GET / HTTP/1.1" 200 - 0 612 7 5 "172.30.146.114" "curl/7.35.0" "b942b587-fac2-9756-8ec6-303561356204" "nginx.example.com" "172.21.72.197:443"
|
||
</code></pre></li></ol><h3 id=clean-example-2>清理双向 TLS 发起的例子</h3><ol><li><p>删除创建的 Kubernetes 资源:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl delete secret nginx-server-certs nginx-ca-certs -n mesh-external
|
||
$ kubectl delete secret nginx-client-certs nginx-ca-certs
|
||
$ kubectl delete secret nginx-client-certs nginx-ca-certs -n istio-system
|
||
$ kubectl delete configmap nginx-configmap -n mesh-external
|
||
$ kubectl delete service my-nginx -n mesh-external
|
||
$ kubectl delete deployment my-nginx -n mesh-external
|
||
$ kubectl delete namespace mesh-external
|
||
$ kubectl delete gateway istio-egressgateway
|
||
$ kubectl delete serviceentry nginx
|
||
$ kubectl delete virtualservice direct-nginx-through-egress-gateway
|
||
$ kubectl delete destinationrule originate-mtls-for-nginx
|
||
$ kubectl delete destinationrule egressgateway-for-nginx
|
||
</code></pre></li><li><p>删除证书目录,以及克隆到本地的代码仓库:</p><pre><code class=language-bash data-expandlinks=true>$ rm -rf nginx.example.com mtls-go-example
|
||
</code></pre></li><li><p>删除用在这个例子中生成的配置文件:</p><pre><code class=language-bash data-expandlinks=true>$ rm -f ./nginx.conf ./istio-egressgateway.yaml
|
||
</code></pre></li></ol><h2 id=cleanup>清理</h2><p>删除 <code>sleep</code> 的 <code>Service</code> 和 <code>Deployment</code>:</p><pre><code class=language-bash data-expandlinks=true>$ kubectl delete service sleep
|
||
$ kubectl delete deployment sleep
|
||
</code></pre><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="描述如何通过专用网关服务将流量定向到外部服务来配置 Istio。" href=/v1.1/zh/docs/examples/advanced-gateways/egress-gateway/><svg class="icon"><use xlink:href="/v1.1/img/icons.svg#left-arrow"/></svg>配置 Egress gateway</a></div><div class=right><a title="此任务描述 Istio 如何配置出口流量的 TLS。" href=/v1.1/zh/docs/examples/advanced-gateways/egress-tls-origination/>出口流量的 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=#before-you-begin>开始之前</a><li role=none aria-label="使用 Egress 网关发起 TLS"><a href=#%e4%bd%bf%e7%94%a8-egress-%e7%bd%91%e5%85%b3%e5%8f%91%e8%b5%b7-tls>使用 Egress 网关发起 TLS</a><ol><li role=none aria-label="清理 TLS 发起示例的内容"><a href=#cleanup-origination-example>清理 TLS 发起示例的内容</a></ol></li><li role=none aria-label="使用 Egress 网关执行双向 TLS 的发起"><a href=#%e4%bd%bf%e7%94%a8-egress-%e7%bd%91%e5%85%b3%e6%89%a7%e8%a1%8c%e5%8f%8c%e5%90%91-tls-%e7%9a%84%e5%8f%91%e8%b5%b7>使用 Egress 网关执行双向 TLS 的发起</a><ol><li role=none aria-label=生成客户端和服务端的证书及私钥><a href=#generate-client-and-server-certificates-and-keys>生成客户端和服务端的证书及私钥</a><li role=none aria-label="部署一个双向 TLS 服务器"><a href=#deploy-a-mutual-server>部署一个双向 TLS 服务器</a><ol><li role=none aria-label="部署一个容器来测试 NGINX Deployment"><a href=#deploy-a-container-to-test-the-nginx-deployment>部署一个容器来测试 NGINX Deployment</a></ol></li><li role=none aria-label="重新部署带有客户端证书的 Egress 网关"><a href=#redeploy-the-egress-gateway-with-the-%20client-certificates>重新部署带有客户端证书的 Egress 网关</a><li role=none aria-label="为 Egress 流量配置双向 TLS 的发起"><a href=#%e4%b8%ba-egress-%e6%b5%81%e9%87%8f%e9%85%8d%e7%bd%ae%e5%8f%8c%e5%90%91-tls-%e7%9a%84%e5%8f%91%e8%b5%b7>为 Egress 流量配置双向 TLS 的发起</a><li role=none aria-label="清理双向 TLS 发起的例子"><a href=#clean-example-2>清理双向 TLS 发起的例子</a></ol></li><li role=none aria-label=清理><a href=#cleanup>清理</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>© 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> |