博客文章地址:https://blog.taoluyuan.com/posts/istio-getting-started/
本主要是内容:
文章提到的yaml,也是istio官方提供的,整理后单独放到github github k8s-istio-practice
根目录 makefile 集成了相关命令,你们可以直接通过 makefile 安装 service,gateway,vs,dr,监控,以实现跟文章一样的效果
官方文档:https://istio.io/latest/zh/docs/
参考官方安装文档:官方demo配置组合安装文档
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.2 sh - && \
cd istio-1.17.2 && \
export PATH=$PWD/bin:$PATH && \
istioctl install --set profile=demo
kubectl label namespace default istio-injection=enabled
k get all -n istio-system
bookinfo 由四个单独的微服务构成 ,以下是官方对bookinfo的介绍,也可以直接看官方文档 istio-bookinfo
这个应用模仿在线书店的一个分类,显示一本书的信息。 页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。
Bookinfo 应用分为四个单独的微服务:
reviews 微服务有 3 个版本:
v1 版本不会调用 ratings 服务
v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
官方提示安装 bookinfo的命令
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
bookinfo.yaml 的istio 源码地址在 bookinfo
我将同名文件 bookinfo.yaml 下载后, 放到了本仓库的根目录 可以在 本地
执行
kubectl apply -f ./bookinfo.yaml
或者 make
make install-bookinfo
文章后面关于 yaml 的文件,我都会将官方的yaml下载到本地,演示也是用本地的yaml,方便大家查看
kubectl get services
kubectl get pods
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o ".* "
上面命令步骤为:
注意:
源码,bookinfo里面调用是用的短名称,建议您在生产环境中指定完全限定的主机名,比如 productpage.default.svc.cluster.local
Service 的默认类型是 ClusterIP,目前 bookinfo 只是集群内部的服务,外部无法访问
需要创建一个 Gateway 和 VirtualService 来对外开放服务
kubectl apply -f ./bookinfo-gateway.yaml
或者 make
make install-bookinfo-gateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
通过以下命令查看 Gateway 和 VirtualService 是否创建成功
kubectl get gateway
kubectl get virtualservice
可以看到 有一个 bookinfo-gateway 和 bookinfo 的 VirtualService
通过以下命令获取到 ingressgateway 的 ip
kubectl get svc istio-ingressgateway -n istio-system
istio-ingressgateway默认的服务类型是LoadBalancer,我是本地机器安装的k8s,修改 istio-ingressgateway type LoadBalancer 为 NodePort,port: 80 映射为 port: 30080
可以通过 nodeip:30080/productpage 来访问 bookinfo 服务
kubectl edit svc istio-ingressgateway -n istio-system
上面命令 会打开一个vim 编辑器,你需要修改 type 为 NodePort,并且将 修改 port: 80 映射为 port: 30080
查看修改结果
kubectl get svc istio-ingressgateway -n istio-system
显示类似为
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway NodePort 10.43.249.207 15021:30177/TCP,80:30080/TCP,443:30068/TCP,31400:30163/TCP,15443:30184/TCP 43d
上面已经将 istio-ingressgateway 的type 设置为 NodePort,并且将 port: 80 映射为 port: 30080
可以直接通过 k8s 节点的 ip 和 port 来访问 bookinfo 服务了
我的集群ip是 192.168.31.180,所以可以通过 http://192.168.31.180:30080/productpage 访问bookinfo 服务,需要将ip,prot 替换成自己的
如官网所说,多刷新几次应用的页面,就会 看到 productpage 页面中会随机展示 reviews 服务的不同版本的效果(红色、黑色的星形或者没有显示)。reviews 服务出现这种情况是因为还没有使用 Istio 来控制版本的路由。
istion 和几个遥测应用都做了集成:kiali,jaeger,prometheus,grafana ,可以通过这些工具来监控 istio 的网格
istio Telemetry Addons相关源码位置在 istio Telemetry Addons
我将 istio Telemetry Addons 其中的 jaeger,prometheus,grafana,kiali 相关的yaml文件放在 仓库 addons 目录下,可以通过以下命令安装
kubectl apply -f ./addons
或者
make install-telemetry-addons
等待安装完成后,通过以下命令查看kiali 是否部署完成
kubectl rollout status deployment/kiali -n istio-system
istio 官方文档说,采样率默认是 1%,所以要想查看追踪数据在第一个跟踪可见之前,您需要发送至少 100 个请求。 使用以下命令向 productpage 服务发送 100 个请求,需要注意将ip,prot 替换成自己的
for i in `seq 1 100`; do curl -s -o /dev/null http://192.168.31.180:30080/productpage; done
或者 make,需要将makefile 中的GATEWAY_URL 替换成自己的
make send-100-request
使用以下命令打开 kiali,会自动打开浏览器
istioctl dashboard kiali
使用以下命令打开 jaeger,会自动打开浏览器
istioctl dashboard jaeger
使用以下命令打开 prometheus,会自动打开浏览器
istioctl dashboard grafana
istio 部署多版本应用 和 可视化网格监控 已完成
文字有点多,但是操作起来很简单,我将所有的 yaml 文件都放在了仓库中github k8s-istio-practice,将所有的命令都写在了 makefile 中,只需要执行以下:
make install-istio
make install-bookinfo
make install-bookinfo-gateway
kubectl edit svc istio-ingressgateway -n istio-system
http://192.168.31.180:30080/productpage
make install-telemetry-addons
istioctl dashboard kiali