掌握 Istio:部署完成后如何运用?

一、环境情况

**环境:**Ubuntu20.04

**机器数量:**单机1台

**IP:**10.9.2.83

二、准备知识

为什么使用 Istio?

Istio提供了一种更高级别的服务网格解决方案,它可以简化和加强 Kubernetes 集群中的服务间通信、流量管理、安全性和可观测性。使用 Istio,你可以减少依赖大量的 Ingress 资源和 Service 对象来处理网络的路由和代理。

三、利用bookinfo示例测试istio

在搭建好的istio环境中进行以下的部署步骤:

  • 创建bookinof示例

    kubectl create ns istio-demo
    kubectl create -f samples/bookinfo/platform/kube/bookinfo.yaml --namespace=istio-demo

  • 为命名空间添加 istio-injection=enabled 的标签,以启用 istio 的自动注入功能。

    • 使用 kubectl label 命令为 istio-demo 命名空间添加 istio-injection=enabled 的标签,这样在部署应用时,istio 会自动为每个 pod 注入 sidecar 代理。

      kubectl label namespace istio-demo istio-injection=enabled

  • 部署 bookinfo.yaml 文件,该文件包含了 bookinfo 应用的四个微服务和相关的服务和部署资源。

    • 使用 kubectl apply 命令部署 bookinfo.yaml 文件,该文件位于 istio 的 /usr/local/istio/samples/bookinfo/platform/kube 目录下。

      kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml --namespace=istio-demo

  • 检查 bookinfo 应用是否正常运行,可以通过 kubectl exec 命令访问 productpage 服务,或者通过 istioctl dashboard 命令打开 kiali 或 grafana 等可视化工具。

    • 使用 kubectl get 命令查看服务和 pod 的状态,确保所有的 pod 都处于 Running 状态,并且有两个容器(一个是应用容器,一个是 sidecar 代理)。

      kubectl get pods -n istio-demo

复制代码
kubectl get services -n istio-demo
    • 使用 kubectl exec 命令访问 productpage 服务,该服务的端口号是 9080

      kubectl exec -n istio-demo "$(kubectl get pod -n istio-demo -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ".*"

到目前bookinfo服务也就正常运行了,如何需要从k8s集群外部访问应用程序,此时Istio网关就能起作用了。

创建入口网关:

复制代码
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml  -n istio-demo

查看网关创建情况:

复制代码
kubectl get gateway  -n istio-demo

查看网关信息

复制代码
kubectl get svc istio-ingressgateway -n istio-system

http://192.168.49.2:30485/productpage 其中192.168.49.2就是minikube ip

下面就可以通过dashboard观察服务之间的调用情况。

    • 使用 istioctl dashboard 命令打开 kiali 或 grafana 等可视化工具,查看服务网格的拓扑和指标。这些命令会在本地启动一个代理,并打开浏览器访问相应的界面。如果机器里没有kiali或grafana可以在istio的安装目录里找到kiali的yaml文件进行安装,安装命令:kubectl apply -f ./samples/addons/kiali.yaml。

      istioctl dashboard kiali

主界面

bookinfo应用拓扑图

  • 进行一些测试,例如使用 istioctl 命令为 bookinfo 应用添加路由规则,或者使用 kubectl 命令为 bookinfo 应用注入故障等。

reviews微服务有3个版本:

  • 版本v1不会调用该ratings服务。
  • 版本v2调用该ratings服务,并将每个评级显示为1到5个黑色星。
  • 版本v3调用该ratings服务,并将每个评级显示为1到5个红星。
    • 使用 istioctl 命令为 bookinfo 应用添加路由规则,使得所有的请求都被路由到 reviews 服务的 v1 版本,该版本不会显示评分信息。路由规则的定义文件位于 istio 的 samples/bookinfo/networking 目录下。

      istioctl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml -n istio-demo

    • 如果是jason登录,那么就路由给reviews的v2

      kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml -n istio-demo

此时非jason登录还是v1版本,如果是jason登录的用户访问到的就是v2版本

    • 使用 kubectl 命令为 bookinfo 应用注入故障,使得访问 ratings 服务时有 50% 的概率返回错误。故障注入的定义文件位于 istio 的 samples/bookinfo/networking 目录下。

      kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml

    • 使用 kubectl delete 命令删除路由规则或故障注入的定义文件,恢复正常的服务行为。

      kubectl delete -f samples/bookinfo/networking/virtual-service-all-v1.yaml -n istio-demo
      kubectl delete -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml -n istio-demo
      kubectl delete -f samples/bookinfo/networking/virtual-service-ratings-test-abort.yaml

相关推荐
AKAMAI2 小时前
随着瓦尔·基尔默的AI分身诞生,生成式AI是否正在将好莱坞推向边缘?
人工智能·云原生·云计算
探索云原生2 小时前
一个 Deployment 就能跑 vLLM,为什么还需要 KServe?
docker·ai·云原生·kubernetes·go
分布式存储与RustFS6 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
codeejun6 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
张洛闻Eren6 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
不吃香菜kkk、6 天前
CI/CD(GitOps)学习与部署手册
运维·云原生·容器·kubernetes·云计算·jenkins·argocd
ChaITSimpleLove6 天前
云原生性能对决:JDK21虚拟线程+GraalVM vs .NET10/11 技术栈深度对比
微服务·云原生·serverless·graalvm native·native aot·runtime async·.net11/java21
春天花会开1316 天前
Supabase 自部署 Edge Functions 超时从 60s 延长到 360s 完整复盘
运维·云原生
ysu_03147 天前
【2026】K8s GPU调度空占怎么解?Kueue与Volcano Gang配置
云原生·kubernetes·gpu算力·volcano·ai基础设施·kueue·gang scheduling
shenzhenNBA8 天前
服务网格(Service Mesh)认识
服务网格·service mesh·服务网格管理