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

简介: 本文介绍了在Ubuntu 20.04单机环境下使用Istio服务网格的配置与测试过程。主要内容包括:1. **环境准备**:使用一台IP为10.9.2.83的机器。2. **Istio简介**:Istio简化了Kubernetes集群中的服务间通信、流量管理、安全性和可观测性。3. **部署Bookinfo示例**: - 创建命名空间`istio-demo`并启用自动注入功能。 - 部署Bookinfo应用,包含四个微服务,并验证其正常运行。

一、环境情况

环境: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


添加图片注释,不超过 140 字(可选)


kubectl get services -n istio-demo


添加图片注释,不超过 140 字(可选)


  • 使用 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 "<title>.*</title>"


添加图片注释,不超过 140 字(可选)


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

创建入口网关:

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml  -n istio-demo

查看网关创建情况:

kubectl get gateway  -n istio-demo


添加图片注释,不超过 140 字(可选)


查看网关信息

kubectl get svc istio-ingressgateway -n istio-system


添加图片注释,不超过 140 字(可选)


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


添加图片注释,不超过 140 字(可选)


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

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

istioctl dashboard kiali

主界面


添加图片注释,不超过 140 字(可选)


bookinfo应用拓扑图


添加图片注释,不超过 140 字(可选)


  • 进行一些测试,例如使用 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


添加图片注释,不超过 140 字(可选)


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

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

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


添加图片注释,不超过 140 字(可选)


  • 使用 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


目录
相关文章
|
12月前
|
Kubernetes 监控 容器
Istio安装及Bookinfo环境部署
文章详细介绍了如何在Kubernetes集群上安装和配置Istio服务网格,并通过部署Bookinfo示例应用来演示Istio的核心功能,如流量管理、服务监控和故障注入等。
174 1
Istio安装及Bookinfo环境部署
|
Kubernetes 负载均衡 C++
Istio的部署模型介绍
Istio的部署模型介绍
192 1
|
Kubernetes 监控 负载均衡
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
本文介绍了服务网格(Service Mesh)的概念及其在微服务架构中的重要性。微服务强调围绕业务构建团队和去中心化的数据管理,带来更高的灵活性和扩展性。然而,随着服务数量增加,网络通信成为挑战,包括服务发现、路由和安全等问题。 Service Mesh如Istio应运而生,通过边车代理解决服务间通信,提供服务发现、负载均衡、智能路由、安全和监控等功能。它与Kubernetes结合,增强了容器环境的服务管理能力。Istio的bookinfo示例展示了其在多语言微服务中的应用,简化了代码中的服务调用逻辑,使开发更专注于业务本身。
1032 3
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
|
Kubernetes Docker 微服务
Kubernetes 实战教学,手把手教您在 K8s 集群上部署 Istio Mesh(一)
Istio 是一个完全的开源服务网格,它可以对现有的分布式应用程序进行清晰的分层处理。近期,Istio v1.0版本已经正式上线。Istio 完全由 Go 语言编写,它是一个相当成熟的平台......
12246 0
|
SpringCloudAlibaba Kubernetes Java
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
Istio初体验:使用Spring Boot+gRPC构建微服务并部署
823 0
|
监控 负载均衡 数据可视化
微服务治理 Istio 1.6部署和应用(下)
微服务治理 Istio 1.6部署和应用
微服务治理 Istio 1.6部署和应用(下)
|
自然语言处理 Kubernetes 负载均衡
微服务治理 Istio 1.6部署和应用(上)
微服务治理 Istio 1.6部署和应用
微服务治理 Istio 1.6部署和应用(上)
|
Kubernetes 监控 安全
基于阿里云 ASK 的 Istio 微服务应用部署初探
本文会通过在 ASK 上试用 Istio 部署微服务应用的方式,来验证 ASK 对标准 Kubernetes 的兼容性。Istio 作为 Service Mesh(服务网格)的领导解决方案,一方面本身足够复杂具有代表性,另一方面它也代表了云原生时代微服务架构的趋势具有参考意义。
基于阿里云 ASK 的 Istio 微服务应用部署初探
|
Kubernetes Cloud Native NoSQL
从docker到istio之二 - 使用compose部署应用
这是第二篇,使用compose部署应用,同样演示都在docker2istio目录。
543 0
从docker到istio之二 - 使用compose部署应用