docker desktop之Istio初体验
本文环境为Mac
,其中 Docker Desktop
中安装的k8s
集群环境的版本为v1.19.7
,istio v1.8.1
Istio
下载安装
进入Istio
发布页面,下载版本istio-1.8.1-osx.tar.gz
,然后解压到/usr/local/istio-1.8.1
,可以看到下面包含bin及samples文件夹,bin里包含istioctl命令,samples里包含Istio自带的样例应用的部署配置。
样例演示
选择profile=demo
,安装命令如下:istioctl install --set profile=demo -y
1 | #会看到如下输出 |
稍等片刻之后,等重要组件Istiod, Ingress Gateway, Egress Gateway
都安装完成了。可以发现,其将上述组件安装到了istio-system
这个namespace
下。
1 | $ kubectl get pods -n istio-system ✔ 00:26:42 |
Bookinfo
样例应用部署
新建一个专门用来演示的namespace istio-demo
,且标记该namespace
使用istio
自动注入。
1 | $ kubectl create namespace istio-demo |
粗略看下Bookinfo
的几个模块
1 | $ cd /usr/local/istio-1.8.1 |
下面,使用Istio samples
文件夹下自带的配置部署Bookinfo
应用:
1 | $ cd /usr/local/istio-1.8.1 |
Bookinfo
样例应用访问
查看deployments
及pods
,发现Bookinfo
的各个组件已部署完成:
1 | kubectl get pods -n istio-demo ✔ 00:14:09 |
下面我们试着在ratings
容器里访问Bookinfo
的入口页面productpage
。
执行命令时,需指定容器为ratings
,curl
请求productpage
,发现页面标题已可正常显示。
1 | kubectl exec ratings-v1-7d99676f7f-x4vkn -c ratings -n istio-demo -- curl -s productpage:9080/productpage | grep -o "<title>.*</title>" |
下面看一下该应用如何在集群外部进行访问。涉及到通过配置Istio的Ingress Gateway
,从而将流量打到productpage
。同样,需要执行下samples
文件夹下自带的配置文件。$ kubectl apply -n istio-demo -f samples/bookinfo/networking/bookinfo-gateway.yaml
然后查看下Ingress Gateway
的ip
及端口。
1 | kubectl get service istio-ingressgateway -n istio-system ✔ 00:33:07 |
对于本文所采用的Docker Desktop K8s
本地部署环境来说,外部IP就是localhost
。采用http://localhost/productpage
即可访问Bookinfo
的productpage
页面。
Istio Dashboard
安装
安装一下Istio
的几个插件,初步体验里边的一些功能。
1 | $ cd /usr/local/istio-1.8.1 |
- Kiali 面板
输入如下命令打开Kiali
面板$ istioctl dashboard kiali
选择对应的namespaces
。
可以看到,调用关系一目了然,请求由Istio Ingress Gateway
进来,首先访问productpage
,productpage
访问details
获取图书详情,productpage
访问reviews
获取评论,reviews
访问ratings
获取图书评级。 - 打开
Jaeger
面板$ istioctl dashboard jaeger
左侧Service
下拉菜单,选择productpage.istio-demo
,从右面的Traces
里点击productpage
,可以看到如下调用详情。
调用链以时间序横向展示,同样可以看到请求由istio-ingressgateway
进来到达productpage,productpage
调用details
及reviews
,reviews
调用ratings
,每个调用的时间花费亦显示了出来。Istio
卸载 - 卸载
addons
1
2cd /usr/local/istio-1.8.1
$ kubectl delete -f samples/addons - 卸载
Bookinfo
1
2
3cd /usr/local/istio-1.8.1
$ kubectl delete -n istio-demo -f samples/bookinfo/platform/kube/bookinfo.yaml
$ kubectl delete -n istio-demo -f samples/bookinfo/networking/bookinfo-gateway.yaml - 卸载
Istio
1
$ istioctl manifest generate --set profile=demo | kubectl delete --ignore-not-found=true -f -
- 删除
namespace istio-system
1
$ kubectl delete namespace istio-system
- 取消对
istio-demo
进行Istio
自动注入1
$ kubectl label namespace istio-demo istio-injection-
- 删除
namespace istio-demo
1
$ kubectl delete namespace istio-demo
转载磊磊落落-
Isoti使用
,个人实战踩坑已验证无问题。