mirror of https://github.com/istio/istio.io.git
155 lines
73 KiB
HTML
155 lines
73 KiB
HTML
<!doctype html><html lang=zh itemscope itemtype=https://schema.org/WebPage><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=theme-color content="#466BB0"><meta name=title content="安全"><meta name=description content="描述 Istio 的授权与鉴权功能。"><meta name=keywords content="microservices,services,mesh,安全,认证,鉴权,rbac,访问控制"><meta property="og:title" content="安全"><meta property="og:type" content="website"><meta property="og:description" content="描述 Istio 的授权与鉴权功能。"><meta property="og:url" content="/v1.0/zh/docs/concepts/security/"><meta property="og:image" content="/v1.0/img/istio-logo-blue-background.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.0 / 安全</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><script>var branchName="release-1.0";var docTitle="安全";</script><link rel=alternate type=application/rss+xml title="Istio Blog" href=/v1.0/feed.xml><link rel="shortcut icon" href=/v1.0/favicons/favicon.ico><link rel=apple-touch-icon href=/v1.0/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=icon type=image/png href=/v1.0/favicons/favicon-16x16.png sizes=16x16><link rel=icon type=image/png href=/v1.0/favicons/favicon-32x32.png sizes=32x32><link rel=icon type=image/png href=/v1.0/favicons/android-36x36.png sizes=36x36><link rel=icon type=image/png href=/v1.0/favicons/android-48x48.png sizes=48x48><link rel=icon type=image/png href=/v1.0/favicons/android-72x72.png sizes=72x72><link rel=icon type=image/png href=/v1.0/favicons/android-96x196.png sizes=96x196><link rel=icon type=image/png href=/v1.0/favicons/android-144x144.png sizes=144x144><link rel=icon type=image/png href=/v1.0/favicons/android-192x192.png sizes=192x192><link rel=manifest href=/v1.0/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=Chivo:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic"><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Work Sans:400,100,100italic,300,300italic,400italic,500,500italic,700,700italic,900,900italic"><link rel=stylesheet href=https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css integrity=sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm crossorigin=anonymous><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.0.6/css/all.css><link rel=stylesheet href=/v1.0/css/light_theme_archive.css title=light><link rel="alternate stylesheet" href=/v1.0/css/dark_theme_archive.css title=dark><script src=/v1.0/js/styleSwitcher.min.js></script></head><body class=language-unknown><header><nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark justify-content-between"><a class=navbar-brand href=/v1.0/zh/><span class=logo><svg viewBox="0 0 300 300"><circle cx="150" cy="150" r="150" stroke-width="2" /><polygon points="65,240 225,240 125,270"/><polygon points="65,230 125,220 125,110"/><polygon points="135,220 225,230 135,30"/></svg></span><span class=brand-name>Istioldie 1.0</span></a>
|
||
<button class=navbar-toggler type=button data-toggle=collapse data-target=#navbarCollapse aria-controls=navbarCollapse aria-expanded=false aria-label="Toggle navigation">
|
||
<span class=navbar-toggler-icon></span></button><div class="collapse navbar-collapse justify-content-end" id=navbarCollapse><ul id=navbar-links class="navbar-nav active"><li class=nav-item><a class="nav-link active" title="了解如何部署、使用和运维 Istio。" href=/v1.0/zh/docs/>文档</a></li><li class=nav-item><a class=nav-link title="关于使用 Istio 的博客文章。" href=/v1.0/zh/blog/2018/announcing-1.0/>博客</a></li><li class=nav-item><a class=nav-link title="一堆帮助您部署、配置和使用 Istio 的资源。" href=/v1.0/zh/help/>帮助</a></li><li class=nav-item><a class=nav-link title=关于Istio的说明。 href=/v1.0/zh/about/>关于</a></li><li class="nav-item dropdown" id=gearDropdown style=white-space:nowrap><a title=选项和设置 href class=nav-link data-toggle=dropdown aria-label=Tools aria-haspopup=true aria-expanded=false><i style=width:1em class="fa fa-lg fa-cog"></i></a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=gearDropdown><a class=dropdown-item id=light-theme-item href onclick="setActiveStyleSheet('light');return false;">亮主题</a>
|
||
<a class=dropdown-item id=dark-theme-item href onclick="setActiveStyleSheet('dark');return false;">暗主题</a><div class=dropdown-divider></div><h6 class=dropdown-header>本站的其它版本</h6><a href=https://istio.io class=dropdown-item>当前版本</a>
|
||
<a href=https://preliminary.istio.io class=dropdown-item>下个版本</a>
|
||
<a href=https://archive.istio.io class=dropdown-item>旧版本</a></div></li><li class=nav-item><a id=search_show class=nav-link href title=搜索istio.io aria-label=Search><i style=width:1em class="fa fa-lg fa-search"></i></a></li></ul><form name=cse id=search_form class="form-inline mr-sm-2" 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.0/search.html>
|
||
<input id=search_textbox class=form-control name=q type=text aria-label="Search this site">
|
||
<button id=search_close type=reset aria-label="Cancel Search"><i class="far fa-lg fa-times-circle"></i></button></form></div></nav></header><div class=container-fluid><div class="row row-offcanvas"><div class="col-0 col-md-3 col-xl-2 sidebar-offcanvas"><nav class="sidebar d-print-none"><div class=spacer></div><div class=directory role=tablist><div class=card><div class=card-header role=tab id=header13><a data-toggle=collapse href=#collapse13 title="一些概念,理解它们有助于您更好地了解 Istio 系统的不同部分及其使用的抽象。" role=button aria-controls=collapse13><div><img src=/v1.0/img/concepts.svg alt=Icon class=page_icon>
|
||
概念</div></a></div><div id=collapse13 class="collapse show" data-parent=#sidebar role=tabpanel aria-labelledby=header13><div class=card-body><ul class=tree><li><a title="介绍 Istio 及其要解决的问题、顶层架构和设计目标。" href=/v1.0/zh/docs/concepts/what-is-istio/>Istio 是什么?</a></li><li><a title="介绍 Istio 中关于流量路由与控制的各项功能。" href=/v1.0/zh/docs/concepts/traffic-management/>流量管理</a></li><li><span class=current title="描述 Istio 的授权与鉴权功能。">安全</span></li><li><a title=描述策略实施和遥测机制。 href=/v1.0/zh/docs/concepts/policies-and-telemetry/>策略与遥测</a></li><li><a title="介绍 Istio 组件的性能与可伸缩性方法论、结果和最佳实践。" href=/v1.0/zh/docs/concepts/performance-and-scalability/>性能与可伸缩性</a></li></ul></div></div></div><div class=card><div class=card-header role=tab id=header21><a data-toggle=collapse href=#collapse21 title="安装包含在不同的环境下(如 Kubernetes、Consul 等)安装 Istio 控制平面,以及在应用程序部署中安装 sidecar。" role=button aria-controls=collapse21><div><img src=/v1.0/img/setup.svg alt=Icon class=page_icon>
|
||
安装</div></a></div><div id=collapse21 class=collapse data-parent=#sidebar role=tabpanel aria-labelledby=header21><div class=card-body><ul class=tree><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="关于如何在 Kubernetes 集群中安装 Istio 控制平面和添加虚拟机到 mesh 中的说明。" href=/v1.0/zh/docs/setup/kubernetes/>Kubernetes</a></label><ul class="tree collapse"><li><a title="关于 Istio 发布包下载过程的说明。" href=/v1.0/zh/docs/setup/kubernetes/download-release/>下载 Istio 发布包</a></li><li><a title="在 kubernetes 集群中快速安装 Istio service mesh 的说明。" href=/v1.0/zh/docs/setup/kubernetes/quick-start/>快速开始</a></li><li><a title="如何使用 Google Kubernetes Engine (GKE) 快速搭建 Istio 服务。" href=/v1.0/zh/docs/setup/kubernetes/quick-start-gke-dm/>使用 Google Kubernetes Engine 快速开始</a></li><li><a title="使用内含的 Helm chart 安装 Istio。" href=/v1.0/zh/docs/setup/kubernetes/helm-install/>使用 Helm 进行安装</a></li><li><a title="使用内置的 Ansible playbook 安装 Istio。" href=/v1.0/zh/docs/setup/kubernetes/ansible-install/>使用 Ansible 安装</a></li><li><a title="介绍两种将 Istio sidecar 注入应用 Pod 的方法:使用 Sidecar 注入 Webhook 自动完成,或使用 istioctl 客户端工具手工完成。" href=/v1.0/zh/docs/setup/kubernetes/sidecar-injection/>注入 Istio sidecar</a></li><li><a title="部署在 Kubernetes 之中的 Istio 服务网格,将虚拟机和物理机集成进入到服务网格的方法。" href=/v1.0/zh/docs/setup/kubernetes/mesh-expansion/>网格扩展</a></li><li><a title="安装支持多集群的 Istio。" href=/v1.0/zh/docs/setup/kubernetes/multicluster-install/>Istio 多集群设置</a></li><li><a title="演示如何独立升级 Istio 控制平面和数据平面。" href=/v1.0/zh/docs/setup/kubernetes/upgrading-istio/>升级 Istio</a></li><li><a title="这里讲述了 Istio 对 Kubernetes 中 Pod 和服务的要求。" href=/v1.0/zh/docs/setup/kubernetes/spec-requirements/>Istio 对 Pod 和服务的要求</a></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="如何对各种平台上安装的 Kubernetes 集群进行配置,以满足 Istio 的安装和运行要求。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/>各平台下 Kubernetes 集群的配置</a></label><ul class="tree collapse"><li><a title="对 AWS 中以 Kops 安装的集群进行配置以便安装运行 Istio。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/aws/>Amazon Web Services</a></li><li><a title="对 Azure 集群进行配置以便安装运行 Istio。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/azure/>Azure</a></li><li><a title="对 Google Kubernetes Engine(GKE)集群进行配置以便安装运行 Istio。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/gke/>Google Kubernetes Engine</a></li><li><a title="对 IBM Cloud Kubernetes Service(IKS)集群进行配置以便安装运行 Istio。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/ibm/>IBM Cloud Kubernetes Service</a></li><li><a title="对 Minikube 集群进行配置以便安装运行 Istio。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/minikube/>Minikube</a></li><li><a title="对 OpenShift 集群进行配置以便安装运行 Istio。" href=/v1.0/zh/docs/setup/kubernetes/platform-setup/openshift/>OpenShift</a></li></ul></li></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="基于 Consul 和 Nomad 安装 Istio 控制平面。" href=/v1.0/zh/docs/setup/consul/>Nomad & Consul</a></label><ul class="tree collapse"><li><a title="通过 Docker Compose 快速安装 Istio service mesh。" href=/v1.0/zh/docs/setup/consul/quick-start/>通过 Docker 快速安装</a></li><li><a title="基于 Consul 和 Nomad 安装 Istio 控制平面。" href=/v1.0/zh/docs/setup/consul/install/>安装</a></li></ul></li></ul></div></div></div><div class=card><div class=card-header role=tab id=header27><a data-toggle=collapse href=#collapse27 title="如何用 Istio 系统实现特定目标的行为。" role=button aria-controls=collapse27><div><img src=/v1.0/img/tasks.svg alt=Icon class=page_icon>
|
||
任务</div></a></div><div id=collapse27 class=collapse data-parent=#sidebar role=tabpanel aria-labelledby=header27><div class=card-body><ul class=tree><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title=演示Istio流量路由功能的任务。 href=/v1.0/zh/docs/tasks/traffic-management/>流量管理</a></label><ul class="tree collapse"><li><a title="此任务向您展示如何根据权重和 HTTP header配置动态请求路由。" href=/v1.0/zh/docs/tasks/traffic-management/request-routing/>配置请求路由</a></li><li><a title=此任务说明如何注入延迟并测试应用程序的弹性。 href=/v1.0/zh/docs/tasks/traffic-management/fault-injection/>故障注入</a></li><li><a title=向您展示如何将流量从旧版本迁移到新版本的服务。 href=/v1.0/zh/docs/tasks/traffic-management/traffic-shifting/>流量转移</a></li><li><a title="本任务用于示范如何使用 Istio 在 Envoy 中设置请求超时。" href=/v1.0/zh/docs/tasks/traffic-management/request-timeouts/>设置请求超时</a></li><li><a title="介绍在服务网格 Istio 中如何配置外部公开服务。" href=/v1.0/zh/docs/tasks/traffic-management/ingress/>控制 Ingress 流量</a></li><li><a title="配置 Istio 令其以 TLS 或双向 TLS 的方式在网格外公开服务。" href=/v1.0/zh/docs/tasks/traffic-management/secure-ingress/>用 HTTPS 加密 Gateway</a></li><li><a title="在 Istio 中配置从网格内访问外部服务的流量路由。" href=/v1.0/zh/docs/tasks/traffic-management/egress/>控制 Egress 流量</a></li><li><a title="此任务描述 Istio 如何配置出口流量的 TLS。" href=/v1.0/zh/docs/tasks/traffic-management/egress-tls-origination/>出口流量的 TLS</a></li><li><a title="描述如何通过专用网关服务将流量定向到外部服务来配置 Istio。" href=/v1.0/zh/docs/tasks/traffic-management/egress-gateway/>配置 Egress 网关</a></li><li><a title=演示弹性应用所需的熔断能力。 href=/v1.0/zh/docs/tasks/traffic-management/circuit-breaking/>熔断</a></li><li><a title="此任务演示了 Istio 的流量镜像/阴影功能。" href=/v1.0/zh/docs/tasks/traffic-management/mirroring/>镜像</a></li><li><a title="展示如何对 Istio service 进行健康检查。" href=/v1.0/zh/docs/tasks/traffic-management/app-health-check/>Istio Service 健康检查</a></li></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title=演示对服务网格进行安全加固的方法。 href=/v1.0/zh/docs/tasks/security/>安全</a></label><ul class="tree collapse"><li><a title="介绍如何使用 Istio 认证策略设置双向 TLS 和基本的终端用户认证。" href=/v1.0/zh/docs/tasks/security/authn-policy/>基础认证策略</a></li><li><a title="对 Istio 的自动双向 TLS 认证功能进行体验和测试。" href=/v1.0/zh/docs/tasks/security/mutual-tls/>测试双向 TLS</a></li><li><a title=展示如何在服务网格中进行基于角色的访问控制。 href=/v1.0/zh/docs/tasks/security/role-based-access-control/>基于角色的访问控制</a></li><li><a title="运维人员如何使用现有根证书配置 Citadel 进行证书以及密钥的签发。" href=/v1.0/zh/docs/tasks/security/plugin-ca-cert/>插入外部 CA 密钥和证书</a></li><li><a title="如何在 Kubernetes 中启用 Citadel 的健康检查。" href=/v1.0/zh/docs/tasks/security/health-check/>Citadel 的健康检查</a></li><li><a title="如何渐进式的为现有 Istio 服务添加双向 TLS 支持。" href=/v1.0/zh/docs/tasks/security/mtls-migration/>双向 TLS 的迁移</a></li><li><a title="展示如何在 HTTPS 服务上启用双向 TLS。" href=/v1.0/zh/docs/tasks/security/https-overlay/>通过 HTTPS 进行双向 TLS</a></li></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title=演示策略实施功能。 href=/v1.0/zh/docs/tasks/policy-enforcement/>策略</a></label><ul class="tree collapse"><li><a title="这一任务展示了如何使用 Istio 动态的对服务通信进行速率限制。" href=/v1.0/zh/docs/tasks/policy-enforcement/rate-limiting/>启用速率限制</a></li><li><a title="展示使用简单的 Denier 适配器或黑白名单对服务进行访问控制的方法。" href=/v1.0/zh/docs/tasks/policy-enforcement/denial-and-list/>Denier 适配器以及黑白名单</a></li></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title=演示从服务网格收集遥测信息的方法。 href=/v1.0/zh/docs/tasks/telemetry/>遥测</a></label><ul class="tree collapse"><li><a title="如何进行代理配置将跟踪请求发送给 Zipkin 或 Jaeger。" href=/v1.0/zh/docs/tasks/telemetry/distributed-tracing/>分布式跟踪</a></li><li><a title="这一任务讲述如何配置 Istio,进行指标和日志的收集工作。" href=/v1.0/zh/docs/tasks/telemetry/metrics-logs/>收集指标和日志</a></li><li><a title="本任务展示了如何配置 Istio 进行 TCP 服务的指标收集。" href=/v1.0/zh/docs/tasks/telemetry/tcp-metrics/>获取 TCP 服务指标</a></li><li><a title="此任务说明如何使用 Prometheus 查询 Istio 指标。" href=/v1.0/zh/docs/tasks/telemetry/querying-metrics/>查询 Prometheus 的指标</a></li><li><a title="此任务说明如何设置和使用 Istio 仪表板来监视网格流量。" href=/v1.0/zh/docs/tasks/telemetry/using-istio-dashboard/>使用 Grafana 进行指标可视化</a></li><li><a title="此任务说明如何在 Istio 网格中生成服务图。" href=/v1.0/zh/docs/tasks/telemetry/servicegraph/>生成服务图</a></li><li><a title="此任务将展示如何配置 Istio 将日志记录到 Fluentd 守护进程。" href=/v1.0/zh/docs/tasks/telemetry/fluentd/>使用 Fluentd 记录日志</a></li></ul></li></ul></div></div></div><div class=card><div class=card-header role=tab id=header48><a data-toggle=collapse href=#collapse48 title="这里包括多个可供 Istio 使用的可完整工作的示例,你可以用来亲自部署和体验这些示例。" role=button aria-controls=collapse48><div><img src=/v1.0/img/examples.svg alt=Icon class=page_icon>
|
||
示例</div></a></div><div id=collapse48 class=collapse data-parent=#sidebar role=tabpanel aria-labelledby=header48><div class=card-body><ul class=tree><li><a title="部署一个用于演示多种 Istio 特性的应用,由四个单独的微服务构成。" href=/v1.0/zh/docs/examples/bookinfo/>Bookinfo 应用</a></li><li><a title="如何在 Istio 服务网格中使用多种流量管理功能。" href=/v1.0/zh/docs/examples/intelligent-routing/>智能路由</a></li><li><a title="演示如何使用 Istio Mixer 和 Istio sidecar 获取指标和日志,并在不同的服务间进行跟踪。" href=/v1.0/zh/docs/examples/telemetry/>深入遥测</a></li><li><a title="说明如何在谷歌云 Endpoints 服务中手动整合 Istio。" href=/v1.0/zh/docs/examples/endpoints/>在谷歌云 Endpoints 服务中安装 Istio</a></li><li><a title="在单一服务网格中,如何使用 Istio 对 Kubernetes 集群以及虚拟机进行控制。" href=/v1.0/zh/docs/examples/integrating-vms/>虚拟机集成</a></li><li><a title="基于 GKE 的 Istio 多集群安装。" href=/v1.0/zh/docs/examples/multicluster/gke/>Google Kubernetes Engine</a></li><li><a title="多 IBM Cloud Private 集群安装 Istio 示例。" href=/v1.0/zh/docs/examples/multicluster/icp/>IBM Cloud Private</a></li></ul></div></div></div><div class=card><div class=card-header role=tab id=header69><a data-toggle=collapse href=#collapse69 title="参考部分包含详细的权威参考资料,如命令行选项、配置选项和 API 调用参数。" role=button aria-controls=collapse69><div><img src=/v1.0/img/reference.svg alt=Icon class=page_icon>
|
||
参考</div></a></div><div id=collapse69 class=collapse data-parent=#sidebar role=tabpanel aria-labelledby=header69><div class=card-body><ul class=tree><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title=关于配置选项的详细信息。 href=/v1.0/zh/docs/reference/config/>配置</a></label><ul class="tree collapse"><li><a title="描述了使用 Helm chart 安装 Istio 时可以使用的选项。" href=/v1.0/zh/docs/reference/config/installation-options/>安装选项</a></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title=关于如何配置Istio授权特性的描述。 href=/v1.0/zh/docs/reference/config/authorization/>授权</a></label><ul class="tree collapse"></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="描述如何配置 Istio 的策略和遥测功能。" href=/v1.0/zh/docs/reference/config/policy-and-telemetry/>策略和遥测</a></label><ul class="tree collapse"><li><a title=介绍策略和控制中会用到的一些基础属性词汇。 href=/v1.0/zh/docs/reference/config/policy-and-telemetry/attribute-vocabulary/>属性词汇</a></li><li><a title="Mixer 的配置表达式语言参考。" href=/v1.0/zh/docs/reference/config/policy-and-telemetry/expression-language/>表达式语言</a></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="Mixer 适配器能够让 Istio 连接各种基础设施后端以完成类似指标和日志这样的功能。" href=/v1.0/zh/docs/reference/config/policy-and-telemetry/adapters/>适配器</a></label><ul class="tree collapse"></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="Mixer 模板用于将数据发送到各个适配器。" href=/v1.0/zh/docs/reference/config/policy-and-telemetry/templates/>模板</a></label><ul class="tree collapse"></ul></li><li><a title="通过 Mixer 从 Istio 导出的默认监控指标(Metrics)。" href=/v1.0/zh/docs/reference/config/policy-and-telemetry/metrics/>默认监控指标</a></li></ul></li><li><a title=流量路由配置。 href=/v1.0/zh/docs/reference/config/istio.networking.v1alpha3/>通信路由</a></li></ul></li><li class=sublist><label class=tree-toggle><i class="fa fa-lg fa-caret-right"></i><a title="描述 Istio 命令和工具的用法及选项。" href=/v1.0/zh/docs/reference/commands/>命令</a></label><ul class="tree collapse"><li><a title="Galley 为 Istio 提供配置管理服务。" href=/v1.0/zh/docs/reference/commands/galley/>galley</a></li><li><a title="Istio 控制界面。" href=/v1.0/zh/docs/reference/commands/istioctl/>istioctl</a></li></ul></li></ul></div></div></div></div></nav></div><div class="col-12 col-md-9 col-xl-8"><p class=d-md-none><label class=sidebar-toggler data-toggle=offcanvas><i class="fa fa-sign-out-alt"></i></label></p><main aria-labelledby=title><div class=pagenav><p><a href=/v1.0/zh/docs/concepts/ title="一些概念,理解它们有助于您更好地了解 Istio 系统的不同部分及其使用的抽象。"><i style=transform:scaleX(-1) class="fa fa-level-up-alt"></i> 概念</a></p></div><h1 id=title>安全</h1><nav class="toc-inlined d-xl-none d-print-none"><hr><div class=directory role=directory><nav id=InlinedTableOfContents><ul><li><a href=#heading>高级架构</a></li><li><a href=#istio->Istio 身份</a></li><ul><li><a href=#istio--spiffe>Istio 安全与 SPIFFE</a></li></ul><li><a href=#pki>PKI</a></li><ul><li><a href=#kubernetes->Kubernetes 方案</a></li><li><a href=#heading-1>本地机器方案</a></li><li><a href=#heading-2>代理程序代理节点(开发中)</a></li></ul><li><a href=#heading-3>最佳实践</a></li><ul><li><a href=#heading-4>部署指南</a></li><li><a href=#heading-5>示例</a></li></ul><li><a href=#heading-6>认证</a></li><ul><li><a href=#-tls->双向 TLS 认证</a></li><ul><li><a href=#heading-7>安全命名</a></li></ul><li><a href=#heading-8>认证架构</a></li><li><a href=#heading-9>认证策略</a></li><ul><li><a href=#heading-10>策略存储范围</a></li><li><a href=#heading-11>目标选择器</a></li><li><a href=#heading-12>传输认证</a></li><li><a href=#heading-13>来源身份认证</a></li><li><a href=#heading-14>主认证绑定</a></li></ul><li><a href=#heading-15>更新认证策略</a></li></ul><li><a href=#heading-16>授权和鉴权</a></li><ul><li><a href=#heading-17>授权架构</a></li><li><a href=#heading-18>启用授权</a></li><li><a href=#heading-19>授权策略</a></li><ul><li><a href=#servicerole><code>ServiceRole</code></a></li><li><a href=#servicerolebinding><code>ServiceRoleBinding</code></a></li></ul><li><a href=#heading-20>使用其他授权机制</a></li></ul><li><a href=#see-also>See also</a></li></ul></nav></div><hr></nav><p>将单一应用程序分解为微服务可提供各种好处,包括更好的灵活性、可伸缩性以及服务复用的能力。但是,微服务也有特殊的安全需求:</p><ul><li>为了抵御中间人攻击,需要流量加密。</li><li>为了提供灵活的服务访问控制,需要双向 TLS 和细粒度的访问策略。</li><li>要审核谁在什么时候做了什么,需要审计工具。</li></ul><p>Istio Security 尝试提供全面的安全解决方案来解决所有这些问题。</p><p>本页概述了如何使用 Istio 的安全功能来保护您的服务,无论您在何处运行它们。特别是 Istio 安全性可以缓解针对您的数据,端点,通信和平台的内部和外部威胁。</p><figure style=width:80%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:56.25%><a class=not-for-endnotes href=/v1.0/docs/concepts/security/overview.svg><img class=element-to-stretch src=/v1.0/docs/concepts/security/overview.svg alt="Istio 安全模型的组件构成。" title="Istio 安全概述"></a></div><figcaption>Istio 安全概述</figcaption></figure><p>Istio 安全功能提供强大的身份,强大的策略,透明的 TLS 加密以及用于保护您的服务和数据的身份验证,授权和审计(AAA)工具。 Istio 安全的目标是:</p><ul><li><p><strong>默认安全</strong> : 应用程序代码和基础结构无需更改</p></li><li><p><strong>深度防御</strong> : 与现有安全系统集成,提供多层防御</p></li><li><p><strong>零信任网络</strong> : 在不受信任的网络上构建安全解决方案</p></li></ul><p>访问我们的<a href=/v1.0/zh/docs/tasks/security/mtls-migration/>Mutual TLS Migration docs</a>,开始在部署的服务中使用Istio安全功能。
|
||
请访问我们的<a href=/v1.0/zh/docs/tasks/security/>安全任务</a>,有关使用安全功能的详细说明。</p><p>如图所示,Istio 的 Citadel 用加载 Secret 卷的方式在 Kubernetes 容器中完成证书和密钥的分发。如果服务运行在虚拟机或物理机上,则会使用运行在本地的 Node agent,它负责在本地生成私钥和 CSR(证书签发申请),把 CSR 发送给 Citadel 进行签署,并把生成的证书和私钥分发给 Envoy。</p><h2 id=heading>高级架构</h2><p>Istio 中的安全性涉及多个组件:</p><ul><li><p><strong>堡垒</strong> 用于密钥和证书管理</p></li><li><p><strong>Sidecar 和周边代理</strong> 实现客户端和服务器之间的安全通信</p></li><li><p><strong>Pilot</strong> 将<a href=/v1.0/zh/docs/concepts/security/#%E6%8E%88%E6%9D%83%E7%AD%96%E7%95%A5>授权策略</a>和<a href=/v1.0/zh/docs/concepts/security/#%E5%AE%89%E5%85%A8%E5%91%BD%E5%90%8D>安全命名信息</a>分发给代理</p></li><li><p><strong>Mixer</strong> 管理授权和审计</p></li></ul><figure style=width:80%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:56.25%><a class=not-for-endnotes href=/v1.0/docs/concepts/security/architecture.svg><img class=element-to-stretch src=/v1.0/docs/concepts/security/architecture.svg alt="Istio 安全架构" title="Istio 安全架构"></a></div><figcaption>Istio 安全架构</figcaption></figure><p>在线面的部分中,我们将详细介绍 Istio 安全功能。</p><h2 id=istio->Istio 身份</h2><p>身份是任何安全基础架构的基本概念。在服务到服务通信开始时,双方必须与其身份信息交换凭证以用于相互认证目的。
|
||
在客户端,根据<a href=/v1.0/zh/docs/concepts/security/#%E5%AE%89%E5%85%A8%E5%91%BD%E5%90%8D>安全命名</a>信息检查服务器的标识,以查看它是否是该服务的授权运行程序。
|
||
在服务器端,服务器可以根据<a href=/v1.0/zh/docs/concepts/security/#%E6%8E%88%E6%9D%83%E7%AD%96%E7%95%A5>授权策略</a> 确定客户端可以访问哪些信息,审核谁在什么时间访问了什么,根据服务向客户收费他们使用并拒绝任何未能支付账单的客户访问服务。</p><p>在 Istio 身份模型中,Istio 使用一流的服务标识来确定服务的身份。
|
||
这为表示人类用户,单个服务或一组服务提供了极大的灵活性和粒度。
|
||
在没有此类身份的平台上,Istio 可以使用可以对服务实例进行分组的其他身份,例如服务名称。</p><p>不同平台上的 Istio 服务标识:</p><ul><li><p><strong>Kubernetes</strong>: Kubernetes 服务帐户</p></li><li><p><strong>GKE/GCE</strong>: 可以使用 GCP 服务帐户</p></li><li><p><strong>GCP</strong>: GCP 服务帐户</p></li><li><p><strong>AWS</strong>: AWS IAM 用户/角色 帐户</p></li><li><p><strong>On-premises (non-Kubernetes)</strong>: 用户帐户,自定义服务帐户,服务名称,istio 服务帐户或 GCP 服务帐户。</p></li></ul><p>自定义服务帐户引用现有服务帐户,就像客户的身份目录管理的身份一样。</p><h3 id=istio--spiffe>Istio 安全与 SPIFFE</h3><p><a href=https://spiffe.io/>SPIFFE</a> 标准提供了一个框架规范,该框架能够跨异构环境引导和向服务发布身份。</p><p>Istio 和 SPIFFE 共享相同的身份文件:<a href=https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE-ID.md>SVID</a> (SPIFFE可验证身份证件)。
|
||
例如,在 Kubernetes 中,X.509 证书的 URI 字段格式为"spiffe://<domain>/ns/<namespace>/sa/<serviceaccount>”。
|
||
这使 Istio 服务能够建立和接受与其他 SPIFFE 兼容系统的连接。</p><p>Istio 安全性和 <a href=https://spiffe.io/spire/>SPIRE</a>,它是 SPIFFE 的实现,在 PKI 实现细节上有所不同。
|
||
Istio 提供更全面的安全解决方案,包括身份验证,授权和审计。</p><h2 id=pki>PKI</h2><p>Istio PKI 建立在 Istio Citadel 之上,可为每个工作负载安全地提供强大的工作负载标识。
|
||
Istio 使用 X.509 证书来携带 <a href=https://spiffe.io/>SPIFFE</a> 格式的身份。
|
||
PKI 还可以大规模自动化密钥和证书轮换。</p><p>Istio 支持在 Kubernetes pod 和本地计算机上运行的服务。
|
||
目前,我们为每个方案使用不同的证书密钥配置机制。</p><h3 id=kubernetes->Kubernetes 方案</h3><ol><li><p>Citadel 监视 Kubernetes <code>apiserver</code>,为每个现有和新的服务帐户创建 SPIFFE 证书和密钥对。 Citadel 将证书和密钥对存储为 <a href=https://kubernetes.io/docs/concepts/configuration/secret/>Kubernetes secrets</a>。</p></li><li><p>创建 pod 时,Kubernetes 会根据其服务帐户通过<a href=https://kubernetes.io/docs/concepts/storage/volumes/#secret>Kubernetes secret volume</a>将证书和密钥对安装到 pod。</p></li><li><p>Citadel 监视每个证书的生命周期,并通过重写 Kubernetes 秘密自动轮换证书。</p></li><li><p>Pilot 生成<a href=/v1.0/zh/docs/concepts/security/#%E5%AE%89%E5%85%A8%E5%91%BD%E5%90%8D>安全命名</a>信息,该信息定义了哪些服务帐户可以运行某个服务。 Pilot 然后将安全命名信息传递给sidecar特使。</p></li></ol><h3 id=heading-1>本地机器方案</h3><ol><li><p>Citadel 创建 gRPC 服务以获取<a href=https://en.wikipedia.org/wiki/Certificate_signing_request>证书签名请求</a>(CSR)。</p></li><li><p>节点代理生成私钥和 CSR,并将 CSR 及其凭据发送给 Citadel 进行签名。</p></li><li><p>Citadel 验证 CSR 承载的凭证,并签署 CSR 以生成证书。</p></li><li><p>节点代理将从 Citadel 接收的证书和私钥发送给 Envoy。</p></li><li><p>上述 CSR 过程会定期重复进行证书和密钥轮换。</p></li></ol><h3 id=heading-2>代理程序代理节点(开发中)</h3><p>在不久的将来,Istio 将在 Kubernetes 中使用节点代理进行证书和密钥提供,如下图所示。请注意,本地计算机的标识提供流程是相同的,因此我们仅描述 Kubernetes 方案。</p><figure style=width:80%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:56.25%><a class=not-for-endnotes href=/v1.0/docs/concepts/security/node_agent.svg><img class=element-to-stretch src=/v1.0/docs/concepts/security/node_agent.svg alt="PKI 与 Kubernetes 中的节点代理" title="PKI 与 Kubernetes 中的节点代理"></a></div><figcaption>PKI 与 Kubernetes 中的节点代理</figcaption></figure><p>流程如下:</p><ol><li><p>Citadel 创建一个 gRPC 服务来接受 CSR 请求。</p></li><li><p>特使通过 Envoy 秘密发现服务(SDS)API 发送证书和密钥请求。</p></li><li><p>收到 SDS 请求后,节点代理会创建私钥和 CSR,并将 CSR 及其凭据发送给 Citadel 进行签名。</p></li><li><p>Citadel 验证 CSR 中携带的凭证,并签署 CSR 以生成证书。</p></li><li><p>节点代理通过 Envoy SDS API 将从 Citadel 接收的证书和私钥发送给 Envoy。</p></li><li><p>上述 CSR 过程会定期重复进行证书和密钥轮换。</p></li></ol><h2 id=heading-3>最佳实践</h2><p>在本节中,我们提供了一些部署指南并讨论了一个真实的场景。</p><h3 id=heading-4>部署指南</h3><p>如果有多个服务运维团队(又名<a href=https://en.wikipedia.org/wiki/Site_reliability_engineering>SREs</a>)在中型或大型集群中部署不同的服务,我们建议创建一个单独的<a href=https://kubernetes.io/docs/tasks/administer-cluster/namespaces-walkthrough/>Kubernetes名称空间</a>让每个 SRE 团队隔离他们的访问权限。例如,您可以为 <code>team1</code> 创建 <code>team1-ns</code> 名称空间,为 <code>team2</code> 创建 <code>team2-ns</code> 名称空间,这样两个团队都无法访问彼此的服务。</p><blockquote><p><img src=/v1.0/img/exclamation-mark.svg alt=Warning title=Warning style=width:2rem;height:2rem;display:inline>如果 Citadel 遭到入侵,则可能会暴露集群中的所有托管密钥和证书。我们强烈建议在专用命名空间中运行 Citadel(例如,<code>istio-citadel-ns</code>),以便仅限管理员访问群集。</p></blockquote><h3 id=heading-5>示例</h3><p>让我们考虑一个带有三种服务的三层应用程序:<code>photo-frontend</code>,<code>photo-backend</code> 和 <code>datastore</code>。照片 SRE 团队管理 <code>photo-frontend</code> 和 <code>photo-backend</code> 服务,而数据存储 SRE 团队管理 <code>datastore</code> 服务。 <code>photo-frontend</code>服务可以访问<code>photo-backend</code>,<code>photo-backend</code> 服务可以访问 <code>datastore</code>。但是,<code>photo-frontend</code>服务无法访问 <code>datastore</code>。</p><p>在这种情况下,集群管理员创建三个名称空间:<code>istio-citadel-ns</code>,<code>photo-ns</code>和<code>datastore-ns</code>。管理员可以访问所有名称空间,每个团队只能访问自己的名称空间。照片SRE团队创建了两个服务帐户,分别在<code>photo-ns</code>命名空间中运行<code>photo-frontend</code>和<code>photo-backend</code>。数据存储区 SRE 团队创建一个服务帐户,以在<code>datastore-ns</code>命名空间中运行<code>datastore</code>服务。此外,我们需要在 <a href=/v1.0/zh/docs/concepts/policies-and-telemetry/>Istio Mixer</a> 中强制执行服务访问控制,使得<code>photo-frontend</code>无法访问数据存储区。</p><p>在此设置中,Kubernetes 可以隔离运营商管理服务的权限。 Istio 管理所有名称空间中的证书和密钥,并对服务实施不同的访问控制规则。</p><h2 id=heading-6>认证</h2><p>Istio 提供两种类型的身份验证:</p><ul><li><p><strong>传输身份验证</strong>,也称为<strong>服务到服务身份验证</strong>:验证直接客户端进行连接。
|
||
Istio 提供 <a href=https://en.wikipedia.org/wiki/Mutual_authentication>双向 TLS</a> 作为传输身份验证的完整堆栈解决方案。
|
||
您可以轻松打开此功能,而无需更改服务代码。这个解决方案:</p><ul><li>为每个服务提供强大的身份,表示其角色,以实现跨群集和云的互操作性。</li><li>保护服务到服务通信和最终用户到服务通信。</li><li>提供密钥管理系统,以自动执行密钥和证书生成,分发和轮换。</li></ul></li><li><p><strong>来源身份认证</strong>,也称为<strong>最终用户身份验证</strong>:验证原始客户端将请求作为最终用户或设备。 Istio 通过 JSON Web Token(JWT)验证和 <a href=https://auth0.com/><code>Auth0</code></a>、<a href=https://firebase.google.com/docs/auth/><code>Firebase Auth</code></a> 、<a href=https://developers.google.com/identity/protocols/OpenIDConnect><code>Google Auth</code></a> 和自定义身份验证来简化开发人员体验,并且轻松实现请求级别的身份验证。</p></li></ul><p>在这两种情况下,Istio 都通过自定义 Kubernetes API 将身份认证策略存储在<code>Istio 配置存储</code>中。 Pilot 会在适当的时候为每个代理保持最新状态以及密钥。此外,Istio 支持在许可模式下进行身份验证,以帮助您了解策略更改在其生效之前如何影响您的安全状态。</p><h3 id=-tls->双向 TLS 认证</h3><p>Istio 隧道通过客户端和服务器端进行服务到服务通信 <a href=https://envoyproxy.github.io/envoy/>Envoy 代理</a>。对于客户端调用服务器,遵循的步骤是:</p><ol><li><p>Istio 将出站流量从客户端重新路由到客户端的本地 sidecar Envoy。</p></li><li><p>客户端 Envoy 与服务器端 Envoy 开始双向 TLS 握手。在握手期间,客户端 Envoy 还执行<a href=/v1.0/zh/docs/concepts/security/#%E5%AE%89%E5%85%A8%E5%91%BD%E5%90%8D>安全命名</a>检查,以验证服务器证书中提供的服务帐户是否有权运行目标服务。</p></li><li><p>客户端 Envoy 和服务器端 Envoy 建立了一个双向的 TLS 连接,Istio 将流量从客户端 Envoy 转发到服务器端Envoy。</p></li><li><p>授权后,服务器端 Envoy 通过本地 TCP 连接将流量转发到服务器服务。</p></li></ol><h4 id=heading-7>安全命名</h4><p>安全命名信息包含来自服务器标识的 <em>N到N</em> 映射,这些映射在证书中编码到由发现服务或 DNS 引用的服务名称。从身份 <code>A</code> 到服务名称 <code>B</code> 的映射意味着"允许 <code>A</code> 并授权其运行服务 <code>B</code> “。 Pilot 观察Kubernetes<code>apiserver</code>,生成安全的命名信息,并将其安全地分发给 sidecar Envoys。以下示例说明了为什么安全命名在身份验证中至关重要。</p><p>假设运行服务 <code>datastore</code> 的合法服务器仅使用 <code>infra-team</code> 标识。恶意用户拥有 <code>test-team</code> 身份的证书和密钥。恶意用户打算模拟服务以检查从客户端发送的数据。恶意用户使用证书和 <code>test-team</code> 身份的密钥部署伪造服务器。假设恶意用户成功攻击了发现服务或 DNS,以将 <code>datastore</code> 服务名称映射到伪造服务器。</p><p>当客户端调用 <code>datastore</code> 服务时,它从服务器的证书中提取 <code>test-team</code> 标识,并检查是否允许 <code>test-team</code> 运行带有安全命名信息的 <code>datastore</code>。客户端检测到 <code>test-team</code> 不允许运行 <code>datastore</code> 服务,并且验证失败。</p><h3 id=heading-8>认证架构</h3><p>您可以使用身份认证策略为在 Istio 网格中接收请求的服务指定身份验证要求。网格操作者使用 <code>.yaml</code> 文件来指定策略。部署后,策略将保存在 Istio 配置存储中。 Pilot,Istio 控制器,监视配置存储。在任何策略变更后,Pilot 会将新策略转换为适当的配置,告知 Envoy sidecar 代理如何执行所需的身份验证机制。 Pilot 可以获取公钥并将其附加到 JWT 验证配置。或者,Pilot 提供 Istio 系统管理的密钥和证书的路径,并将它们安装到应用程序窗格以进行双向 TLS。您可以在 <a href=/v1.0/zh/docs/concepts/security/#pki>PKI 部分</a>中找到更多信息。 Istio 异步发送配置到目标端点。代理收到配置后,新的身份验证要求会立即生效。</p><p>发送请求的客户端服务负责遵循必要的身份验证机制。对于源身份验证(JWT),应用程序负责获取 JWT 凭据并将其附加到请求。对于双向 TLS,Istio 提供<a href=/v1.0/docs/concepts/traffic-management/#destination-rules>目标规则</a>。运营商可以使用目标规则来指示客户端代理使用TLS与服务器端预期的证书进行初始连接。您可以在<a href=/v1.0/zh/docs/concepts/security/#%E5%8F%8C%E5%90%91-TLS-%E8%AE%A4%E8%AF%81>PKI和身份部分</a>中找到有关双向 TLS 如何在 Istio 中工作的更多信息。</p><figure style=width:60%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:67.12%><a class=not-for-endnotes href=/v1.0/docs/concepts/security/authn.svg><img class=element-to-stretch src=/v1.0/docs/concepts/security/authn.svg alt=认证架构 title=认证架构></a></div><figcaption>认证架构</figcaption></figure><p>Istio 将两种类型的身份验证以及凭证中的其他声明(如果适用)输出到下一层:<a href=/v1.0/zh/docs/concepts/security/#%E6%8E%88%E6%9D%83%E5%92%8C%E9%89%B4%E6%9D%83>授权</a>。此外,运维操作者可以指定将传输或原始身份验证中的哪个身份作为<code>委托人</code>使用。</p><h3 id=heading-9>认证策略</h3><p>本节中提供了更多 Istio 认证策略方面的细节。正如<a href=/v1.0/zh/docs/concepts/security#%E8%AE%A4%E8%AF%81%E6%9E%B6%E6%9E%84>认证架构</a>中所说的,认证策略是对服务收到的请求生效的。要在双向 TLS 中指定客户端认证策略,需要在 <code>DetinationRule</code> 中设置 <code>TLSSettings</code>。<a href=/v1.0/docs/reference/config/istio.networking.v1alpha3/#TLSSettings>TLS 设置参考文档</a>中有更多这方面的信息。和其他的 Istio 配置一样,可以用 <code>.yaml</code> 文件的形式来编写认证策略,然后使用 <code>istioctl</code> 进行部署。</p><p>下面例子中的认证策略要求 <code>reviews</code> 服务必须使用双向 TLS:</p><pre><code class=language-yaml>apiVersion: "authentication.istio.io/v1alpha1"
|
||
kind: "Policy"
|
||
metadata:
|
||
name: "reviews"
|
||
spec:
|
||
targets:
|
||
- name: reviews
|
||
peers:
|
||
- mtls: {}</code></pre><h4 id=heading-10>策略存储范围</h4><p>Istio 可以在名称空间范围或网络范围存储中存储身份认证策略:</p><ul><li><p>为 <code>kind</code> 字段指定了网格范围策略,其值为 <code>MeshPolicy</code>,名称为 <code>default</code>。例如:</p><pre><code class=language-yaml>apiVersion: "authentication.istio.io/v1alpha1"
|
||
kind: "MeshPolicy"
|
||
metadata:
|
||
name: "default"
|
||
spec:
|
||
peers:
|
||
- mtls: {}</code></pre></li><li><p>为 <code>kind</code> 字段和指定的命名空间指定名称空间范围策略,其值为 <code>Policy</code>。如果未指定,则使用默认命名空间。例如,名称空间 <code>ns1</code>:</p><pre><code class=language-yaml>apiVersion: "authentication.istio.io/v1alpha1"
|
||
kind: "Policy"
|
||
metadata:
|
||
name: "default"
|
||
namespace: "ns1"
|
||
spec:
|
||
peers:
|
||
- mtls: {}</code></pre></li></ul><p>命名空间范围存储中的策略只能影响同一命名空间中的服务。 mesh-scope 中的策略可以影响网格中的所有服务。为防止冲突和滥用,只能在网状范围存储中定义一个策略。该策略必须命名为<code>default</code>并且有一个空的<code>targets:</code>部分。您可以在我们的<a href=/v1.0/zh/docs/concepts/security/#%E7%9B%AE%E6%A0%87%E9%80%89%E6%8B%A9%E5%99%A8>目标选择器部分</a>中找到更多信息。</p><h4 id=heading-11>目标选择器</h4><p>身份认证策略的目标指定策略适用的服务。以下示例显示了一个<code>targets:</code>部分,指定该策略适用于:</p><ul><li>任何端口上的<code>product-page</code>服务。</li><li>端口<code>9000</code>上的评论服务。</li></ul><pre><code class=language-yaml>targets:
|
||
- name: product-page
|
||
- name: reviews
|
||
ports:
|
||
- number: 9000</code></pre><p>如果您未提供<code>targets:</code>部分,则 Istio 将策略与策略存储范围内的所有服务匹配。因此,<code>targets:</code>部分可以帮助您指定策略的范围:</p><ul><li><p>网格范围策略:在网格范围存储中定义的策略,没有目标选择器部分。<strong>网格中</strong>最多只能有<strong>一个</strong>网格范围的策略。</p></li><li><p>命名空间范围的策略:在命名空间范围存储中定义的策略,名称为 <code>default</code> 且没有目标选择器部分。<strong>每个命名空间</strong>最多只能有<strong>一个</strong>名称空间范围的策略。</p></li><li><p>特定于服务的策略:在命名空间范围存储中定义的策略,具有非空目标选择器部分。命名空间可以具有<strong>零个,一个或多个</strong>特定于服务的策略。</p></li></ul><p>对于每项服务,Istio 都应用最窄的匹配策略。顺序是:<strong>特定于服务>名称空间范围>网格范围</strong>。如果多个特定于服务的策略与服务匹配,则 Istio 随机选择其中一个。运营商在配置其策略时必须避免此类冲突。</p><p>为了强制网状范围和命名空间范围的策略的唯一性,Istio 每个网格只接受一个身份认证策略,每个命名空间只接受一个身份认证策略。 Istio 还要求网格范围和命名空间范围的策略具有特定名称<code>default</code>。</p><h4 id=heading-12>传输认证</h4><p><code>peers:</code>部分定义了策略中传输身份验证支持的身份验证方法和相关参数。该部分可以列出多个方法,并且只有一个方法必须满足认证才能通过。但是,从 Istio 0.7 版本开始,当前支持的唯一传输身份验证方法是双向 TLS。如果您不需要传输身份验证,请完全跳过此部分。</p><p>以下示例显示了使用双向 TLS 启用传输身份验证的<code>peers:</code>部分。</p><pre><code class=language-yaml>peers:
|
||
- mtls: {}</code></pre><p>目前,双向 TLS 设置不需要任何参数。因此,<code>-mtls:{}</code>,<code>- mtls:</code>或<code>- mtls:null</code>声明被视为相同。将来,双向 TLS 设置可以携带参数以提供不同的双向 TLS 实现。</p><h4 id=heading-13>来源身份认证</h4><p><code>origins:</code> 部分定义了原始身份验证支持的身份验证方法和相关参数。 Istio 仅支持 JWT 原始身份验证。但是,策略可以列出不同发行者的多个 JWT。与传输身份验证类似,只有一种列出的方法必须满足身份验证才能通过。</p><p>以下示例策略为原始身份验证指定了一个 <code>origin:</code> 部分,该部分接受 Google 发布的 JWT:</p><pre><code class=language-yaml>origins:
|
||
- jwt:
|
||
issuer: "https://accounts.google.com"
|
||
jwksUri: "https://www.googleapis.com/oauth2/v3/certs"</code></pre><h4 id=heading-14>主认证绑定</h4><p>主认证关系用键值对的方式存储绑定关系。默认情况下,Istio 使用 <code>peers:</code> 部分中配置的身份验证。如果在 <code>peers:</code> 部分中未配置身份验证,则 Istio 将保留身份验证。策略编写者可以使用 <code>USE_ORIGIN</code> 值覆盖此行为。此值将 Istio 配置为使用 origin 的身份验证作为主体身份验证。将来,我们将支持条件绑定,例如:当传输体为X时为 <code>USE_PEER</code>,否则为 <code>USE_ORIGIN</code> 。</p><p>以下示例显示了 <code>principalBinding</code> 键,其值为 <code>USE_ORIGIN</code>:</p><pre><code class=language-yaml>principalBinding: USE_ORIGIN</code></pre><h3 id=heading-15>更新认证策略</h3><p>您可以随时更改身份认证策略,Istio 几乎实时地将更改推送到端点。但是,Istio 无法保证所有端点同时收到新策略。以下是在更新身份认证策略时避免中断的建议:</p><ul><li>启用或禁用双向 TLS:使用带有<code>mode:</code>键和<code>PERMISSIVE</code>值的临时策略。这会将接收服务配置为接受两种类型的流量:纯文本和 TLS。因此,不会丢弃任何请求。一旦所有客户端切换到预期协议,无论是否有双向 TLS,您都可以将 <code>PERMISSIVE</code> 策略替换为最终策略。有关更多信息,请访问<a href=/v1.0/zh/docs/tasks/security/mtls-migration>Mutual TLS Migration tutorial</a>。</li></ul><pre><code class=language-yaml>peers:
|
||
- mTLS:
|
||
mode: PERMISSIVE</code></pre><ul><li>对于 JWT 身份验证迁移:在更改策略之前,请求应包含新的 JWT。一旦服务器端完全切换到新策略,旧JWT(如果有的话)可以被删除。需要更改客户端应用程序才能使这些更改生效。</li></ul><h2 id=heading-16>授权和鉴权</h2><p>Istio 的授权功能 - 也称为基于角色的访问控制(RBAC) - 为 Istio Mesh 中的服务提供命名空间级别,服务级别和方法级别的访问控制。它的特点是:</p><ul><li><strong>基于角色的语义</strong>,简单易用。</li><li><strong>服务到服务和最终用户对服务的授权</strong>。</li><li><strong>通过自定义属性支持的灵活性</strong>,例如条件,角色和角色绑定。</li><li><strong>高性能</strong>,因为 Istio 授权是在 Envoy 本地强制执行的。</li></ul><h3 id=heading-17>授权架构</h3><figure style=width:90%><div class=wrapper-with-intrinsic-ratio style=padding-bottom:56.25%><a class=not-for-endnotes href=/v1.0/docs/concepts/security/./authz.svg><img class=element-to-stretch src=/v1.0/docs/concepts/security/./authz.svg alt="Istio Authorization" title="Istio Authorization Architecture"></a></div><figcaption>Istio Authorization Architecture</figcaption></figure><p>上图显示了基本的 Istio 授权体系结构。运维人员使用<code>.yaml</code>文件指定 Istio 授权策略。部署后,Istio 将策略保存在<code>Istio Config Store</code>中。</p><p>Pilot 监督 Istio 授权策略的变更。如果发现任何更改,它将获取更新的授权策略。 Pilot 将 Istio 授权策略分发给与服务实例位于同一位置的 Envoy 代理。</p><p>每个 Envoy 代理都运行一个授权引擎,该引擎在运行时授权请求。当请求到达代理时,授权引擎根据当前授权策略评估请求上下文,并返回授权结果<code>ALLOW</code>或<code>DENY</code>。</p><h3 id=heading-18>启用授权</h3><p>您可以使用 <code>RbacConfig</code> 对象启用 Istio Authorization。 <code>RbacConfig</code>对象是一个网格范围的单例,其固定名称值为<code>default</code>。您只能在网格中使用一个<code>RbacConfig</code>实例。与其他 Istio 配置对象一样,<code>RbacConfig</code>被定义为Kubernetes <code>CustomResourceDefinition</code> <a href=https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/>(CRD)</a>对象。</p><p>在<code>RbacConfig</code>对象中,运算符可以指定<code>mode</code>值,它可以是:</p><ul><li>**<code>OFF</code> **:禁用 Istio 授权。</li><li>**<code>ON</code> **:为网格中的所有服务启用了 Istio 授权。</li><li>**<code>ON_WITH_INCLUSION</code> **:仅对<code>包含</code>字段中指定的服务和命名空间启用 Istio 授权。</li><li>**<code>ON_WITH_EXCLUSION</code> **:除了<code>排除</code>字段中指定的服务和命名空间外,网格中的所有服务都启用了 Istio 授权。</li></ul><p>在以下示例中,为<code>default</code>命名空间启用了 Istio 授权。</p><pre><code class=language-yaml>apiVersion: "config.istio.io/v1alpha2"
|
||
kind: RbacConfig
|
||
metadata:
|
||
name: default
|
||
namespace: istio-system
|
||
spec:
|
||
mode: ON_WITH_INCLUSION
|
||
inclusion:
|
||
namespaces: ["default"]</code></pre><h3 id=heading-19>授权策略</h3><p>要配置 Istio 授权策略,请指定<code>ServiceRole</code>和<code>ServiceRoleBinding</code>。与其他 Istio 配置对象一样,它们被定义为Kubernetes <code>CustomResourceDefinition</code> <a href=https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/>(CRD)</a>对象。</p><ul><li>**<code>ServiceRole</code> **定义了一组访问服务的权限。</li><li>**<code>ServiceRoleBinding</code> **向特定主题授予 <code>ServiceRole</code>,例如用户,组或服务。</li></ul><p><code>ServiceRole</code> 和 <code>ServiceRoleBinding</code> 的组合规定: 允许<strong>谁</strong>在 <strong>哪些条件</strong>下 <strong>做什么</strong> 。特别:</p><ul><li><strong>谁</strong>指的是 <code>ServiceRoleBinding</code> 中的 <code>subject</code> 部分。</li><li><strong>做什么</strong>指的是 <code>ServiceRole</code> 中的 <code>permissions</code> 部分。</li><li><strong>哪些条件</strong>指的是你可以在 <code>ServiceRole</code> 或 <code>ServiceRoleBinding</code> 中使用<a href=/v1.0/docs/reference/config/policy-and-telemetry/attribute-vocabulary/>Istio属性</a>指定的 <code>conditions</code> 部分。</li></ul><h4 id=servicerole><code>ServiceRole</code></h4><p><code>ServiceRole</code> 规范包括<code>规则</code>,AKA 权限列表。每条规则都有以下标准字段:</p><ul><li><p><strong><code>services</code></strong>:服务名称列表。您可以将值设置为 <code>*</code> 以包括指定命名空间中的所有服务。</p></li><li><p><strong><code>methods</code></strong>:HTTP 方法名称列表,对于 gRPC 请求的权限,HTTP 动词始终是 <code>POST</code> 。您可以将值设置为 <code>*</code> 以包含所有 HTTP 方法。</p></li><li><p><strong><code>paths</code></strong>:HTTP 路径或 gRPC 方法。 gRPC 方法必须采用 <code>/packageName.serviceName/methodName</code> 的形式,并且区分大小写。</p></li></ul><p><code>ServiceRole</code> 规范仅适用于 <code>metadata</code> 部分中指定的命名空间。规则中需要 <code>services</code> 和 <code>methods</code> 字段。 <code>paths</code> 是可选的。如果未指定规则或将其设置为 <code>*</code>,则它适用于任何实例。</p><p>下面的示例显示了一个简单的角色:<code>service-admin</code>,它可以完全访问 <code>default</code> 命名空间中的所有服务。</p><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRole
|
||
metadata:
|
||
name: service-admin
|
||
namespace: default
|
||
spec:
|
||
rules:
|
||
- services: ["*"]
|
||
methods: ["*"]</code></pre><p>这是另一个角色:<code>products-viewer</code>,它有读取,<code>GET</code> 和 <code>HEAD</code>,访问 <code>default</code> 命名空间中的<code>products.default.svc.cluster.local</code> 服务。</p><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRole
|
||
metadata:
|
||
name: products-viewer
|
||
namespace: default
|
||
spec:
|
||
rules:
|
||
- services: ["products.default.svc.cluster.local"]
|
||
methods: ["GET", "HEAD"]</code></pre><p>此外,我们支持规则中所有字段的前缀匹配和后缀匹配。例如,您可以在 <code>default</code>命名空间中定义具有以下权限的 <code>tester</code> 角色:</p><ul><li>完全访问前缀为 <code>test-*</code> 的所有服务,例如:<code>test-bookstore</code>,<code>test-performance</code>,<code>test-api.default.svc.cluster.local</code>。</li><li>阅读(<code>GET</code>)使用<code>*/reviews</code>后缀访问所有路径,例如:<code>/books/reviews</code>,<code>/events/booksale/reviews</code>,<code>/reviews</code> in service<code>bookstore .default.svc.cluster.local</code>。</li></ul><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRole
|
||
metadata:
|
||
name: tester
|
||
namespace: default
|
||
spec:
|
||
rules:
|
||
- services: ["test-*"]
|
||
methods: ["*"]
|
||
- services: ["bookstore.default.svc.cluster.local"]
|
||
paths: ["*/reviews"]
|
||
methods: ["GET"]</code></pre><p>在<code>ServiceRole</code>中,<code>namespace</code> +<code>services</code> +<code>paths</code> +<code>methods</code>的组合定义了<strong>如何访问服务</strong>。
|
||
在某些情况下,您可能需要为规则指定其他条件。例如,规则可能仅适用于服务的某个<strong>版本</strong>,或仅适用于具有特定<strong>标签</strong>的服务,
|
||
如 <code>foo</code>。您可以使用 <code>constraints</code> 轻松指定这些条件。</p><p>例如,下面的 <code>ServiceRole</code> 定义添加了一个约束,<code>request.headers [version]</code>是<code>v1</code>或<code>v2</code>扩展了以前的<code>products-viewer</code>角色。
|
||
约束支持的<code>key</code>值列在<a href=/v1.0/docs/reference/config/authorization/constraints-and-properties/>约束和属性页面</a>中。在属性是<code>map</code>的情况下,例如<code>request.headers</code>,<code>key</code>是地图中的一个条目,例如<code>request.headers [version]</code>。</p><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRole
|
||
metadata:
|
||
name: products-viewer-version
|
||
namespace: default
|
||
spec:
|
||
rules:
|
||
- services: ["products.default.svc.cluster.local"]
|
||
methods: ["GET", "HEAD"]
|
||
constraints:
|
||
- key: request.headers[version]
|
||
values: ["v1", "v2"]</code></pre><h4 id=servicerolebinding><code>ServiceRoleBinding</code></h4><p><code>ServiceRoleBinding</code> 规范包括两部分:</p><ul><li><strong><code>roleRef</code></strong>指的是同一命名空间中的 <code>ServiceRole</code> 资源。</li><li><strong><code>subjects</code></strong> 分配给角色的列表。</li></ul><p>您可以使用 <code>user</code> 或一组 <code>properties</code> 显式指定 <em>subject</em>。 <code>ServiceRoleBinding</code> <em>subject</em> 中的 <em>property</em> 类似于<code>ServiceRole</code> 规范中的 <em>constraint</em> 。 <em>property</em> 还允许您使用条件指定分配给此角色的一组帐户。它包含一个 <code>key</code>及其允许的<em>值</em>。约束支持的 <code>key</code> 值列在<a href=/v1.0/docs/reference/config/authorization/constraints-and-properties/>约束和属性页面</a>中。</p><p>下面的例子显示了一个名为 <code>test-binding-products</code> 的 <code>ServiceRoleBinding</code>,它将两个主题绑定到名为<code>product-viewer</code> 的 <code>ServiceRole</code> 并具有以下 <code>subject</code></p><ul><li>代表服务的服务帐户 <strong>a</strong>,<code>service-account-a</code>。</li><li>代表 Ingress 服务的服务帐户<code>istio-ingress-service-account</code><strong>and</strong>,其中 JWT <code>mail</code> 声明为 <a href=mailto:%60a@foo.com>`a@foo.com</a>`。</li></ul><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRoleBinding
|
||
metadata:
|
||
name: test-binding-products
|
||
namespace: default
|
||
spec:
|
||
subjects:
|
||
- user: "service-account-a"
|
||
- user: "istio-ingress-service-account"
|
||
properties:
|
||
request.auth.claims[email]: "a@foo.com"
|
||
roleRef:
|
||
kind: ServiceRole
|
||
name: "products-viewer"</code></pre><p>如果您想要公开访问服务,可以将 <code>subject</code> 设置为<code>user:"*"</code> 。此值将 <code>ServiceRole</code> 分配给**所有(经过身份验证和未经身份验证的)**用户和服务,例如:</p><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRoleBinding
|
||
metadata:
|
||
name: binding-products-allusers
|
||
namespace: default
|
||
spec:
|
||
subjects:
|
||
- user: "*"
|
||
roleRef:
|
||
kind: ServiceRole
|
||
name: "products-viewer"</code></pre><p>要将<code>ServiceRole</code>分配给<strong>经过身份验证的</strong>用户和服务,请使用<code>source.principal:"*"</code>代替,例如:</p><pre><code class=language-yaml>apiVersion: "rbac.istio.io/v1alpha1"
|
||
kind: ServiceRoleBinding
|
||
metadata:
|
||
name: binding-products-all-authenticated-users
|
||
namespace: default
|
||
spec:
|
||
subjects:
|
||
- properties:
|
||
source.principal: "*"
|
||
roleRef:
|
||
kind: ServiceRole
|
||
name: "products-viewer"</code></pre><h3 id=heading-20>使用其他授权机制</h3><p>虽然我们强烈建议使用 Istio 授权机制,但 Istio 足够灵活,允许您通过 Mixer 组件插入自己的身份验证和授权机制。
|
||
要在 Mixer 中使用和配置插件,请访问我们的<a href=/v1.0/zh/docs/concepts/policies-and-telemetry/#%E9%80%82%E9%85%8D%E5%99%A8>策略和遥测适配器文档</a>。</p><h2 id=see-also>See also</h2><div class=see-also><div class=container-fluid><div class=row><div class="col-xs-12 col-sm-6 col-xl-4"><p class=link><a href=/v1.0/zh/docs/tasks/security/role-based-access-control/>基于角色的访问控制</a></p><p class=desc>展示如何在服务网格中进行基于角色的访问控制。</p></div><div class="col-xs-12 col-sm-6 col-xl-4"><p class=link><a href=/v1.0/zh/docs/tasks/security/mtls-migration/>双向 TLS 的迁移</a></p><p class=desc>如何渐进式的为现有 Istio 服务添加双向 TLS 支持。</p></div><div class="col-xs-12 col-sm-6 col-xl-4"><p class=link><a href=/v1.0/zh/docs/tasks/security/authn-policy/>基础认证策略</a></p><p class=desc>介绍如何使用 Istio 认证策略设置双向 TLS 和基本的终端用户认证。</p></div><div class="col-xs-12 col-sm-6 col-xl-4"><p class=link><a href=/v1.0/zh/docs/tasks/security/health-check/>Citadel 的健康检查</a></p><p class=desc>如何在 Kubernetes 中启用 Citadel 的健康检查。</p></div><div class="col-xs-12 col-sm-6 col-xl-4"><p class=link><a href=/v1.0/zh/docs/tasks/traffic-management/app-health-check/>Istio Service 健康检查</a></p><p class=desc>展示如何对 Istio service 进行健康检查。</p></div><div class="col-xs-12 col-sm-6 col-xl-4"><p class=link><a href=/v1.0/zh/docs/tasks/security/plugin-ca-cert/>插入外部 CA 密钥和证书</a></p><p class=desc>运维人员如何使用现有根证书配置 Citadel 进行证书以及密钥的签发。</p></div></div></div></div></main><div class="container-fluid d-print-none"><br><div class=row><div class="col-6 pagenav"><p><a title="介绍 Istio 中关于流量路由与控制的各项功能。" href=/v1.0/zh/docs/concepts/traffic-management/><i class="fa fa-long-arrow-alt-left"></i>流量管理</a></p></div><div class="col-6 pagenav" style=text-align:right><p><a title=描述策略实施和遥测机制。 href=/v1.0/zh/docs/concepts/policies-and-telemetry/>策略与遥测
|
||
<i class="fa fa-long-arrow-alt-right"></i></a></p></div></div></div><div class="d-none d-print-block" aria-hidden=true><h2>Links</h2><ol id=endnotes></ol></div></div><div class="col-12 col-md-2 d-none d-xl-block d-print-none"><nav class=toc><div class=spacer></div><div id=toc class=directory role=directory><nav id=TableOfContents><ul><li><a href=#heading>高级架构</a></li><li><a href=#istio->Istio 身份</a></li><ul><li><a href=#istio--spiffe>Istio 安全与 SPIFFE</a></li></ul><li><a href=#pki>PKI</a></li><ul><li><a href=#kubernetes->Kubernetes 方案</a></li><li><a href=#heading-1>本地机器方案</a></li><li><a href=#heading-2>代理程序代理节点(开发中)</a></li></ul><li><a href=#heading-3>最佳实践</a></li><ul><li><a href=#heading-4>部署指南</a></li><li><a href=#heading-5>示例</a></li></ul><li><a href=#heading-6>认证</a></li><ul><li><a href=#-tls->双向 TLS 认证</a></li><ul><li><a href=#heading-7>安全命名</a></li></ul><li><a href=#heading-8>认证架构</a></li><li><a href=#heading-9>认证策略</a></li><ul><li><a href=#heading-10>策略存储范围</a></li><li><a href=#heading-11>目标选择器</a></li><li><a href=#heading-12>传输认证</a></li><li><a href=#heading-13>来源身份认证</a></li><li><a href=#heading-14>主认证绑定</a></li></ul><li><a href=#heading-15>更新认证策略</a></li></ul><li><a href=#heading-16>授权和鉴权</a></li><ul><li><a href=#heading-17>授权架构</a></li><li><a href=#heading-18>启用授权</a></li><li><a href=#heading-19>授权策略</a></li><ul><li><a href=#servicerole><code>ServiceRole</code></a></li><li><a href=#servicerolebinding><code>ServiceRoleBinding</code></a></li></ul><li><a href=#heading-20>使用其他授权机制</a></li></ul><li><a href=#see-also>See also</a></li></ul></nav></div></nav></div></div></div><footer class="d-print-none container-fluid"><div class=row><div class="col-5 col-lg-4" role=navigation><div class=container-fluid><div class=row><div class=icon><span>discuss</span>
|
||
<a title="Join the Istio discussion board to participate in discussions and get help troubleshooting problems" href=https://discuss.istio.io aria-label="Istio discussion board"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M225.9 32C103.3 32 0 130.5.0 252.1.0 256 .1 480 .1 480l225.8-.2c122.7.0 222.1-102.3 222.1-223.9S348.6 32 225.9 32zM224 384c-19.4.0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z" /></svg></a></div><div class=icon><span>slack</span>
|
||
<a title="在 Slack 上与 Istio 社区交互讨论开发问题(仅限邀请)" href=https://istio.slack.com aria-label=slack><svg viewBox="0 0 31.444 31.443"><path d="M31.202 16.369c-.62-1.388-2.249-2.011-3.637-1.391l-1.325.594-3.396-7.591 1.325-.592c1.388-.622 2.01-2.25 1.389-3.637-.62-1.389-2.248-2.012-3.637-1.39l-1.324.593-.593-1.326c-.621-1.388-2.249-2.009-3.637-1.388-1.388.62-2.009 2.247-1.389 3.637l.593 1.325L7.98 8.598 7.388 7.273c-.621-1.39-2.249-2.009-3.637-1.39C2.363 6.504 1.742 8.132 2.362 9.52l.592 1.324L1.63 11.438c-1.388.621-2.01 2.247-1.389 3.636.62 1.388 2.249 2.01 3.637 1.39l1.325-.594 3.394 7.592-1.325.592c-1.388.621-2.009 2.25-1.389 3.637.621 1.389 2.249 2.011 3.637 1.391l1.324-.593.593 1.325c.621 1.389 2.249 2.01 3.637 1.389 1.387-.62 2.009-2.248 1.388-3.636l-.591-1.326 7.591-3.394.592 1.321c.621 1.391 2.248 2.013 3.637 1.392 1.388-.619 2.01-2.248 1.389-3.637l-.592-1.324 1.323-.594C31.201 19.384 31.823 17.757 31.202 16.369zM13.623 21.215l-3.395-7.593 7.591-3.394 3.395 7.591L13.623 21.215z"/></svg></a></div><div class=icon><span>twitter</span>
|
||
<a title="关注我们的 Twitter 来获最新信息" href=https://twitter.com/IstioMesh aria-label=Twitter><svg viewBox="0 0 310 310"><path d="M302.973 57.388c-4.87 2.16-9.877 3.983-14.993 5.463 6.057-6.85 10.675-14.91 13.494-23.73.632-1.977-.023-4.141-1.648-5.434-1.623-1.294-3.878-1.449-5.665-.39-10.865 6.444-22.587 11.075-34.878 13.783-12.381-12.098-29.197-18.983-46.581-18.983-36.695.0-66.549 29.853-66.549 66.547.0 2.89.183 5.764.545 8.598C101.163 99.244 58.83 76.863 29.76 41.204c-1.036-1.271-2.632-1.956-4.266-1.825-1.635.128-3.104 1.05-3.93 2.467-5.896 10.117-9.013 21.688-9.013 33.461.0 16.035 5.725 31.249 15.838 43.137-3.075-1.065-6.059-2.396-8.907-3.977-1.529-.851-3.395-.838-4.914.033-1.52.871-2.473 2.473-2.513 4.224-.007.295-.007.59-.007.889.0 23.935 12.882 45.484 32.577 57.229-1.692-.169-3.383-.414-5.063-.735-1.732-.331-3.513.276-4.681 1.597-1.17 1.32-1.557 3.16-1.018 4.84 7.29 22.76 26.059 39.501 48.749 44.605-18.819 11.787-40.34 17.961-62.932 17.961-4.714.0-9.455-.277-14.095-.826-2.305-.274-4.509 1.087-5.294 3.279-.785 2.193.047 4.638 2.008 5.895 29.023 18.609 62.582 28.445 97.047 28.445 67.754.0 110.139-31.95 133.764-58.753 29.46-33.421 46.356-77.658 46.356-121.367.0-1.826-.028-3.67-.084-5.508 11.623-8.757 21.63-19.355 29.773-31.536 1.237-1.85 1.103-4.295-.33-5.998C307.394 57.037 305.009 56.486 302.973 57.388z"/></svg></a></div><div class=icon><span>stack overflow</span>
|
||
<a title="Stack Overflow 中列举了针对实际问题以及部署、配置和使用 Istio 的各项回答" href=https://stackoverflow.com/questions/tagged/istio aria-label="Stack Overflow"><svg viewBox="0 0 120 120"><polygon points="84.4,93.8 84.4,70.6 92.1,70.6 92.1,101.5 22.6,101.5 22.6,70.6 30.3,70.6 30.3,93.8"/><path d="M38.8 68.4l37.8 7.9 1.6-7.6-37.8-7.9L38.8 68.4zM43.8 50.4l35 16.3 3.2-7-35-16.4L43.8 50.4zM53.5 33.2l29.7 24.7 4.9-5.9L58.4 27.3 53.5 33.2zM72.7 14.9l-6.2 4.6 23 31 6.2-4.6-23-31zM38 86h38.6v-7.7H38V86z"/></svg></a></div></div><div class="tag row d-none d-lg-flex">对于用户</div></div></div><div class="col-7 col-lg-4"><p class="text-center copyright" role=contentinfo>Istio
|
||
Archive
|
||
1.0<br>© 2019 Istio Authors, <a href=https://policies.google.com/privacy>Privacy Policy</a><br>Archived on March 19, 2019</p></div><div class="col-6 col-lg-4 d-none d-lg-flex" role=navigation><div class=container-fluid><div class="row justify-content-end"><div class=icon><span>github</span>
|
||
<a title="Istio 的代码在 GitHub 上开发" href=https://github.com/istio/community aria-label=GitHub><svg viewBox="0 0 478.165 478.165"><path d="M349.22 55.768c6.136 14.046 10.241 37.556 4.224 54.69 24.426 20.999 33.073 71.904 21.079 113.704 35.006 2.73 76.666-1.235 103.642 9.484-25.183-3.248-59.651-9.563-91.987-7.431-6.136.458-15.361-.239-14.903 8.408 37.735 3.008 75.092 6.117 105.894 15.779-30.702-4.981-67.74-12.552-105.894-13.668-15.54 30.921-47.239 46.262-90.991 49.49 4.682 10.261 13.847 14.066 15.879 30.702 3.267 24.406-4.881 60.328 3.208 76.686 4.064 7.89 10.579 8.009 14.863 14.604-10.699 12.871-37.257-1.395-40.186-14.604-5.14-22.852 7.89-58.256-6.415-73.737.996 24.865-5.718 59.85.996 82.145 2.789 8.806 10.659 12.113 8.647 20.063-49.809 5.08-28.989-64.373-37.177-105.356-7.471.697-4.204 11.197-4.224 15.76-.199 40.106 8.189 94.836-34.846 89.556-1.315-8.348 5.838-11.217 8.467-19.007 7.91-22.434-1.454-56.045 2.112-83.161-16.417 12.512 1.793 55.666-8.428 77.961-5.838 12.671-24.785 18.27-39.19 12.651 1.873-9.464 11.695-7.989 15.879-16.875 5.818-12.452.02-30.244 2.092-48.494-30.423 6.097-53.993-.877-65.608-20.023-5.12-8.507-6.356-18.708-12.632-26.219-6.117-7.551-16.098-8.507-19.087-18.808 37.755-9.185 39.17 38.771 73.06 39.807 10.44.418 15.799-2.909 25.402-5.16 2.749-12.113 8.428-21.039 16.875-27.494-42.078-5.658-76.865-18.788-93.023-50.466-38.293 1.893-73.339 7.013-105.894 14.843 29.547-10.679 65.807-14.604 104.778-15.819-2.351-13.807-22.434-10.022-34.866-9.543C47.677 227.17 18.449 230.138.0 233.645c26.817-9.543 64.233-8.348 100.454-8.428-11.038-34.767-7.232-90.014 17.015-110.615-6.854-17.254-4.722-45.346 4.184-58.834 27.036 1.175 43.374 12.891 60.388 24.247 21.019-6.017 43.035-9.045 71.904-7.451 12.133.677 24.705 6.097 33.731 5.32 8.906-.877 18.728-10.898 27.534-14.843C326.507 58.099 336.17 56.206 349.22 55.768z"/></svg></a></div><div class=icon><span>drive</span>
|
||
<a title="如果您想深入了解 Istio 的技术细节,请查看我们日益完善的设计文档" href=https://groups.google.com/forum/#!forum/istio-team-drive-access aria-label="team drive"><svg viewBox="0 0 207.027 207.027"><path d="M69.866 15.557.0 138.919l28.732 52.552 143.288-.029 35.008-59.588L136.39 15.735 69.866 15.557zM17.166 139.046 74.268 38.205 91.21 67.783 33.24 168.447 17.166 139.046zM99.841 82.851l23.805 41.558-47.732-.006L99.841 82.851zM163.434 176.443l-117.332.024 21.53-37.065 64.606.008.067.119 52.865-.085L163.434 176.443zM140.932 124.411 90.157 35.767l-2.966-5.178 40.751.121 57.003 93.706L140.932 124.411z"/></svg></a></div><div class=icon><span>working groups</span>
|
||
<a title="如果您想为 Istio 项目做出贡献,请考虑加入我们的工作组" href=https://github.com/istio/community/blob/master/WORKING-GROUPS.md aria-label="working groups"><svg viewBox="0 -45 439.833 439.833"><polygon points="246.048,195.833 299.966,235.085 319.497,227.296 276.278,195.833"/><polygon points="193.786,195.833 163.556,195.833 120.33,227.3 139.862,235.089"/><path d="M219.927 11.558c-23.854.0-37.057 12.362-36.814 36.182.348 32.623 14.211 52.414 36.814 52.068.0.0 36.802 1.492 36.802-52.068C256.729 23.918 244.294 11.558 219.927 11.558z"/><path d="M285.017 124.567l-36.77-14.659-8.608-7.256c-2.274-1.922-5.636-1.78-7.741.317l-11.973 11.904-12.008-11.907c-2.109-2.094-5.465-2.229-7.736-.313l-8.611 7.256-36.77 14.661c-11.842 4.715-11.83 46.647-12.848 50.497h155.93C296.866 171.228 296.862 129.28 285.017 124.567z"/><path d="M77.976 228.568s36.801 1.492 36.801-52.068c0-23.82-12.434-36.182-36.801-36.182-23.854.0-37.057 12.362-36.814 36.182C41.509 209.124 55.372 228.915 77.976 228.568z"/><path d="M143.065 253.329l-36.77-14.658-8.609-7.256c-2.275-1.923-5.635-1.781-7.742.315l-11.971 11.904-12.008-11.908c-2.109-2.094-5.465-2.229-7.736-.312l-8.611 7.256-36.77 14.66C1.006 258.045 1.018 299.977.0 303.827h155.93C154.915 299.988 154.911 258.042 143.065 253.329z"/><path d="M361.878 228.568s36.801 1.492 36.801-52.068c0-23.82-12.434-36.182-36.801-36.182-23.854.0-37.057 12.362-36.812 36.182C325.411 209.124 339.274 228.915 361.878 228.568z"/><path d="M426.968 253.329l-36.77-14.658-8.609-7.256c-2.273-1.923-5.635-1.781-7.742.315l-11.971 11.904-12.008-11.908c-2.109-2.094-5.465-2.229-7.736-.312l-8.61 7.256-36.771 14.66c-11.842 4.715-11.83 46.646-12.848 50.497h155.93C438.817 299.988 438.812 258.042 426.968 253.329z"/></svg></a></div></div><div class="tag row justify-content-end text-right">对于开发者</div></div></div></div></footer><div class="d-xl-none d-print-none"><button id=scroll-to-top aria-hidden=true onclick=scrollToTop() title="Back to top"><i class="fa fa-lg fa-arrow-up"></i></button></div><script src=https://code.jquery.com/jquery-3.2.1.slim.min.js integrity=sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN crossorigin=anonymous></script><script src=https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js integrity=sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl crossorigin=anonymous></script><script src=https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.7.1/clipboard.min.js></script><script src="https://www.google.com/cse/brand?form=search_form"></script><script src=/v1.0/js/all.min.js data-manual></script></body></html> |