使用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 个红色星形图标来显示评分信息。

bookinfo-1

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进行访问测试

image-20231105121301035

部署样例应用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访问测试

image-20231108080717781