大家好!👋
在学习Istio或准备ICA (Istio Certified Associate) 认证时,最令人困惑的时刻是什么?那就是当你开始思考,“在这种情况下,我到底应该使用哪个YAML资源?” 🤯
VirtualService、DestinationRule、Gateway、ServiceEntry… 它们的名字相似,作用也容易混淆,对吧?所以今天,我准备了一份场景化Istio资源映射备忘单,你绝对需要在进入考场前牢记于心。
只要你仔细阅读这篇文章,复杂的场景问题也将不再可怕!🏃♂️💨

🚦 1. 流量管理 (Traffic Management)
Q. “请求应该发送到哪里,以及如何发送?”
流量控制问题是ICA考试的常客。当出现与部署策略或网络弹性(Resilience)相关的要求时,请考虑以下资源。
🔀 VirtualService (导航)
这是一个决定流量去向的路径的核心资源。
- 金丝雀部署 (Canary): “只将10%的流量发送到新版本(v2)” 👉 使用 route > weight 字段
- 条件路由: “将iPhone用户(根据请求头)发送到移动页面” 👉 使用 match > headers 字段
- 网络弹性: “如果无响应,重试3次(Retry)” 或 “如果2秒内无响应,则断开(Timeout)” 👉 使用 retries, timeout 字段
- 流量镜像: “希望在不影响实际生产环境的情况下进行测试” 👉 使用 mirror 字段
🛑 DestinationRule (到达后规则)
这定义了流量到达目的地(Pod组)后如何处理。
- 版本划分 (Subsets): “将v1 Pod和v2 Pod进行逻辑划分” 👉 subsets (通过标签区分)
- 熔断器 (Circuit Breaker): “暂时阻止并发连接过多或频繁出错的Pod” 👉 trafficPolicy > outlierDetection, connectionPool
- 负载均衡: “使用随机方式而不是轮询方式分配流量” 👉 trafficPolicy > loadBalancer
🛡️ 2. 安全 (Security)
Q. “谁可以进入,以及如何通信?”
安全问题通常以“允许谁,阻止谁”或“加密”的形式出现。
👮 AuthorizationPolicy (访问控制)
这是最常用的安全资源。它定义了谁(Who)可以做什么(What)。
- 白名单: “只允许’Product’服务访问” 👉 action: ALLOW, rules > from
- 方法限制: “只允许GET请求,阻止POST请求” 👉 rules > to > operation > methods: [“GET”]
- 全面阻止: “关闭此命名空间的所有入口” 👉 spec: {} (空规则 = 全部拒绝)
🔐 PeerAuthentication (mTLS)
这设置了服务间通信的加密级别。
- 强制加密: “所有通信必须严格使用mTLS” 👉 mtls > mode: STRICT
- 灵活模式: “允许明文和mTLS两种方式(迁移期间)” 👉 mode: PERMISSIVE
🆔 RequestAuthentication (JWT)
- 用户认证: “验证JWT令牌” 👉 jwtRules (配置 Issuer, JWKS URI)
🌐 3. 外部连接与网关 (Edge & External)
Q. “集群内部和外部如何连接?”
此区域处理Istio网格的边界(Edge)。
🚪 Gateway (大门)
- 开门: “接收来自外部的80端口流量” 👉 servers > port, hosts
- 注意: 仅创建Gateway只是打开了大门。需要VirtualService来决定流量去向!
🗺️ ServiceEntry (外部地址簿)
- 注册外部服务: “需要在网格内部调用Google或Yahoo API” 👉 hosts, resolution: DNS
- Istio默认会阻止或不管理未知的外部地址,因此需要注册。
📤 Egress TLS (出站加密)
- TLS发起: “内部应用通过HTTP发送,但在出站时转换为HTTPS发送” 👉 DestinationRule的 trafficPolicy > tls > mode: SIMPLE
💡 4. 最易混淆点:VS vs DR
考试中最容易混淆的两个资源,一次性为您理清!
| 资源 | 角色比喻 | 主要功能关键词 |
| — | — | — |
| VirtualService (VS) | 🚗 导航 | 路径查找, %分配, 重试, 超时 |
| DestinationRule (DR) | 🅿️ 停车场规则 | 版本分组(Subset), 熔断器, mTLS配置 |
– Tip: 如果是控制“路径”或“流量流向”,就是VS;如果是“Pod组设置”或“故障阻断”,就是DR。
📝 考试通过秘诀 (Exam Tips)
- 命名空间(Namespace)必查: 务必再次确认问题要求的操作是在’default’还是’istio-system’命名空间。在错误的地方创建将导致0分。😱
- apply是关键: 仅仅创建并保存漂亮的YAML文件是没用的。务必执行 kubectl apply -f <文件> 来创建资源。
- Gateway连接: 在创建VirtualService时,很多人会忘记在’gateways’字段中填写刚刚创建的Gateway名称,导致外部无法访问。务必检查连接!🔗
总结
🚦 1. 流量管理 (Traffic Management)
“请求应该发送到哪里,以及如何发送?”
| 场景 (Scenario) | 所需资源 | 核心配置字段 (Key Fields) |
| — | — | — |
| A/B测试, 金丝雀部署 (流量 % 分割) | VirtualService | route > weight (例如: 90, 10) |
| 根据URL路径, 请求头发送到不同位置 | VirtualService | match > uri, headers |
| 重试(Retry), 超时(Timeout) 设置 | VirtualService | retries, timeout |
| 定义特定版本(v1, v2)组 | DestinationRule | subsets (通过标签区分Pod) |
| 更改负载均衡算法 (RoundRobin, Random等) | DestinationRule | trafficPolicy > loadBalancer |
| 熔断器 (连接限制, 故障阻断) | DestinationRule | trafficPolicy > connectionPool, outlierDetection |
| 流量镜像 (复制实际请求进行测试) | VirtualService | mirror |
—
🛡️ 2. 安全 (Security)
“谁可以进入,以及如何通信?”
| 场景 (Scenario) | 所需资源 | 核心配置字段 (Key Fields) |
| — | — | — |
| 只允许特定服务访问 (白名单) | AuthorizationPolicy | action: ALLOW, rules > from, to |
| 阻止特定路径/方法 (拒绝) | AuthorizationPolicy | action: DENY, rules (优先级高) |
| mTLS模式设置 (Strict, Permissive) | PeerAuthentication | mtls > mode: STRICT |
| JWT令牌认证 (终端用户认证) | RequestAuthentication | jwtRules > issuer, jwksUri |
| 当您想关闭整个命名空间时 | AuthorizationPolicy | spec: {} (空规则 = 全部拒绝) |
—
🌐 3. 外部连接与网关 (Edge & External)
“集群内外连接”
| 场景 (Scenario) | 所需资源 | 核心配置字段 (Key Fields) |
| — | — | — |
| 接收外部流量 (打开入口端口) | Gateway | servers > port, hosts |
| 将接收到的流量路由到内部服务 | VirtualService | gateways中明确Gateway名称 |
| 注册外部服务 (Google, Yahoo等) | ServiceEntry | hosts, ports, resolution: DNS |
| 将出站流量转换为HTTPS (TLS发起) | DestinationRule | trafficPolicy > tls > mode: SIMPLE |
| 强制流量仅通过特定节点出站 (Egress Gateway) | Gateway (用于Egress) + VirtualService | gateways: [mesh, egress-gw] |
希望这份备忘单能帮助您通过ICA考试!Istio看起来很复杂,但只要根据场景正确匹配工具,就完全可以掌握。加油!💪✨
如果您有任何疑问或希望我涵盖的其他内容,请在评论中留言!
发表回复