当前位置: 首页 > article >正文

深入理解Istio服务网格(一)数据平面Envoy

一、服务网格概述(service mesh)

在传统的微服务架构中,服务间的调用,业务代码需要考虑认证、熔断、服务发现等非业务能力,在某种程度上,表现出了一定的耦合性
在这里插入图片描述
服务网格追求高级别的服务流量治理能力,认证、熔断、服务发现这些能力更多的是平台测的能力。将业务测和平台测能力解耦,开发人员只关心业务测的能力。每个服务实例都有一个代理,服务的入站流量、出站流量都先经过代理,代理不进行业务处理,只做流量转发,因此,传统微服务架构,服务到服务间的调用,转成了proxy到proxy的调用。
在这里插入图片描述
Proxy通常是一种反向代理软件,有强大的流量转发能力。我们前面讲kube-proxy做负载均衡,是利用Linux内核配置iptables规则,做的L4负载均衡,实际上是能力比较弱的负载均衡。由于所有的流量都经过Proxy,基于此,很容易做到监控、熔断、重试、超时处理、负载均衡、认证等能力。

二、Istio架构

在这里插入图片描述
基于Istio的流量治理,控制平面是其istiod组件,而这个proxy角色就是反向代理软件Envoy。istiod负责生成并下发Envoy的配置。通过丰富的路由规则,对流量行为进行细粒度的控制。

三、Envoy

3.1 优势

Envoy在L4和L7都提供了丰富的Filter能力,并且还提供一组可以通过控制平面管理的API(XDS API)。云原生是一个动态的系统,pod的ip并不是固定的,传统的基于静态配置文件加载的方式并不适用。因此Envoy的API可配置性具有很大的优势,控制平面监听到配置需要变更时,控制平面可以主动下发envoy配置,而envoy不需要重新启动,支持hot reload。

3.2 Envoy典型配置

在这里插入图片描述
listener定义了本机监听ip和端口,route_config配置了转发规则,cluster对应的是service,endpoint对应的是转发的pod。

3.3 Envoy架构

在这里插入图片描述
Main Thread通过XDS API接收控制平面下发的配置,然后将listener、route_config、cluster等各配置项下发至Worker Thread,Worker Thread负责真正接收处理请求流量。

3.4 发布应用

1、创建envoy的配置configmap

kubectl create configmap envoy-config --from-file=envoy.yaml

envoy.yaml:

admin:
  address:
    socket_address: { address: 127.0.0.1, port_value: 9901 }

static_resources:
  listeners:
    - name: listener_0
      address:
        socket_address: { address: 0.0.0.0, port_value: 10000 }
      filter_chains:
        - filters:
            - name: envoy.filters.network.http_connection_manager
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
                stat_prefix: ingress_http
                codec_type: AUTO
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: local_service
                      domains: ["*"]
                      routes:
                        - match: { prefix: "/" }
                          route: { cluster: some_service }
                http_filters:
                  - name: envoy.filters.http.router
  clusters:
    - name: some_service
      connect_timeout: 0.25s
      type: LOGICAL_DNS
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: some_service
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: httpserver-svc
                      port_value: 80

2、部署envoy,并将configmap mount进去
envoy-deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: envoy
  name: envoy
spec:
  replicas: 1
  selector:
    matchLabels:
      run: envoy
  template:
    metadata:
      labels:
        run: envoy
    spec:
      containers:
        - image: envoyproxy/envoy:v1.21.5
          name: envoy
          volumeMounts:
            - name: envoy-config
              mountPath: "/etc/envoy"
              readOnly: true
      volumes:
        - name: envoy-config
          configMap:
            name: envoy-config

3、通过envoy访问应用
在这里插入图片描述


http://www.kler.cn/a/228439.html

相关文章:

  • Java实现微店商品详情接口调用的完整指南
  • Linux搭建FTP详细流程
  • 下载ovkml文件的数据
  • Django 的 `Meta` 类和外键的使用
  • 解决leetcode第3418题机器人可以获得的最大金币数
  • Linux——信号量和(环形队列消费者模型)
  • IDEA新建文件夹后右击不能创建class类排错方法
  • 操作系统-进程互斥的软件实现方法(单标志法 双标志先检查法 双标志后检查法 Peterson算法)
  • Linux校准时间 Centos
  • UE4 C++ UGameInstance实例化
  • vue项目中的 .env.development 文件怎么编写
  • GPT-4是什么?如何使用GPT-4?
  • 使用freemarker和itextpdf结合,将html转化为pdf
  • LLM大模型
  • Golang专家级教程:crypto/rand 库的使用技巧与最佳实践
  • EtherCAT FP介绍系列文章—UDP gateway
  • GO 的 Web 开发系列(四)—— 静态资源文件访问的几种方式
  • 超越原生:探索Node.js中最佳文件系统三方库
  • 新概念英语第二册(53)
  • 小华和小为的聚餐地点 - 华为OD统一考试
  • [linux] kolla-ansible 部署的openstack 修改mariadb默认端口号
  • Linux 驱动开发基础知识——设备树的语法驱动开发基础知识(九)
  • 3593 蓝桥杯 查找最大元素 简单
  • 计算机网络(复习资料)
  • EasyX图形库学习(二、文字输出)
  • vulhub中Apache APISIX Dashboard API权限绕过导致RCE(CVE-2021-45232)