第六章:Server Mesh服务网格_《再也不踩坑的kubernetes实战指南》

第六章 Server Mesh服务网格

一、服务网格核心概念

1.1 服务网格定义

作用:解决微服务间通信的复杂性,提供统一流量管理、安全认证、监控追踪等能力。
特点

  • 基础设施层透明代理(Sidecar模式)
  • 与业务代码解耦
  • 支持多语言服务治理
服务网格
传统微服务
直接调用
直接调用
Sidecar代理
服务A
Sidecar代理
服务B
服务B
服务A
服务D
服务C

二、Istio架构详解

2.1 架构组成

在这里插入图片描述

  • Pilot:流量管理核心,将路由规则转换为Envoy配置。
  • Mixer:策略执行和指标收集(已逐渐被Telemetry V2替代)。
  • Citadel:服务间TLS证书管理。
  • Envoy:Sidecar代理,拦截所有进出流量。

三、Istio安装与Sidecar注入

3.1 自动注入配置

通过命名空间标签实现自动注入:

apiVersion: v1
kind: Namespace
metadata:
  name: myapp
  labels:
    istio-injection: enabled  # 关键标签
User K8s API Istio Pod Service 创建Pod 检查注入标签 注入Envoy容器 流量经Envoy代理 User K8s API Istio Pod Service

四、流量管理实战

4.1 请求路由(VirtualService)

场景:将80%流量分给v1版本,20%给v2。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 80
    - destination:
        host: reviews
        subset: v2
      weight: 20
请求
80%
20%
Client
VirtualService
Reviews v1
Reviews v2
4.2 熔断配置(DestinationRule)
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100  # 最大连接数
      http:
        http1MaxPendingRequests: 1000
        maxRequestsPerConnection: 10
    outlierDetection:
      consecutiveErrors: 5   # 连续错误次数触发熔断
      interval: 5s           # 检测间隔
      baseEjectionTime: 30s  # 驱逐时间

五、故障注入与测试

5.1 注入HTTP延迟故障
http:
- fault:
    delay:
      percentage:
        value: 10.0
      fixedDelay: 5s
  route:
  - destination:
      host: reviews
      subset: v1
Client VirtualService Service 发送请求 注入5秒延迟(10%概率) 响应 返回结果 Client VirtualService Service

六、常见问题排查

6.1 Sidecar未注入

检查步骤

  1. 确认命名空间标签 istio-injection=enabled
  2. 检查Pod描述中是否存在Envoy容器
  3. 查看Istiod日志错误信息
6.2 规则未生效
  • 使用 istioctl analyze 验证配置语法
  • 执行 istioctl proxy-config routes <pod> --name <route> 查看Envoy生效配置

通过以上图文详解,结合书中第六章的实操案例,你可以深入理解Istio在流量治理、故障恢复等方面的强大能力。建议在实验环境中逐步演练每种配置,并通过Istio Dashboard观察流量变化。


多选题


  1. 关于Istio架构,以下哪些组件属于控制平面?
    A. Pilot
    B. Envoy
    C. Mixer
    D. Citadel
    E. Galley

  2. 在Istio中,实现请求路由的配置资源包括哪些?
    A. VirtualService
    B. Deployment
    C. DestinationRule
    D. ServiceEntry
    E. Pod

  3. 以下哪些配置可以用于Istio熔断机制?
    A. connectionPool.maxConnections
    B. outlierDetection.consecutiveErrors
    C. VirtualService.timeout
    D. DestinationRule.loadBalancer
    E. Service.spec.type

  4. 关于故障注入,以下哪些说法正确?
    A. 延迟故障通过fault.delay配置
    B. HTTP终止故障通过fault.abort配置
    C. 故障注入在DestinationRule中定义
    D. 故障注入仅支持TCP协议
    E. 故障注入会影响所有服务的流量

  5. Istio速率限制的实现依赖哪些组件?
    A. Mixer
    B. Pilot
    C. Quota实例
    D. Handler配置
    E. Citadel

  6. 自动注入Sidecar的机制需要以下哪些条件?
    A. 命名空间添加标签istio-injection=enabled
    B. 手动修改Pod的YAML添加Sidecar容器
    C. 启用Kubernetes的MutatingAdmissionWebhook
    D. 使用kubectl apply -f命令部署应用
    E. 在Deployment中指定Istio版本

  7. 关于Istio安装,以下哪些步骤是必须的?
    A. 下载并解压Istio发行包
    B. 执行istioctl manifest apply --set profile=demo
    C. 手动创建所有CRD(Custom Resource Definitions)
    D. 重启Kubernetes集群
    E. 为命名空间启用自动Sidecar注入

  8. 在流量管理中,如何实现按权重分流请求?
    A. 在VirtualService中配置route.weight
    B. 在DestinationRule中定义subsets
    C. 使用HTTPMatchRequest匹配请求头
    D. 通过Gateway配置入口流量
    E. 设置loadBalancer.simpleROUND_ROBIN

  9. 以下哪些是Istio的流量管理功能?
    A. 金丝雀发布
    B. 服务熔断
    C. 请求重试
    D. 日志聚合
    E. 链路加密

  10. 关于Istio的Sidecar代理Envoy,正确的描述是?
    A. 每个Pod中运行一个Envoy容器
    B. Envoy负责服务发现和负载均衡
    C. Envoy拦截所有进出Pod的流量
    D. Envoy仅处理HTTP协议
    E. Envoy配置由Pilot动态下发


答案与详解

  1. ACDE

    • Istio控制平面包括Pilot(流量管理)、Mixer(策略和遥测)、Citadel(安全)、Galley(配置管理)。Envoy(B)是数据平面组件。
  2. ACD

    • VirtualService(A)定义路由规则,DestinationRule(C)配置目标策略,ServiceEntry(D)用于添加外部服务。Deployment(B)和Pod(E)是K8s资源,与路由无关。
  3. AB

    • 熔断通过DestinationRuleconnectionPool(A)和outlierDetection(B)配置。timeout(C)是超时设置,loadBalancer(D)是负载均衡策略,Service类型(E)无关。
  4. AB

    • 延迟故障由fault.delay(A)配置,终止故障由fault.abort(B)配置,且需在VirtualService(C错误)中定义。支持HTTP(D错误),且可针对特定流量(E错误)。
  5. ACD

    • 速率限制通过Mixer(A)的Quota实例(C)和Handler(D)实现。Pilot(B)负责流量管理,Citadel(E)负责安全。
  6. AC

    • 自动注入需要命名空间标签istio-injection=enabled(A)和启用MutatingAdmissionWebhook(C)。手动修改(B)是手动注入方式。
  7. ABE

    • 必须下载Istio(A)、使用istioctl安装(B),并启用Sidecar注入(E)。CRD(C)由安装工具自动创建,重启集群(D)非必需。
  8. AB

    • 权重分流在VirtualServiceroute.weight(A)配置,结合DestinationRulesubsets(B)。其他选项与权重无关。
  9. ABC

    • 流量管理包括金丝雀发布(A)、熔断(B)、重试(C)。日志(D)和加密(E)是其他模块功能。
  10. ABCE

    • Envoy(A)每个Pod一个,负责服务发现(B)、拦截流量(C),配置由Pilot下发(E)。Envoy支持多协议(D错误)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值