选择版本号下载
https://github.com/istio/istio/releases/


 下载:
wget https://github.com/istio/istio/releases/download/1.13.2/istio-1.13.2-linux-amd64.tar.gz
解压
tar -xvf istio-1.13.2-linux-amd64.tar.gz




修改环境变量使其命令行可用。
vim ~/.bash_profile
PATH=$PATH:/root/servicemesh/istio-1.13.2/bin


source ~/.bash_profile


安装:
istioctl install --set profile=demo -y


卸载:
istioctl manifest generate --set profile=demo | kubectl delete -f -

Profile 分类

default:根据IstioOperatorAPI的默认设置启用组件 (建议用于生产部署)。

demo:旨在展示Istio功能且资源需求适中的配置。适合运行Bookinfo应用程序和相关任务。

minimal:使用Istio的流量管理功能所需的最少组件集。

sds: 在default的基础上再启用了SDS (secret discovery service) 功能和认证功能 (Strict Mutual TLS)。

remote:用于配置的远程簇的多组网格与共享控制平面配置。

empty:不部署任何内容,这可作为自定义配置的基本配置文件。

preview:预览配置文件包含实验性功能,不能保证稳定性,安全性和性能,请谨慎的选择此选项。

部署测试用例:

官方测试用例在线书店-bookinfo:该应用由四个单独的微服务构成,这个应用模仿在线书店的一个分类,显示一本书的信息,页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。

Bookinfo应用分为四个单独的微服务
1)productpage这个微服务会调用details和reviews两个微服务,用来生成页面;
2)details这个微服务中包含了书籍的信息;
3)reviews这个微服务中包含了书籍相关的评论,它还会调用ratings微服务;
4)ratings这个微服务中包含了由书籍评价组成的评级信息。

reviews微服务有3个版本
1)v1版本不会调用ratings服务;
2)v2版本会调用ratings服务,并使用1到5个黑色星形图标来显示评分信息;
3)v3版本会调用ratings服务,并使用1到5个红色星形图标来显示评分信息。

Bookinfo应用中的几个微服务是由不同的语言编写的。这些服务对istio并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个服务、多个语言构成,并且reviews服务具有多个版本。

创建一个测试的 namespace
kubectl create ns ist

下载测试的应用 yaml 文件
wget https://raw.githubusercontent.com/istio/istio/release-1.13/samples/bookinfo/platform/kube/bookinfo.yaml

部署测试应用
kubectl apply -f bookinfo.yaml -n ist

等待所有的变为 running 状态
kubectl get pod -n ist

istio默认自动注入 sidecar,需要为default命名空间打上标签istio-injection=enabled

kubectl label namespace ist istio-injection=enabled

查看是否成功
kubectl describe ns ist | grep istio-injection

kubectl exec -it ratings-v1-b6994bb9-h24q5 -n ist -- curl productpage:9080/productpage

 

创建网关:

网关的 yaml 文件

https://github.com/istio/istio/edit/release-1.13/samples/bookinfo/networking/bookinfo-gateway.yaml

部署网关
kubectl apply -f bookinfo-gateway.yaml -n ist

分析
istioctl analyze -n ist

查看istio 的网关 ip:

kubectl get svc istio-ingressgateway -n istio-system

根据官方文档:如果该服务的EXTERNAL-IP存在具体的值,那就说明当前环境有一个外部的负载均衡器可以提供给ingress gateway使用,如果EXTERNAL-IP的值为<none>或者是<pending>,就说明当前环境没有提供ingress gateway一个外部的负载均衡器,我的k8s集群就是这种情况,因此,我需要采用“node port”的方式来访问gateway

 

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=192.168.10.11
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

echo "$GATEWAY_URL"

数据可视化:

kubectl apply -f samples/addons

把 kiali 的 Service 端口映射出来即可。

type 改为 NodePort

 

通过浏览器即可访问了。

查看生成的调用链:

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐