七层网络的瑞士军刀 - 服务网格 Istio 流量管理

七层网络的瑞士军刀 - 服务网格 Istio 流量管理


第一部分:Istio 流量管理的核心资源

在我们动手之前,必须先了解 Istio 用来指挥交通的“三大法宝”。作为用户,我们通过创建和修改这些 Kubernetes CRD,来向 Istio 的控制平面 istiod 表达我们的意图。

1. Gateway - 网格的入口
  • 作用: Gateway 负责管理进出服务网格边缘的流量。你可以把它看作是 Istio 世界里,功能更强大的 Ingress。它定义了网格边缘的监听端口、协议和 TLS 证书
  • 它定义了“什么流量可以进来”,但它不关心这些流量进来之后要去哪里。
2. VirtualService - 智能的路由规则
  • 作用: 这是 Istio 中最核心、最强大的流量路由资源。它定义了流量在进入网格之后,应该如何被路由
  • 它定义了“流量要去哪里”。它可以基于丰富的 L7 属性(如 HTTP Host 头、URI 路径、请求头、gRPC 方法等)来制定极其精细的路由规则。它的核心能力包括:
    • 流量切分 (Traffic Splitting): 将流量按百分比分配到不同的服务版本(金丝雀发布的核心)。
    • 重写和重定向: 修改 URL 路径或 Host 头。
    • 超时和重试: 为请求配置统一的超时和重试策略。
    • 故障注入: 主动注入延迟或 HTTP 错误。
3. DestinationRule - 路由之后的目的地策略
  • 作用: DestinationRule 定义了当流量已经被 VirtualService 路由到某个具体服务后,应该如何与这个服务的 Pod 实例进行交互。它配置的是客户端(发起请求的那个 Sidecar)的行为。
  • 它定义了“到达目的地后该怎么做”。它的核心能力包括:
    • 定义服务子集 (Subsets): 这是它最重要的功能。通过 Pod 的标签,我们可以将一个服务的所有 Pod 分成不同的“版本子集”,例如 v1, v2。然后 VirtualService 就可以将流量路由到这些具名的子集上。
    • 连接池管理: 配置最大连接数、请求数等。
    • 负载均衡策略: 配置轮询、随机等负载均衡算法。
    • 异常点检测 (Outlier Detection): 自动将持续出错的 Pod 实例从负载均衡池中暂时移除。

三者关系: Gateway 守住大门 -> VirtualService 根据规则进行智能分流 -> 流量被导向 DestinationRule 中定义的具体服务子集。


第二部分:动手实战:实现金丝雀发布

前提: 一个已安装 Istio 的 Kubernetes 集群。你可以参考 Istio 官方文档 进行快速安装。

1. 部署一个多版本的应用

我们需要一个应用,它有两个版本 v1v2

# echoserver-app.yaml
apiVersion: v1
kind: Service
metadata: {
   
   name: echoserver-svc}
spec:
  selector: {
   
   app: echoserver}
  ports: [{
   
   port: 80, targetPort: 8080}]
---
apiVersion: apps/v1
kind: Deployment
metadata: {
   
   name: echoserver-v1-deploy}
spec:
  replicas: 1
  selector: {
   
   matchLabels: {
   
   app
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42587823

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值