跳转至

第09章 服务网格

服务网格图

📚 章节概述

本章将深入讲解服务网格技术,包括Istio、Linkerd等核心组件的配置和使用。通过本章学习,你将能够搭建生产级的服务网格,实现微服务的流量管理、安全通信和可观测性。

🎯 学习目标

完成本章后,你将能够:

  1. 理解服务网格的核心概念和架构
  2. 掌握Istio的配置和使用
  3. 了解Linkerd的使用场景
  4. 掌握流量管理和安全策略
  5. 能够搭建生产级的服务网格

9.1 服务网格概述

9.1.1 什么是服务网格

服务网格是微服务架构中的基础设施层,负责处理服务间通信。

核心价值

  1. 流量管理
  2. 负载均衡
  3. 灰度发布
  4. 故障注入

  5. 安全

  6. mTLS加密
  7. 身份认证
  8. 访问控制

  9. 可观测性

  10. 分布式追踪
  11. 指标收集
  12. 日志聚合

9.1.2 服务网格架构

Text Only
┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Service A  │    │  Service B  │    │  Service C  │
└──────┬──────┘    └──────┬──────┘    └──────┬──────┘
       │                   │                   │
       │                   │                   │
       └───────────────────┼───────────────────┘
                   ┌───────▼────────┐
                   │  Data Plane    │
                   │  (Sidecar)     │
                   └───────┬────────┘
                   ┌───────▼────────┐
                   │  Control Plane │
                   │  (Istiod)     │
                   └───────────────┘

9.2 Istio

9.2.1 Istio概述

Istio是最流行的开源服务网格实现。

核心组件

  1. 控制平面(Istiod)
  2. Istiod 统一了流量管理(原 Pilot)、证书管理(原 Citadel)、配置管理(原 Galley)等功能

  3. 数据平面(Envoy)

  4. Sidecar代理
  5. 流量拦截
  6. 策略执行

9.2.2 安装Istio

Bash
# 下载Istio
curl -L https://istio.io/downloadIstio | sh -  # |管道:将前一命令的输出作为后一命令的输入

# 进入目录
cd istio-$ISTIO_VERSION  # 替换为实际下载的版本号

# 添加istioctl到PATH
export PATH=$PATH:$PWD/bin

# 安装Istio
istioctl install --set profile=demo -y

# 验证安装
kubectl get pods -n istio-system

9.2.3 Istio配置

VirtualService

YAML
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews                  # 目标服务名称
  http:
  # 规则1:基于请求头的精确匹配路由
  - match:
    - headers:
        end-user:
          exact: jason        # 当用户为 jason 时,路由到 v2 版本
    route:
    - destination:
        host: reviews
        subset: v2
  # 规则2:默认流量按权重分配(金丝雀发布)
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 90              # 90% 流量到 v1(稳定版)
    - destination:
        host: reviews
        subset: v2
      weight: 10              # 10% 流量到 v2(新版本)

DestinationRule

YAML
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews              # 目标服务
  # 定义服务的子集(版本),供 VirtualService 路由引用
  subsets:
  - name: v1                 # 子集名称:v1
    labels:
      version: v1            # 匹配 Pod 标签 version=v1
  - name: v2                 # 子集名称:v2
    labels:
      version: v2
  - name: v3                 # 子集名称:v3
    labels:
      version: v3

Gateway

YAML
apiVersion: networking.istio.io/v1
kind: Gateway
metadata:
  name: bookinfo-gateway      # 网关名称
spec:
  selector:
    istio: ingressgateway      # 绑定到 Istio 入口网关
  servers:
  - port:
      number: 80               # 监听 80 端口
      name: http
      protocol: HTTP            # 使用 HTTP 协议
    hosts:
    - "*"                      # 接受所有域名的流量

9.3 流量管理

9.3.1 负载均衡

YAML
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
  name: reviews-lb
spec:
  host: reviews               # 目标服务
  trafficPolicy:
    loadBalancer:
      # 负载均衡策略:轮询(ROUND_ROBIN)
      # 其他可选:LEAST_CONN(最少连接)、RANDOM(随机)、PASSTHROUGH(透传)
      simple: ROUND_ROBIN

9.3.2 灰度发布

YAML
apiVersion: networking.istio.io/v1  # apiVersion指定K8s API版本
kind: VirtualService  # kind指定资源类型
metadata:
  name: reviews-canary         # 灰度发布配置
spec:  # spec定义资源的期望状态
  hosts:
  - reviews
  http:
  - route:
    # 灰度发布策略:逐步将流量从旧版本切换到新版本
    - destination:
        host: reviews
        subset: v1             # 旧版本(稳定版)
      weight: 90               # 承担 90% 流量
    - destination:
        host: reviews
        subset: v2             # 新版本(灰度版)
      weight: 10               # 承担 10% 流量,逐步增加验证稳定性

9.4 练习题

基础题

  1. 选择题
  2. 服务网格的数据平面通常使用什么?

    • A. Nginx
    • B. Envoy
    • C. HAProxy
    • D. Traefik
  3. 简答题

  4. 解释服务网格的价值。
  5. 说明Istio的核心组件。

进阶题

  1. 实践题
  2. 安装Istio服务网格。
  3. 配置流量管理规则。
  4. 实现灰度发布。

  5. 设计题

  6. 设计一个生产级的服务网格架构。
  7. 设计一个多集群服务网格方案。

答案

1. 选择题答案

  1. B(服务网格的数据平面通常使用Envoy)

2. 简答题答案

服务网格的价值: - 流量管理 - 安全通信 - 可观测性

Istio的核心组件: - 控制平面:Istiod - 数据平面:Envoy Sidecar

3. 实践题答案

参见9.2-9.3节的示例。

4. 设计题答案

参见9.1-9.3节的架构设计。

9.5 面试准备

大厂面试题

字节跳动

  1. 解释服务网格的架构。
  2. Istio的流量管理机制是什么?
  3. 如何实现服务间通信的加密?
  4. 如何监控服务网格?

腾讯

  1. VirtualService和DestinationRule的区别是什么?
  2. 如何实现灰度发布?
  3. 如何处理服务网格的性能问题?
  4. 如何设计服务网格的监控?

阿里云

  1. 服务网格的最佳实践是什么?
  2. 如何实现多集群服务网格?
  3. 如何处理服务网格的安全?
  4. 如何设计服务网格的容错?

📚 参考资料

🎯 本章小结

本章深入讲解了服务网格技术,包括:

  1. 服务网格的核心概念和架构
  2. Istio的配置和使用
  3. 流量管理和安全策略
  4. 完整的实战案例

通过本章学习,你掌握了服务网格的核心技术,能够搭建生产级的服务网格。下一章将深入学习Serverless架构。