第 13 章:将虚拟机工作负载纳入网格
本文梳理了 Istio 如何将虚拟机(VM)工作负载纳入服务网格,涵盖身份配置、自动注册、健康探测、DNS 代理等关键机制,帮助企业平滑实现传统与云原生混合治理。
虚拟机纳管的背景与挑战
在实际企业环境中,部分关键业务仍运行在虚拟机或物理机上,难以短期内容器化。将这些传统工作负载纳入 Istio 服务网格,可统一治理、提升安全与弹性。主要挑战包括:
- 虚拟机缺乏自动注入 Sidecar 的能力
- 身份令牌需手动分发
- DNS 解析与健康探测需适配非 Kubernetes 环境
Istio 虚拟机支持的核心机制
Istio 1.9+ 引入了 VM 支持的标准化 API 和自动化流程,主要包括:
WorkloadGroup
:定义一组虚拟机的配置模板(类似 Deployment)WorkloadEntry
:代表单台虚拟机实例(类似 Pod)- 本地 DNS 代理:解决集群服务 FQDN 解析
- 自动注册与健康探测:提升高可用性

身份令牌与安全接入
- 通过 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 纳管流程
参考文献
- Istio 官方文档 - istio.io
- Istio VM Integration - istio.io
- SPIFFE 标准 - spiffe.io
- Kubernetes ServiceEntry 说明 - kubernetes.io
- Istio DNS 代理原理 - istio.io