Skip to content

Commit

Permalink
格式微调
Browse files Browse the repository at this point in the history
  • Loading branch information
hzcuixiaoqing committed May 7, 2020
1 parent cdbd4c0 commit a77cfcf
Showing 1 changed file with 18 additions and 15 deletions.
33 changes: 18 additions & 15 deletions practice/bookinfo.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,33 +32,35 @@ Bookinfo 应用分为四个单独的微服务, 这些服务对 Istio 并无依

## 部署应用

想要将应用接入 Istio 服务网格,需要将应用所在的命名空间进行 yaml 配置,以打入对应可自动注入 Sidecar的标签,通过重启应用来完成自动加入网格的动作。最终加入到服务网格中的 Bookinfo 应用架构如下所示:
想要将应用接入 Istio 服务网格,需要将应用所在的命名空间进行 yaml 配置,以打入对应可自动注入 Sidecar的标签,通过重启应用来完成自动加入网格的动作。最终加入到服务网格中的 Bookinfo 应用架构如下所示:

![Bookinfo Application](../images/Bookinfo-Application.png)

所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面下发对应的 XDS 协议从而使 Envoy Sidecar 为应用提供服务路由、遥测数据收集以及策略实施等功能。

## 启动应用服务

- 进入 Istio 安装目录。
首先进入 Istio 安装目录。

- Istio 默认自动注入 Sidecar. 请为 `default` 命名空间打上标签 `istio-injection=enabled`
Istio 默认自动注入 Sidecar,为 `default` 命名空间打上标签 `istio-injection=enabled`
```bash
$ kubectl label namespace default istio-injection=enabled
```
- 使用 `kubectl` 部署应用:
使用 `kubectl` 部署应用:
```bash
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
```

如果您在安装过程中禁用了 Sidecar 自动注入功能而选择手动注入 Sidecar,请在部署应用之前使用 `istioctl kube-inject`命令修改 `bookinfo.yaml` 文件,该命令可以从 Istio ConfigMap中动态获取网格配置。

```bash
$ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
$ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
```

在实际部署中,微服务版本的启动过程需要持续一段时间,并不是同时完成的,上面的命令会启动全部的四个服务,其中也包括了 reviews 服务的三个版本(v1、v2 以及 v3)。

- 确认所有的服务和 Pod 都已经正确的定义和启动:

确认所有的服务和 Pod 都已经正确的定义和启动:

```bash
$ kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
Expand All @@ -68,6 +70,7 @@ $ kubectl get services
ratings 10.0.0.15 <none> 9080/TCP 6m
reviews 10.0.0.170 <none> 9080/TCP 6m
```

```bash
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
Expand All @@ -79,36 +82,36 @@ $ kubectl get pods
reviews-v3-1813607990-8ch52 2/2 Running 0 6m
```

- 要确认 Bookinfo 应用是否正在运行,请在某个 Pod 中用 `curl` 命令对应用发送请求,例如 `ratings`
要确认 Bookinfo 应用是否正在运行,请在某个 Pod 中用 `curl` 命令对应用发送请求,例如 `ratings`
```bash
$ kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>
<title>Simple Bookstore App</title>
```

## 确定 Ingress 的 IP 和端口

现在 Bookinfo 服务启动并运行中,您需要使应用程序可以从外部访问 Kubernetes 集群,可以使用浏览器通过访问 Istio Gateway 来访问应用,通过以下操作步骤来实现。

- 为应用程序定义 Ingress 网关:
为应用程序定义 Ingress 网关:
```bash
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
```

- 确认网关创建完成:
确认网关创建完成:
```bash
$ kubectl get gateway
NAME AGE
bookinfo-gateway 32s
```

- 设置访问网关的 `INGRESS_HOST``INGRESS_PORT` 变量,例如node port模式。即当前环境未使用外部负载均衡器,需要通过 node port 访问。执行如下命令
设置访问网关的 `INGRESS_HOST``INGRESS_PORT` 变量,例如node port模式。即当前环境未使用外部负载均衡器,需要通过 node port 访问。执行如下命令
```bash
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
$ export INGRESS_HOST=127.0.0.1
```

- 设置 `GATEWAY_URL`
设置 `GATEWAY_URL`
```bash
$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
```
Expand All @@ -125,12 +128,12 @@ $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

结束对 Bookinfo 示例应用的体验之后,就可以使用官方提供的脚本直接清理即可:

- 删除路由规则,并销毁应用的 Pod
删除路由规则,并销毁应用的 Pod
```bash
$ samples/bookinfo/platform/kube/cleanup.sh
```

- 确认应用已经关停
确认应用已经关停
```bash
$ kubectl get virtualservices #-- there should be no virtual services
$ kubectl get destinationrules #-- there should be no destination rules
Expand Down

0 comments on commit a77cfcf

Please sign in to comment.