集群内Windows VirtualMachineInstance的NodePort无法正常工作求助
Kubevirt Windows VMI NodePort服务无法访问问题排查
问题描述
在CentOS7系统部署的K8s集群中,以Pod形式运行的Windows虚拟机实例(VirtualMachineInstance)在9092端口运行服务,配置NodePort服务(端口30000)后无法实现外部访问,已关闭Windows防火墙。
相关配置
VirtualMachineInstance配置
--- apiVersion: kubevirt.io/v1alpha3 kind: VirtualMachineInstance metadata: name: win10-vm labels: special: key spec: domain: devices: interfaces: - name: default masquerade: {} model: virtio disks: - disk: bus: sata name: dvdisk - cdrom: bus: sata name: virtiocontainerdisk machine: type: "q35" resources: requests: memory: 8G networks: - name: default pod: {} # Stock pod network terminationGracePeriodSeconds: 0 volumes: - name: dvdisk dataVolume: name: windows-datavolume - name: virtiocontainerdisk containerDisk: image: quay.io/kubevirt/virtio-container-disk status: {}
NodePort Service配置
apiVersion: v1 kind: Service metadata: name: nodeport spec: externalTrafficPolicy: Cluster ports: - name: nodeport nodePort: 30000 port: 9092 protocol: TCP targetPort: 9092 selector: special: key type: NodePort
排查与解决步骤
验证标签匹配
执行命令检查VMI对应的Pod是否带有Service指定的标签:kubectl get pods -l special=key若无结果,需修正VMI的
metadata.labels或Service的selector,确保两者标签一致。检查VMI内部服务监听地址
登录Windows虚拟机,确认服务监听地址为0.0.0.0而非127.0.0.1,否则集群内无法访问该服务。测试集群内连通性
从集群内任意Pod尝试访问VMI的Pod IP和9092端口:# 替换<VMI_Pod_IP>为实际的Pod IP kubectl exec -it <任意Pod名称> -- telnet <VMI_Pod_IP> 9092若连接失败,说明VMI内部服务未正常启动或端口未开放(即使Windows防火墙已关闭,也需确认服务本身状态)。
检查NodePort服务状态
查看Service详情,确认Endpoints字段已关联到VMI的Pod:kubectl describe service nodeport若
Endpoints显示<none>,说明标签匹配失败,回到第一步排查。开放节点端口
检查CentOS7节点的firewalld是否放行30000端口:firewall-cmd --add-port=30000/tcp --permanent firewall-cmd --reload排查Kubevirt网络组件
查看Kubevirt控制器和处理程序的日志,确认网络配置无异常:kubectl logs -n kubevirt deployment/virt-controller kubectl logs -n kubevirt deployment/virt-handler验证外部网络路径
确认访问客户端与集群节点之间无网络限制(如路由器防火墙、安全组规则),确保30000端口的流量能到达节点。
内容的提问来源于stack exchange,提问作者Ajin Pradeep
相关产品推荐
相关产品推荐

