[zh] sync pages in /docs/examples/ (#13210)

This commit is contained in:
Michael 2023-05-23 19:43:31 +08:00 committed by GitHub
parent 7614bd2d1e
commit 69a969a503
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 89 additions and 52 deletions

View File

@ -1,6 +1,6 @@
---
title: 示例
description: 这里包括多个可供 Istio 使用的可完整工作的示例,可以用来亲自部署和体验这些示例。
description: 这里包括多个可供 Istio 使用的可完整工作的示例,可以用来亲自部署和体验这些示例。
weight: 30
icon: examples
aliases:

View File

@ -22,10 +22,10 @@ test: yes
Bookinfo 应用分为四个单独的微服务:
* `productpage`. 这个微服务会调用 `details``reviews` 两个微服务,用来生成页面。
* `details`. 这个微服务中包含了书籍的信息。
* `reviews`. 这个微服务中包含了书籍相关的评论。它还会调用 `ratings` 微服务。
* `ratings`. 这个微服务中包含了由书籍评价组成的评级信息。
* `productpage`这个微服务会调用 `details``reviews` 两个微服务,用来生成页面。
* `details`这个微服务中包含了书籍的信息。
* `reviews`这个微服务中包含了书籍相关的评论。它还会调用 `ratings` 微服务。
* `ratings`这个微服务中包含了由书籍评价组成的评级信息。
`reviews` 微服务有 3 个版本:
@ -38,7 +38,8 @@ Bookinfo 应用分为四个单独的微服务:
{{< image width="80%" link="./noistio.svg" caption="Bookinfo Application without Istio" >}}
Bookinfo 应用中的几个微服务是由不同的语言编写的。
这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且 `reviews` 服务具有多个版本。
这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:
它由多个服务、多个语言构成,并且 `reviews` 服务具有多个版本。
## 开始之前{#before-you-begin}
@ -49,12 +50,13 @@ Bookinfo 应用中的几个微服务是由不同的语言编写的。
## 部署应用{#deploying-the-application}
要在 Istio 中运行这一应用,无需对应用自身做出任何改变。
您只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy sidecar 注入到每个服务之中。
您只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy Sidecar 注入到每个服务之中。
最终的部署结果将如下图所示:
{{< image width="80%" link="./withistio.svg" caption="Bookinfo Application" >}}
所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。
所有的微服务都和 Envoy Sidecar 集成在一起,被集成服务所有的出入流量都被 Sidecar 所劫持,
这样就为外部控制准备了所需的 Hook然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。
### 启动应用服务{#start-the-application-services}
@ -72,7 +74,9 @@ Bookinfo 应用中的几个微服务是由不同的语言编写的。
{{< /text >}}
{{< warning >}}
如果您使用 OpenShift请确保按照[OpenShift设置页面](/zh/docs/setup/platform-setup/openshift/#privileged-security-context-constraints-for-application-sidecars)中所述为命名空间上的服务帐户授予适当的权限
如果您使用 OpenShift请确保按照
[OpenShift 设置页面](/zh/docs/setup/platform-setup/openshift/#privileged-security-context-constraints-for-application-sidecars)
中所述为命名空间上的服务帐户授予适当的权限
{{< /warning >}}
1. 使用 `kubectl` 部署应用:
@ -82,7 +86,10 @@ Bookinfo 应用中的几个微服务是由不同的语言编写的。
{{< /text >}}
{{< warning >}}
如果您在安装过程中禁用了 Sidecar 自动注入功能而选择[手动注入 Sidecar](/zh/docs/setup/additional-setup/sidecar-injection/#manual-sidecar-injection),请在部署应用之前使用 [`istioctl kube-inject`](/zh/docs/reference/commands/istioctl/#istioctl-kube-inject) 命令修改 `bookinfo.yaml` 文件。
如果您在安装过程中禁用了 Sidecar
自动注入功能而选择[手动注入 Sidecar](/zh/docs/setup/additional-setup/sidecar-injection/#manual-sidecar-injection)
请在部署应用之前使用 [`istioctl kube-inject`](/zh/docs/reference/commands/istioctl/#istioctl-kube-inject)
命令修改 `bookinfo.yaml` 文件。
{{< text bash >}}
$ kubectl apply -f <(istioctl kube-inject -f @samples/bookinfo/platform/kube/bookinfo.yaml@)
@ -130,7 +137,8 @@ Bookinfo 应用中的几个微服务是由不同的语言编写的。
### 确定 Ingress 的 IP 和端口{#determine-the-ingress-IP-and-port}
现在 Bookinfo 服务启动并运行中,您需要使应用程序可以从外部访问 Kubernetes 集群,例如使用浏览器。可以使用网关实现这个目标。
现在 Bookinfo 服务启动并运行中,您需要使应用程序可以从外部访问 Kubernetes 集群,
例如使用浏览器。可以使用网关实现这个目标。
1. 为 Bookinfo 应用程序定义一个网关:
@ -154,13 +162,15 @@ Bookinfo 应用中的几个微服务是由不同的语言编写的。
bookinfo-gateway 32s
{{< /text >}}
遵循[这些指示说明](/zh/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports)设置 `INGRESS_HOST``INGRESS_PORT` 变量来访问网关。设置好变量后,返回此处。
遵循[这些指示说明](/zh/docs/tasks/traffic-management/ingress/ingress-control/#determining-the-ingress-ip-and-ports)
设置 `INGRESS_HOST``INGRESS_PORT` 变量来访问网关。设置好变量后,返回此处。
{{< /tab >}}
{{< tab name="Gateway API" category-value="gateway-api" >}}
{{< boilerplate external-loadbalancer-support >}}
使用以下命令创建 [Kubernetes Gateway](https://gateway-api.sigs.k8s.io/api-types/gateway/)
{{< text bash >}}
@ -170,7 +180,8 @@ Bookinfo 应用中的几个微服务是由不同的语言编写的。
{{< /text >}}
因为创建 Kubernetes `Gateway` 资源也会
[部署关联的代理服务](/zh/docs/tasks/traffic-management/ingress/gateway-api/#automated-deployment),所以运行以下命令等待网关就绪:
[部署关联的代理服务](/zh/docs/tasks/traffic-management/ingress/gateway-api/#automated-deployment)
所以运行以下命令等待网关就绪:
{{< text bash >}}
$ kubectl wait --for=condition=programmed gtw bookinfo-gateway
@ -202,7 +213,9 @@ $ curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>
{{< /text >}}
还可以用浏览器打开网址 `http://$GATEWAY_URL/productpage`,来浏览应用的 Web 页面。如果刷新几次应用的页面,就会看到 `productpage` 页面中会随机展示 `reviews` 服务的不同版本的效果(红色、黑色的星形或者没有显示)。`reviews` 服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。
还可以用浏览器打开网址 `http://$GATEWAY_URL/productpage`,来浏览应用的 Web 页面。
如果刷新几次应用的页面,就会看到 `productpage` 页面中会随机展示 `reviews` 服务的不同版本的效果
(红色、黑色的星形或者没有显示)。`reviews` 服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。
## 定义服务版本{#define-the-service-versions}
@ -212,15 +225,17 @@ $ curl -s "http://${GATEWAY_URL}/productpage" | grep -o "<title>.*</title>"
{{< tab name="Istio classic" category-value="istio-classic" >}}
Istio 在[目标规则](/zh/docs/concepts/traffic-management/#destination-rules)中使用 *subsets* 定义服务的版本。
运行以下命令为 Bookinfo 服务创建默认的目标规则:
Istio 在[目标规则](/zh/docs/concepts/traffic-management/#destination-rules)中使用
**subsets** 定义服务的版本。运行以下命令为 Bookinfo 服务创建默认的目标规则:
{{< text bash >}}
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
{{< /text >}}
{{< tip >}}
`default``demo` 的[配置文件](/zh/docs/setup/additional-setup/config-profiles/)默认情况下启用了[自动双向 TLS](/zh/docs/tasks/security/authentication/authn-policy/#auto-mutual-tls)。要强制执行双向 TLS请使用 `samples/bookinfo/networking/destination-rule-all-mtls.yaml` 中的目标规则。
`default``demo` 的[配置文件](/zh/docs/setup/additional-setup/config-profiles/)默认情况下启用了
[自动双向 TLS](/zh/docs/tasks/security/authentication/authn-policy/#auto-mutual-tls)。
要强制执行双向 TLS请使用 `samples/bookinfo/networking/destination-rule-all-mtls.yaml` 中的目标规则。
{{< /tip >}}
等待几秒钟,以使目标规则生效。
@ -251,7 +266,8 @@ $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-versions.yaml@
## 下一步{#what-s-next}
现在就可以使用这一应用来体验 Istio 的特性了,其中包括了流量的路由、错误注入、速率限制等。
接下来可以根据个人爱好去阅读和演练 [Istio 实例](/zh/docs/tasks)。这里为新手推荐[智能路由](/zh/docs/tasks/traffic-management/request-routing/)功能作为起步课程。
接下来可以根据个人爱好去阅读和演练 [Istio 实例](/zh/docs/tasks)。
这里为新手推荐[智能路由](/zh/docs/tasks/traffic-management/request-routing/)功能作为起步课程。
## 清理{#cleanup}

View File

@ -76,7 +76,7 @@ Kubernetes 只有在新的 Pod 开始运行的时候才会终止老的 Pod
http://my-istio-dashboard.io/dashboard/db/istio-mesh-dashboard
{{< /text >}}
在左上角的下拉菜单中,选择 _Istio Mesh Dashboard_
在左上角的下拉菜单中,选择 **Istio Mesh Dashboard**
{{< image width="80%"
link="dashboard-select-dashboard.png"
@ -104,7 +104,7 @@ Kubernetes 只有在新的 Pod 开始运行的时候才会终止老的 Pod
caption="Istio Service Dashboard"
>}}
这是在一个微服务中应用 Istio 的直接优点您可以收到进出微服务的流量日志包括时间、HTTP方法、路径和响应代码。您可以用 Istio 仪表盘监控您的微服务。
这是在一个微服务中应用 Istio 的直接优点您可以收到进出微服务的流量日志包括时间、HTTP 方法、路径和响应代码。您可以用 Istio 仪表盘监控您的微服务。
在下一个模块,您将会学习到关于 Istio 可以为您的应用提供的功能。当 Istio 的功能对微服务是有益的时候,您将学习如何在整个应用程序上使用 Istio 来实现其全部潜力。

View File

@ -8,7 +8,7 @@ owner: istio/wg-docs-maintainers
test: no
---
在此模块中,将部署 reviews 服务的一个新版本 v2该服务将返回审阅人员提供的评分星级和评级颜色。
在此模块中,将部署 reviews 服务的一个新版本 v2该服务将返回审阅人员提供的评分星级和评级颜色。
在实际场景中,在部署之前,您将在模拟环境中执行静态分析测试、单元测试、集成测试、端到端测试和验证。
1. 部署 `reviews` 不带 `app=reviews` 标签的新版本微服务。没有此标签,将不会选择新版本 `reviews` 来提供服务。
@ -19,7 +19,7 @@ test: no
deployment.apps/reviews-v2 created
{{< /text >}}
1. 访问的应用程序以确保已部署的微服务不会破坏它。
1. 访问的应用程序以确保已部署的微服务不会破坏它。
1. 从集群内部使用您之前部署的测试容器测试新版本的微服务。请注意您的新版本在测试期间访问微服务 ratings 的生产 Pods。
还需要注意,您必须使用 Pod IP 访问新版本的微服务,因为它还没有被 `reviews` 服务选中。
@ -86,14 +86,14 @@ test: no
多次访问程序页面,发现大约有 25% 的时间会出现黑色星级。
1. 接下来,增加新版本的副本。可以慢慢的,仔细地检查没有错误的数量增加。
1. 接下来,增加新版本的副本。可以慢慢的,仔细地检查没有错误的数量增加。
{{< text bash >}}
$ kubectl scale deployment reviews-v2 --replicas=3
deployment.apps/reviews-v2 scaled
{{< /text >}}
现在,可以访问几次您的应用程序页面,看到黑色星级出现的时间大约是一半。
现在,可以访问几次您的应用程序页面,看到黑色星级出现的时间大约是一半。
1. 现在,您可以停用旧版:
@ -104,18 +104,18 @@ test: no
访问该应用程序的页面将只返回带有黑色的评级。
在以上步骤中,您执行了更新 `reviews`。首先,发布了新版本且没有发送模拟生产流量。
在以上步骤中,您执行了更新 `reviews`。首先,发布了新版本且没有发送模拟生产流量。
您在生产环境中使用测试流量对其进行了测试。您检查了新版本是否提供正确的结果。
您发布了新版本,并逐渐增加其生产流量。最后,您停用了旧版本。
在这里,您可以使用以下示例任务来改进部署策略。首先,在生产中进行端到端测试。
这要求能够使用请求参数(例如使用存储在 Cookie 中的用户名)将流量驱动到新版本。
此外,对新版本的生产流量进行屏蔽,并检查新版本是否提供了错误的结果或者产生了错误。
最后,获得对部署的更详细的控制。例如,可以部署 1%,然后每小时增加 1%,只要服务没有被降级。
Istio 直接帮助执行这些任务来增强 Kubernetes 的价值。有关部署的更多详细信息和最佳实践,请参阅
最后,获得对部署的更详细的控制。例如,可以部署 1%,然后每小时增加 1%,只要服务没有被降级。
Istio 直接帮助执行这些任务来增强 Kubernetes 的价值。有关部署的更多详细信息和最佳实践,请参阅
[部署模型](/zh/docs/ops/deployment/deployment-models/)。
在这里,有两个选择:
在这里,有两个选择:
1. 使用 _service mesh_ 。在服务网格中,您将所有报告、路由、策略、安全逻辑放在 _Sidecar_ 代理中,并 *透明的* 注入到您的应用程序 Pod 中。业务逻辑保留在应用程序代码中,无需更改应用程序的代码。

View File

@ -24,7 +24,7 @@ test: no
$ cat Dockerfile
{{< /text >}}
请注意,它将文件复制到容器的文件系统中,然后执行在上一个模块中执行过的 `npm install` 命令。
请注意,它将文件复制到容器的文件系统中,然后执行在上一个模块中执行过的 `npm install` 命令。
`CMD` 命令指示 Docker 在 `9080` 端口上运行 `ratings` 服务。
1. 创建一个环境变量来存储您的用户 ID该用户 ID 将用于标记 docker 镜像以进行 `ratings` 服务。
@ -47,7 +47,7 @@ test: no
{{< /text >}}
1. 在 Docker 中运行 `ratings` 服务. 接下来的 [docker run](https://docs.docker.com/engine/reference/commandline/run/) 命令
指示 Docker 将容器的 `9080` 端口暴露到计算机的 `9081` 端口,从而允许访问 `9081` 端口上的 `ratings` 微服务。
指示 Docker 将容器的 `9080` 端口暴露到计算机的 `9081` 端口,从而允许访问 `9081` 端口上的 `ratings` 微服务。
{{< text bash >}}
$ docker run --name my-ratings --rm -d -p 9081:9080 $USER/rating

View File

@ -8,22 +8,22 @@ test: n/a
{{< boilerplate work-in-progress >}}
对于本教程,需要一个 Kubernetes 集群,集群中需要包含本教程模块中的命名空间,
并且可以在本地电脑上执行这些命令。如果有自己的集群,确保集群满足这些前提条件。
对于本教程,需要一个 Kubernetes 集群,集群中需要包含本教程模块中的命名空间,
并且可以在本地电脑上执行这些命令。如果有自己的集群,确保集群满足这些前提条件。
如果在一个学习班上,并且讲师提供了一个集群,让他们来处理集群的前提条件,可以跳过本地电脑的设置。
如果在一个学习班上,并且讲师提供了一个集群,让他们来处理集群的前提条件,可以跳过本地电脑的设置。
## Kubernetes 集群{#Kubernetes-cluster}
确保满足以下条件:
- 拥有名为 `tutorial-cluster` 的 Kubernetes 集群管理员权限和集群上运行的虚拟机的管理员权限。
- 可以在集群中为每个参与者创建名称空间。
- 拥有名为 `tutorial-cluster` 的 Kubernetes 集群管理员权限和集群上运行的虚拟机的管理员权限。
- 可以在集群中为每个参与者创建名称空间。
## 本地计算机{#local-computer}
确保满足以下条件:
- 拥有本地计算机 `/etc/hosts` 文件的写入权限。
- 可以在本地计算机上下载、安装和运行命令行工具。
- 在本教程期间,可以连接到网络。
- 拥有本地计算机 `/etc/hosts` 文件的写入权限。
- 可以在本地计算机上下载、安装和运行命令行工具。
- 在本教程期间,可以连接到网络。

View File

@ -15,7 +15,7 @@ test: no
在微服务架构时代,开发人员编写、构建、测试和运行小型的软件服务。构建是快速的。使用类似
[Node.js](https://nodejs.org/zh-cn/) 这样的现代框架, 由于服务是作为常规进程来运行的,就不需要安装并管理
复杂的服务环境来测试它了。您不再仅仅为了测试您的服务就得将它部署到某个环境了,您只需要构建您的服务并且直接在本地机器上运行即可。
复杂的服务环境来测试它了。您不再仅仅为了测试您的服务就得将它部署到某个环境了,您只需要构建您的服务并且直接在本地机器上运行即可。
该模块涵盖了在本地机器上开发单个服务所涉及的不同方面。不过,您无需编写代码,只需要编译、运行和测试现有服务 `rating`

View File

@ -14,15 +14,16 @@ owner: istio/wg-environments-maintainers
test: yes
---
本示例通过在虚拟机VM上运行一项服务来跨 Kubernetes 部署 Bookinfo 应用程序,并说明了如何以单个网格的形式控制此基础架构。
本示例通过在虚拟机VM上运行一项服务来跨 Kubernetes 部署 Bookinfo 应用程序,
并说明了如何以单个网格的形式控制此基础架构。
## 概述{#overview}
{{< image width="80%" link="./vm-bookinfo.svg" caption="在虚机上运行 Bookinfo" >}}
{{< image width="80%" link="./vm-bookinfo.svg" caption="在虚机上运行 Bookinfo" >}}
<!-- source of the drawing
https://docs.google.com/drawings/d/1G1592HlOVgtbsIqxJnmMzvy6ejIdhajCosxF1LbvspI/edit
-->
-->
## 开始之前{#before-you-begin}
@ -30,13 +31,14 @@ https://docs.google.com/drawings/d/1G1592HlOVgtbsIqxJnmMzvy6ejIdhajCosxF1LbvspI/
- 部署 [Bookinfo](/zh/docs/examples/bookinfo/) 示例应用(在 `bookinfo` 命名空间下)。
- 按照[虚拟机配置](/zh/docs/setup/install/virtual-machine/#configure-the-virtual-machine)创建一个虚拟机并添加到 `vm` 命名空间下。
- 按照[虚拟机配置](/zh/docs/setup/install/virtual-machine/#configure-the-virtual-machine)
创建一个虚拟机并添加到 `vm` 命名空间下。
## 在虚拟机上运行 MySQL{#running-MySQL-on-the-VM}
您将在虚拟机上安装 MySQL并将其配置为 ratings 服务的后端。
下列的所有命令都在虚机上执行。
下列的所有命令都在虚机上执行。
安装 `mariadb`
@ -69,7 +71,7 @@ $ curl -LO {{< github_file >}}/samples/bookinfo/src/mysql/mysqldb-init.sql
$ mysql -u root -ppassword < mysqldb-init.sql
{{< /text >}}
为了便于直观地检查 Bookinfo 应用程序输出中的差异,您可以使用以下命令来更改所生成的 ratings 数据库并且检查它
为了便于直观地检查 Bookinfo 应用程序输出中的差异,您可以使用以下命令来更改并检查所生成的 ratings 数据库:
{{< text bash >}}
$ mysql -u root -ppassword test -e "select * from ratings;"
@ -95,7 +97,8 @@ $ mysql -u root -ppassword test -e "update ratings set rating=1 where reviewid=
## 向网格中注册 mysql 服务{#registering-the-mysql-service-with-the-mesh}
当虚机启动时,将会自动被注册到网格中。然而,就像我们创建一个 Pod 一样,在更加便捷的访问之前需要创建一个 Service 。
当虚拟机启动时,将会自动被注册到网格中。
然而,就像创建 Pod 一样,仍需要创建一个 Service 才能进行轻松访问。
{{< text bash >}}
$ cat <<EOF | kubectl apply -f - -n vm
@ -116,7 +119,9 @@ EOF
## 使用 mysql 服务{#using-the-mysql-service}
Bookinfo 中的 ratings 服务将使用该虚拟机上的数据库。为了验证它是否正常工作,请在虚拟机上创建使用 mysql 数据库的 ratings 服务第二个版本。然后指定路由规则,用于强制 review 服务使用 ratings 服务的第二个版本。
Bookinfo 中的 ratings 服务将使用该虚拟机上的数据库。
为了验证它是否正常工作,请在虚拟机上创建使用 mysql 数据库的 ratings 服务第二个版本。
然后指定路由规则,用于强制 review 服务使用 ratings 服务的第二个版本。
{{< text bash >}}
$ kubectl apply -n bookinfo -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2-mysql-vm.yaml@
@ -128,17 +133,33 @@ $ kubectl apply -n bookinfo -f @samples/bookinfo/platform/kube/bookinfo-ratings-
$ kubectl apply -n bookinfo -f @samples/bookinfo/networking/virtual-service-ratings-mysql-vm.yaml@
{{< /text >}}
您可以验证 Bookinfo 应用程序的输出显示的是 Reviewer1 的 1 个星,还是 Reviewer2 的 4 个星,或者更改虚拟机的 ratings 服务并查看结果。
您可以验证 Bookinfo 应用程序的输出显示的是 Reviewer1 的 1 个星,
还是 Reviewer2 的 4 个星,或者更改虚拟机的 ratings 服务并查看结果。
## 从虚机访问 Kubernetes 服务{#reaching-Kubernetes-services-from-the-virtual-machine}
## 从虚机访问 Kubernetes 服务{#reaching-Kubernetes-services-from-the-virtual-machine}
在上面的示例中,我们将虚拟机视为一个服务。 您还可以在您的虚拟机中无缝调用 Kubernetes 的服务:
在上面的示例中,我们将虚拟机视为一个服务。
您还可以在您的虚拟机中无缝调用 Kubernetes 的服务:
{{< text bash >}}
$ curl productpage.bookinfo:9080
...
<title>Simple Bookstore App</title>
<title>Simple Bookstore App</title>
...
{{< /text >}}
Istio 的 [DNS 代理](/zh/docs/ops/configuration/traffic-management/dns-proxy/)自动为您的虚机配置 DNS , 允许我们 Kubernetes 的主机名进行访问。
Istio 的 [DNS 代理](/zh/docs/ops/configuration/traffic-management/dns-proxy/)自动为您的虚拟机配置
DNS允许通过 Kubernetes 的主机名进行访问。
## 清理{#cleanup}
- 按照 [`Bookinfo` 清理](/zh/docs/examples/bookinfo/#cleanup)中的步骤,
删除 `Bookinfo` 样例应用及其配置。
- 删除 `mysqldb` 服务:
{{< text syntax=bash snip_id=none >}}
$ kubectl delete service mysqldb
{{< /text >}}
- 按照[虚拟机卸载](/zh/docs/setup/install/virtual-machine/#configure-the-virtual-machine)
中的步骤清理 VM。