8.4. 使用其内部 FQDN 访问虚拟机
现在,您可以使用无头服务,访问连接到一个具有稳定 FQDN 的默认内部 pod 网络的虚拟机。
Kubernetes 无头服务 是一种形式的服务,它不会分配集群 IP 地址来代表一组 pod。对于无头服务,它不是为服务提供一个虚拟 IP 地址,而是为与服务关联的每个 pod 创建一个 DNS 记录。您可以通过 FQDN 来公开虚拟机,而无需公开特定的 TCP 或 UDP 端口。
如果使用 OpenShift Container Platform Web 控制台创建虚拟机,您可以在 VirtualMachine 详情页的 Overview 标签页中找到它在 Network 标题中列出的内部 FQDN。有关连接到虚拟机的更多信息,请参阅使用其内部 FQDN 连接到虚拟机。
8.4.1. 使用 CLI 在项目中创建无头服务
要在命名空间中创建无头服务,请将 clusterIP: None
参数添加到服务 YAML 定义中。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
创建
Service
清单以公开虚拟机,如下例所示:apiVersion: v1 kind: Service metadata: name: mysubdomain 1 spec: selector: expose: me 2 clusterIP: None 3 ports: 4 - protocol: TCP port: 1234 targetPort: 1234
-
保存
Service
清单文件。 运行以下命令来创建服务:
$ oc create -f headless_service.yaml
8.4.2. 使用 CLI 将虚拟机映射到无头服务
要使用其内部完全限定域名 (FQDN) 从集群中连接到虚拟机 (VM),您必须首先将虚拟机映射到无头服务。在虚拟机配置文件中设置 spec.hostname
和 spec.subdomain
参数。
如果一个无头服务的名称与子域匹配,则会为虚拟机创建一个唯一的 DNS 记录,格式为 <vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local
。
流程
运行以下命令,编辑
VirtualMachine
清单以添加服务选择器标签和子域:$ oc edit vm <vm_name>
VirtualMachine
清单文件示例apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-fedora spec: template: metadata: labels: expose: me 1 spec: hostname: "myvm" 2 subdomain: "mysubdomain" 3 # ...
- 保存更改并退出编辑器。
- 重启虚拟机以应用更改。
8.4.3. 使用其内部 FQDN 连接到虚拟机
您可以使用其内部完全限定域名 (FQDN) 连接到虚拟机 (VM)。
先决条件
-
已安装
virtctl
工具。 -
您已从 web 控制台或将虚拟机映射到无头服务来识别虚拟机的内部 FQDN。内部 FQDN 的格式是
<vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local
。
流程
输入以下命令连接到虚拟机控制台:
$ virtctl console vm-fedora
要使用请求的 FQDN 连接到虚拟机,请运行以下命令:
$ ping myvm.mysubdomain.<namespace>.svc.cluster.local
输出示例
PING myvm.mysubdomain.default.svc.cluster.local (10.244.0.57) 56(84) bytes of data. 64 bytes from myvm.mysubdomain.default.svc.cluster.local (10.244.0.57): icmp_seq=1 ttl=64 time=0.029 ms
在前面的示例中,
myvm.mysubdomain.default.svc.cluster.local
的 DNS 记录指向10.244.0.57
,这是目前分配给虚拟机的集群 IP 地址。