Istio安装以及部署示例微服务
安装
提前准备好k8s环境,下载Istio安装包,我这里使用的1.6.14版本,k8s版本为v1.19.8
tar zxvf istio-1.6.14-linux-amd64.tar.gz
cd istio-1.6.14/
cp bin/istioctl /usr/bin
查看不同安装模式的配置文件列表
istioctl profile list
可以打印配置文件内容(选做)
istioctl profile dump [配置文件名称]
使用demo模式的配置安装
[root@ istio-1.6.14]# istioctl manifest apply --set profile=demo
Detected that your cluster does not support third party JWT authentication. Falling back to less secure first party JWT. See https://istio.io/docs/ops/best-practices/security/#configure-third-party-service-account-tokens for details.
✔ Istio core installed
✔ Istiod installed
✔ Ingress gateways installed
✔ Egress gateways installed
✔ Addons installed
✔ Installation complete
验证是否安装成功
[root@ istio-1.6.14]# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-7647cf9c74-lvbhp 1/1 Running 0 6m51s
istio-egressgateway-6999674db4-tsm28 1/1 Running 0 6m55s
istio-ingressgateway-66757b946f-qqvms 1/1 Running 0 6m55s
istio-tracing-7fcc6f5848-n99wt 1/1 Running 0 6m50s
istiod-7c966f79c4-76zl2 1/1 Running 0 7m38s
kiali-7f575d9c4c-ndlc6 1/1 Running 0 6m50s
prometheus-fcbb8cbdd-vdm2v 2/2 Running 0 6m50s
以端口转发模式临时暴露20001端口,进入kiali界面
kubectl port-forward --address 0.0.0.0 kiali-7f575d9c4c-ndlc6 20001 -n istio-system
若想直接暴露端口,则设置以NodePort暴露端口
kubectl -n istio-system edit svc kiali
改为下图部分
ports:
- name: http-kiali
nodePort: 32660
port: 20001
protocol: TCP
targetPort: 20001
selector:
app: kiali
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}
查看istio里安装的其他服务,比如grafana、Jaeger(tracing)也可以这样暴露出来
kubectl -n istio-system get svc
卸载
istioctl manifest generate --set profile=demo | kubectl delete -f -
运行示例微服务Bookinfo
Bookinfo - 在线图书商店
架构图:
Bookinfo 应用分为四个单独的微服务, 这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子:它由多个不同语言编写的服务构成,并且其中有一个应用会包含多个版本。
productpage
会调用details
和reviews
两个微服务,用来生成页面。details
中包含了书籍的信息。reviews
中包含了书籍相关的评论。它还会调用ratings
微服务。ratings
中包含了由书籍评价组成的评级信息。
reviews
微服务有 3 个版本,可用来展示各服务之间的不同的调用链路:
- v1 版本不会调用
ratings
服务。 - v2 版本会调用
ratings
服务,并使用 1 到 5 个黑色星形图标来显示评分信息。 - v3 版本会调用
ratings
服务,并使用 1 到 5 个红色星形图标来显示评分信息。
创建命名空间
kubectl create ns bookinfo
Istio] 默认自动注入 Sidecar,为 bookinfo
命名空间打上标签 istio-injection=enabled
:
kubectl label ns bookinfo istio-injection=enabled
部署服务
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo
查看pod
kubectl get po -n bookinfo
部署网关
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo
查看暴露的端口
kubectl get svc -n istio-system
访问,就可以看到页面
http://主机ip:端口/productpage
加压
for i in {1..100}; do curl -I http://主机ip:端口/productpage/productpage; sleep 1; done
然后查看kiali、grafana、Jaeger(tracing)就会出现数据,kiali默认账户密码都是admin
每个人都有潜在的能量,只是很容易被习惯所掩盖,被时间所迷离,被惰性所消磨~