首页 > 其他分享 >istio入门

istio入门

时间:2023-01-18 17:46:13浏览次数:47  
标签:服务 name istio Istio productpage Pod 入门

Istio 在逻辑上分为数据平面和控制平面。

数据平面,由一组高性能的智能代理(基于 Envoy 改进的 istio-proxy)组成,它们控制和协调了被代理服务的所有网络通信,同时也负责收集和上报相关的监控数据。

控制平面,负责制定应用策略来控制网络流量的路由。

Istio 由多个组件组成,核心组件及其作用为如下:

Ingressgateway,控制外部流量访问 Istio 内部的服务。

Egressgateway,控制 Istio 内部访问外部服务的流量。

Pilot,负责管理服务网格内部的服务和流量策略。它将服务信息和流量控制的高级路由规则在运行时传播给 Proxy,并将特定平台的服务发现机制抽象为 Proxy 可使用的标准格式。

Citadel,提供身份认证和凭证管理。

Galley,负责验证、提取、处理和分发配置。

Proxy,作为服务代理,调节所有 Service Mesh 单元的入口和出口流量。

 

 

这其中 Proxy 属于数据平面,以 Sidecar 的方式与应用程序一同部署到 Pod 中,而 Pilot、Citadel 和 Galley 属于控制平面。

除此之外,Istio 中还提供一些额外的插件,如 grafana、istio-tracing、kiali 和 prometheus,用于进行可视化的数据查看、流量监控和链路追踪等。

 

Pilot:Istio 控制面中最核心的模块,负责运行时配置下发,具体来说,就是和 Envoy 之间基于 xDS 协议进行的各种 Envoy 配置信息的推送,包括服务发现、路由发现、集群发现、监听器发现等。

 

Citadel:负责证书的分发和轮换,使 Sidecar 代理两端实现双向 TLS 认证、访问授权等。

 

Galley:配置信息的格式和正确性校验,将配置信息提供给 Pilot 使用。

 

Istio 通过 Galley 模块管理配置,Pilot 模块解析配置为 xDS 协议格式,通过 gRPC 和 Envoy 进行通信,以便完成配置和节点信息更新,pilot-agent 作为 Envoy 守护模块,保证 Envoy 的正常运行和平滑重启。

本地业务服务 productpage 通过 iptables 劫持的方式和本地 Envoy 进行通信,Envoy 完成服务发现后将请求转发到 ProductDetail 服务的所在 Pod,同样通过 iptables 劫持的方式将请求转发到本地的业务服务 ProductDetail。

实例服务原理解析

apiVersion: v1
kind: Service
metadata:
  name: productpage
  labels:
    app: productpage
    service: productpage
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: productpage

首先定义了一个 Service 类型的资源,而 Service 是 Kubernetes 抽象出来的服务概念,一组 Pod 的集合便是 Kubernetes 的 Service。Pod 是有生命周期的,Pod 的 IP 在不同的生命周期内发生变化,但抽象出来的 Service 名称是不会变化的。

这样就可以通过服务名访问这些后端 IP,而不用感知后端 Pod IP 的变化。

然后在 Metadata 中定义了这一组 Service 的 label ,通过 selector 指定响应的标签,就可以访问带有这组标签定义的 Pod 集合。另外这组配置还指定了服务端口为 9080,服务的协议为 HTTP ,这些信息将用于 Sidecar 的代理转发。

接下来,通过 Deployment 控制 Pod 的生命周期,定义了 Pod 的副本数量。下面的示例中,定义一个 replicas 为 1,也就是 Pod 的副本数量为 1,因为是测试环境,所以没有设置更多的副本数量保障服务的 SLA 。

当然一些常规的镜像拉取地址和拉取方式也做了定义:

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: productpage-v1
  labels:
    app: productpage
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: productpage
      version: v1
  template:
    metadata:
      labels:
        app: productpage
        version: v1
    spec:
      serviceAccountName: bookinfo-productpage
      containers:
      - name: productpage
        image: docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 9080
        volumeMounts:
        - name: tmp
          mountPath: /tmp
      volumes:
      - name: tmp
        emptyDir: {}

 

另外在 Kubernetes 的 Service 里面并没有版本的概念,如果想进行染色或者金丝雀发布,就需要借助 Istio 的能力。通过上述命令可以看到,在 Deployment 类型中定义了 Version V1 的 lable,这个 lable 最终会转化成不同的服务名,比如 productpage-v1 的方式,下发到 Sidecar 中, Sidecar 根据这个服务名称进行服务发现,以实现不同版本号访问的方法。

下一步,用到了 Ingress 模式。定义一组网关类型的资源, Istio 通过 Gateway 将服务发布成外部可访问的服务,通过 80 端口将服务通过 Ingress 网关转发到特定的服务上。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

在这里,Gateway 资源类型,需要配合 VirtualService 类型的资源一起使用。那么,定义匹配到的 URI 具体路由到哪个服务呢?

在这个程序中可以看到匹配到 /productpage 路径的服务,而在 route 中定义了 destination 的 host 将会是路由的服务名

 

apiVersion: networking.istio.io/v1alpha3
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

 

 

 

 

 

 

标签:服务,name,istio,Istio,productpage,Pod,入门
From: https://www.cnblogs.com/muzinan110/p/17060296.html

相关文章

  • Elasticsearch 技术分析(一): 基础入门
    简介Elasticsearch是一个高度可扩展的、开源的、基于Lucene的全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据,并支持多租户。Elasticsearch也使用Ja......
  • 【版本控制工具】Git急速入门
    文章目录1.Git简介1.1.什么是Git1.2.Git与SVN区别2.Git工作流程2.1.Git的工程流程3.Git工作区、暂存区和版本库3.1.Git工作区、暂存区和版本库4.Git创建仓库4.......
  • CMake 快速入门教程 All In One
    CMake快速入门教程AllInOneCMakeCMakeisanopen-source,cross-platformfamilyoftoolsdesignedtobuild,testandpackagesoftware.CMakeisusedtocont......
  • Shell脚本零基础入门
    文章目录1.shell脚本入门1.1.shell的简介1.2.shell的应用场景1.3.shell常见的解释器1.4.shell脚本文件权限与脚本执行2.shell的变量以及常见符号2.1.常见变量2.......
  • Web安全入门与靶场实战(9)- 利用Burpsuite拦截HTTP数据
    在Web安全中经常需要对HTTP请求和响应的数据进行拦截,从而来对这些数据做进一步的分析或处理,这就要用到一个非常重要的工具Burpsuite。Burpsuite可谓Web安全的神器,要学习Web......
  • SpringCloud-入门简介
    https://www.cnblogs.com/xuwc/p/13995814.html参考:https://www.cnblogs.com/lizm166/p/11156311.htmlhttps://www.cnblogs.com/senlinyang/p/8591294.htmlhttps://zhu......
  • P1352 没有上司的舞会+P1122 最大子树和(树形DP入门)
    前言今日偶然打开\(oi-wiki\),发现树形\(DP\)例题正好是之前在洛谷上鸽着的一道题。所以......\(\color{red}{很高兴以这样的方式认识你,树形DP!}\)这例题造的太好了......
  • vuejs从入门到精通——观察 Vue 实例从创建到销毁的完整生命周期
    观察Vue实例从创建到销毁的完整生命周期一、一个简单的Vue实例代码如下:<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>Vue从入门到精通,https://w......
  • MySQL笔记01: MySQL入门_1.1 MySQL概述
    1.1MySQL概述MySQL是一个关系数据库管理系统(RelationalDataBaseManagementSystem,RDBMS)。它是一个程序,可以存储大量的种类繁多的数据,并且提供服务以满足任何组织的需要......
  • SpringCloud GateWay网关(入门)
    1、介绍强烈推荐,看官网文档SpringCloudGateway①简介Cloud全家桶里有个重要组件:网关SpringCloudGateway基于WebFlux框架WebFlux底层使用高性能的Reactor模式(异步......