第 13 章:将虚拟机工作负载纳入网格

本文梳理了 Istio 如何将虚拟机(VM)工作负载纳入服务网格,涵盖身份配置、自动注册、健康探测、DNS 代理等关键机制,帮助企业平滑实现传统与云原生混合治理。

虚拟机纳管的背景与挑战

在实际企业环境中,部分关键业务仍运行在虚拟机或物理机上,难以短期内容器化。将这些传统工作负载纳入 Istio 服务网格,可统一治理、提升安全与弹性。主要挑战包括:

  • 虚拟机缺乏自动注入 Sidecar 的能力
  • 身份令牌需手动分发
  • DNS 解析与健康探测需适配非 Kubernetes 环境

Istio 虚拟机支持的核心机制

Istio 1.9+ 引入了 VM 支持的标准化 API 和自动化流程,主要包括:

  • WorkloadGroup:定义一组虚拟机的配置模板(类似 Deployment)
  • WorkloadEntry:代表单台虚拟机实例(类似 Pod)
  • 本地 DNS 代理:解决集群服务 FQDN 解析
  • 自动注册与健康探测:提升高可用性
图 1: 虚拟机纳管流程示意
图 1: 虚拟机纳管流程示意

身份令牌与安全接入

  • 通过 Kubernetes ServiceAccount 生成令牌,手动分发到 VM
  • istio-agent 使用令牌向 istiod 认证,获取 SPIFFE 身份证书
  • 支持平台分配身份(如云厂商原生身份集成,未来趋势)

自动注册与健康探测

  • VM 启动后自动向控制平面注册,生成 WorkloadEntry
  • 通过就绪探针(readiness probe)上报健康状态,控制平面动态调整流量路由
  • 存活探针(liveness probe)建议由云平台原生机制实现

DNS 代理与服务发现

  • VM 无法直接访问 Kubernetes DNS,需通过本地 DNS 代理解析集群服务名
  • istio-agent 捕获 DNS 查询,结合 NDS(Name Discovery Service)自动同步服务条目

实践:将虚拟机纳入服务网格

基础设施准备

  • 创建 Kubernetes 集群与虚拟机,确保网络互通
  • 集群侧安装 Istio,标注网络信息(如 topology.istio.io/network=west-network

控制平面与东西向网关配置

  • 安装控制平面,启用 VM 支持相关参数(自动注册、健康检查、DNS 捕获)
  • 部署东西向网关,暴露 istiod 和服务端口,供 VM 访问

WorkloadGroup 与配置生成

  • 定义 WorkloadGroup,指定端口、标签、服务账户、网络、健康探针等
  • 使用 istioctl x workload entry configure 生成 VM 所需配置和令牌
istioctl x workload entry configure \
  --name forum \
  --namespace forum-services \
  --clusterID "west-cluster" \
  --externalIP $VM_IP \
  --autoregister \
  -o ./ch13/workload-files/
  • 将生成的配置文件(含令牌、根证书、env 配置等)安全传输到虚拟机

虚拟机侧代理安装与配置

  • 安装 istio-agent(Debian/RedHat 包)
  • 按要求放置配置文件、证书、令牌
  • 配置 /etc/hosts 静态解析东西向网关和本机名
  • 启动 istio-agent 服务,检查日志确认与控制平面连接成功

自动注册与健康检查验证

  • 启动后自动生成 WorkloadEntry,可通过 kubectl get workloadentry 查看
  • 健康探针配置后,只有健康的 VM 实例才会被纳入流量路由

服务互通与 DNS 验证

  • VM 可通过集群服务名访问 Kubernetes 服务,流量经 Envoy Sidecar、东西向网关转发
  • 集群内服务可通过 Kubernetes Service 访问 VM,依赖标签选择器与健康状态
  • 本地 DNS 代理自动解析集群服务名,支持多种主机名变体

安全与访问控制

  • 可通过 PeerAuthentication 强制 VM 仅接受双向认证流量,提升安全性
  • 支持 AuthorizationPolicy、流量治理等 Istio 全部能力

关键配置与自动化建议

  • 推荐自动化令牌与配置分发,避免手工操作带来的安全与运维风险
  • 健康探针配置需区分就绪与存活,避免误杀实例
  • 结合云平台原生能力(如自动修复、负载均衡)提升 VM 高可用性
  • 配置合理的 DNS 代理与 Iptable 规则,确保流量与解析链路畅通

常见问题与排查

  • VM 端口未开放或应用未启动,健康检查失败,流量无法路由
  • 令牌或证书配置错误,istio-agent 无法注册
  • DNS 代理未生效,FQDN 解析失败,应用无法访问集群服务
  • 需通过 istioctl proxy-config endpoints、日志、抓包等工具定位问题

总结

  • Istio 支持通过 WorkloadGroup/WorkloadEntry、自动注册、健康探测和本地 DNS 代理,将虚拟机平滑纳入服务网格
  • VM 可与集群服务双向互通,享受流量治理、安全、可观测等网格能力
  • 推荐自动化配置与健康探测,结合云平台能力提升弹性与安全
  • 未来平台分配身份、自动化集成将进一步简化 VM 纳管流程

参考文献

  1. Istio 官方文档 - istio.io
  2. Istio VM Integration - istio.io
  3. SPIFFE 标准 - spiffe.io
  4. Kubernetes ServiceEntry 说明 - kubernetes.io
  5. Istio DNS 代理原理 - istio.io

文章导航

独立页面

这是书籍中的独立页面。

书籍首页

评论区