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 会调用 detailsreviews 两个微服务,用来生成页面。
  • 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

posted @ 2021-11-02 23:49  请务必优秀  阅读(613)  评论(0编辑  收藏  举报