使用istioctl部署Istio¶
1、在master01节点上下载istioctl,这里下载的是1.18.0
[root@master01 ~]# curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.0 TARGET_ARCH=x86_64 sh -
...
...
Downloading istio-1.18.0 from https://github.com/istio/istio/releases/download/1.18.0/istio-1.18.0-linux-amd64.tar.gz ...
如果上面方式成不了,打开浏览器输入https://github.com/istio/istio/releases/download/1.18.0/istio-1.18.0-linux-amd64.tar.gz下载软件包,下载完成后,上传到服务器。
[root@master01 ~]# tar xf istio-1.18.0-linux-amd64.tar.gz
2、配置软链接
[root@master01 ~]# mv istio-1.18.0/ /opt/istio; ln -s /opt/istio/bin/istioctl /usr/bin/
测试
[root@master01 ~]# istioctl version
no ready Istio pods in "istio-system"
1.18.0
3、安装istio
[root@master01 ~]# istioctl install --set profile=demo -y
上面参数说明:
--set profile=demo: 这个标志用于指定安装配置文件的配置选项。在这里,您选择了demo配置文件,这是 Istio 预定义的一种配置文件,通常用于演示和测试用途。
如果想卸载,可以执行以下命令
[root@master01 ~]# istioctl uninstall --purge -y
上面参数说明:
--purge: 这个标志表示将删除与 Istio 控制平面相关的所有配置和资源,包括命名空间、配置文件、服务、Pod 等等
4、查看pod
[root@master01 istio]# kubectl get po -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-545f48cf64-8sq27 1/1 Running 0 9h
istio-ingressgateway-dc7bfc496-zlgd4 1/1 Running 0 9h
istiod-647cff69d6-nctq9 1/1 Running 0 9h
部署样例应用bookinfo¶
1、介绍Bookinfo
这是一个官方提供的用来演示Istio特性的示例应用,该应用由四个单独的微服务组成:
- Productpage:这个微服务会调用 Details 和 Reviews 两个微服务,用来生成页面。
- Details:这个微服务中包含了书籍的信息。
- Reviews:这个微服务中包含了书籍相关的评论。它还会调用 Ratings 微服务。
- Ratings:这个微服务中包含了由书籍评价组成的评级信息。
Reviews 微服务有 3 个版本:
- v1 版本不会调用 Ratings 服务。
- v2 版本会调用 Ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
- v3 版本会调用 Ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

2、部署示例应用
给default命名空间打标签,目的是让该命名空间下的应用可以让Istio注入
[root@master01 istio]# kubectl label namespace default istio-injection=enabled
部署Bookinfo
[root@master01 ~]# cd /opt/istio/
[root@master01 istio]# vim samples/bookinfo/platform/kube/bookinfo.yaml
# 第75行 修改国外镜像为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/examples-bookinfo-details-v1:1.17.0
# 第128行 修改国外镜像为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/examples-bookinfo-ratings-v1:1.17.0
# 第181行 修改国外镜像为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/examples-bookinfo-reviews-v1:1.17.0
# 第223行 修改国外镜像为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/examples-bookinfo-reviews-v2:1.17.0
# 第265行 修改国外镜像为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/examples-bookinfo-reviews-v3:1.17.0
# 第335行 修改国外镜像为国内镜像
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/examples-bookinfo-productpage-v1:1.17.0
[root@master01 istio]# kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
3、查看pod状态
[root@master01 istio]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
details-v1-dd5474b97-v2nfr 1/1 Running 0 151m 172.29.55.10 node01 <none> <none>
productpage-v1-578fc94b9d-fzm28 1/1 Running 0 151m 172.21.231.147 node02 <none> <none>
ratings-v1-58cbcd745-zqck5 1/1 Running 0 151m 172.21.231.145 node02 <none> <none>
reviews-v1-b978dbd59-b5zgt 1/1 Running 0 151m 172.29.55.11 node01 <none> <none>
reviews-v2-7d4c5cb667-wq5hl 1/1 Running 0 151m 172.29.55.12 node01 <none> <none>
reviews-v3-6f89c56555-fdtcm 1/1 Running 0 151m 172.21.231.146 node02 <none> <none>
4、设置对外访问
[root@master01 istio]# nohup kubectl port-forward svc/productpage --address 192.168.1.60 9080:9080 &
5、在浏览器输入http://192.168.1.60:9080进行访问测试

部署样例应用Weather Forecast¶
1、介绍Weather Forecast
它是一款查询城市天气信息的应用实例,其展示的数据并不是真实的,只是一些静态的 dummy 数据,一共包含 4 个 微服务: frontend、advertisement、forecast 和 recommendation。
- frontend:前台服务,会调用 advertisement 和 forecast 这两个服务,展示整个应用的页面,使用 React.js 开发。
- advertisement:广告服务,返回的静态的广告图片,使用 Golang 开发而成。
- forecast:天气预报服务,返回相应城市的天气数据,使用 Node.js 开发而成。
- recommendation:推荐服务,根据天气情况向用户推荐穿衣和运行等信息,使用 Java 开发而成。
frontend 服务的有两个版本。
- v1 版本的界面按钮为绿色。
- v2 版本的界面按钮为蓝色。
forecast 服务有两个版本。
- v1 版本会直接返回天气信息。
- v2 版本会请求 recommendation 服务,获取推荐信息,并结合天气信息一起返回数据。
2、部署示例应用
下载示例应用相关源码
[root@master01 ~]# git clone https://github.com/aminglinux/cloud-native-istio.git
创建weather命名空间
[root@master01 ~]# kubectl create ns weather
给weather命名空间打标签,目的是让该命名空间下的应用可以让Istio注入
[root@master01 ~]# kubectl label namespace weather istio-injection=enabled
部署示例应用
```# 第75行 修改国外镜像为国内镜像 [root@master01 ~]# vim cloud-native-istio/08_environment/8.3/weather-v1.yaml
第39行 修改国外镜像为国内镜像¶
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/frontend:v1
第82行 修改国外镜像为国内镜像¶
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/advertisement:v1
第125行 修改国外镜像为国内镜像¶
image: registry.cn-hangzhou.aliyuncs.com/abroad_images/forecast:v1
[root@master01 ~]# kubectl apply -f cloud-native-istio/08_environment/8.3/weather-v1.yaml -n weather
**说明:weather-v1.yaml只安装了frontend、advertisement、forecast这3个服务的v1版本,不包含它们的v2版本和recommendation。**
3、查看pod状态
[root@master01 ~]# kubectl get po -n weather -owide
4、设置对外访问
[root@master01 ~]# nohup kubectl port-forward -n weather svc/frontend --address 192.168.1.60 3000:3000 & ```
5、在浏览器中输入http://192.168.1.60:3000/dashboard访问测试
