Istio详细使用-环境安装与介绍(一)

Istio详细使用(一)

1.介绍

1.1 简介

Istio 是由 Google、IBM 和 Lyft 开源的微服务管理、保护和监控框架。Istio 为希腊语,意思是”起航“。

Istio 解决了开发人员和运维人员所面临的从单体应用向分布式微服务架构转变的挑战。了解它是如何做到这一点的可以让我们更详细地理解 Istio 的服务网格

服务网格用来描述组成这些应用程序的微服务网络以及它们之间的交互。随着服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、度量和监控等。服务网格通常还有更复杂的运维需求,比如 A/B 测试、金丝雀发布、速率限制、访问控制和端到端认证。

1.2 特性

  • 流量管理:通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度的控制
  • 可观测性:了解服务之间的依赖关系和它们之间的性质和流量,提供快速识别定位问题的能力。
  • 策略实施:通过配置mesh而不是以改变代码的方式来控制服务之间的访问策略。
  • 服务识别和安全:提供在mesh里的服务可识别性和安全性保护。

1.3 组件

1.4 架构

Istio 服务网格从逻辑上分为数据平面和控制平面。

  • 数据平面由一组智能代理(Envoy)组成,被部署为 sidecar
  • 控制平面管理并配置代理来进行流量路由。

下图展示了组成每个平面的不同组件:

Istio 的架构分为控制平面和数据平面。

  • 数据平面:由一组智能代理(Envoy)以 sidecar 模式部署,协调和控制所有服务之间的网络通信。
  • 控制平面:负责管理和配置代理路由流量,以及在运行时执行的政策。

2. 入门以及使用

2.1 安装

  • 安装helm源

    helm repo add istio https://istio-release.storage.googleapis.com/charts
    helm repo update

  • 为 Istio 组件,创建命名空间 istio-system

    kubectl create namespace istio-system

  • 安装 Istio base chart,它包含了集群范围的自定义资源定义 (CRD)

    helm install istio-base istio/base -n istio-system

  • 安装 Istio discovery chart,它用于部署 istiod 服务

    helm install istiod istio/istiod -n istio-system

  • 查看安装情况

  • 安装网关

    kubectl create namespace istio-ingress
    helm install istio-ingress istio/gateway -n istio-ingress –wait

2.2 官方Bookinfo 应用 示例

Bookinfo 应用分为四个单独的微服务:

  • productpage:这个微服务会调用 detailsreviews 两个微服务,用来生成页面。
  • details:这个微服务中包含了书籍的信息。
  • reviews:这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
  • ratings:这个微服务中包含了由书籍评价组成的评级信息。

reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

下图展示了这个应用的端到端架构。

Bookinfo Application without Istio

Bookinfo 应用中的几个微服务是由不同的语言编写的。 这些服务对 Istio 并无依赖,但是构成了一个有代表性的服务网格的例子: 它由多个服务、多个语言构成,并且 reviews 服务具有多个版本。

2.2.1 启动应用服务

  1. Istio 默认自动注入 Sidecar. 请为 default 命名空间打上标签 istio-injection=enabled

    kubectl label namespace default istio-injection=enabled

  2. 使用 kubectl 部署应用

    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml

  3. 确认所有的服务和 Pod 都已经正确的定义和启动:

  4. 要确认 Bookinfo 应用是否正在运行,请在某个 Pod 中用 curl 命令对应用发送请求,例如 ratings

    kubectl exec “$(kubectl get pod -l app=ratings -o jsonpath=’{.items[0].metadata.name}’)” -c ratings – curl -sS productpage:9080/productpage | grep -o “.*

  5. 创建网关

    使用以下命令创建 Istio Gateway

    $ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      # The selector matches the ingress gateway pod labels.
      # If you installed Istio using Helm following the standard documentation, this would be "istio=ingress"
      selector:
        istio: ingress # use istio default controller
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
    ---
    apiVersion: networking.istio.io/v1beta1
    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

    确认网关创建完成:

    $ kubectl get gateway
    NAME               AGE
    bookinfo-gateway   32s
  6. 访问

  7. 在可以使用 Istio 控制 Bookinfo 版本路由之前,您需要定义可用的版本。

    kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/networking/destination-rule-all.yaml

    kubectl get destinationrules -o yaml

2.3 Kiali——Istio Service Mesh 的可观察性工具

2.3.1Kiali 中的基本概念

在了解 Kiali 如何提供 Service Mesh 中微服务可观察性之前,我们需要先了解下 Kiali 如何划分监控类别的。

  • Application:使用运行的工作负载,必须使用 Istio 的将 Label 标记为 app 才算。注意,如果一个应用有多个版本,只要 app 标签的值相同就是属于同一个应用。
  • Deployment:即 Kubernetes 中的 Deployment。
  • Label:这个值对于 Istio 很重要,因为 Istio 要用它来标记 metrics。每个 Application 要求包括 app 和 version 两个 label。
  • Namespace:通常用于区分项目和用户。
  • Service:即 Kubernetes 中的 Service,不过要求必须有 app label。
  • Workload:Kubernetes 中的所有常用资源类型如 Deployment、StatefulSet、Job 等都可以检测到,不论这些负载是否加入到 Istio Service Mesh 中。

外部引用

[Istio云原生资料库]: https://jimmysong.io/kubernetes-handbook/usecases/istio.html “Istio云原生资料库”
[Istio官网]: https://istio.io/latest/zh/docs/concepts/ “Istio官网”


   转载规则


《Istio详细使用-环境安装与介绍(一)》 by XieJiayi is licensed under a 知识共享署名 4.0 国际许可协议 许可协议。转载请注明来源
 上一篇
Istio详细使用-流量管理(二) Istio详细使用-流量管理(二)
Istio详细使用-流量管理(二)上篇介绍了istio的基础和网关的安装,以及bookInfo的应用用例安装,接下来介绍流量管理,比如熔断器、超时和重试,并且能轻松的设置重要的任务, 如 A/B 测试、金丝雀发布、基于流量百分比切分的分阶段
2023-08-08
下一篇 
Linux下未使用磁盘扩容到根目录(PV) Linux下未使用磁盘扩容到根目录(PV)
Linux下未使用磁盘扩容到根目录(PV)1.从虚机从创建一个空磁盘 2.查看根目录容量大小、查看磁盘分区情况lsblk 3.格式化磁盘mkfs -t ext3 /dev/sda 4.创建物理卷pvcreate /dev/vda
2023-08-04
  目录