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)。

流程

  1. 创建 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
    1
    服务的名称。这必须与 VirtualMachine 清单文件中的 spec.subdomain 属性匹配。
    2
    此服务选择器必须与 VirtualMachine 清单文件中的 expose:me 标签匹配。
    3
    指定无头服务。
    4
    服务公开的端口列表。您必须至少定义一个端口。这可以是任意值,因为它不会影响无头服务。
  2. 保存 Service 清单文件。
  3. 运行以下命令来创建服务:

    $ oc create -f headless_service.yaml

8.4.2. 使用 CLI 将虚拟机映射到无头服务

要使用其内部完全限定域名 (FQDN) 从集群中连接到虚拟机 (VM),您必须首先将虚拟机映射到无头服务。在虚拟机配置文件中设置 spec.hostnamespec.subdomain 参数。

如果一个无头服务的名称与子域匹配,则会为虚拟机创建一个唯一的 DNS 记录,格式为 <vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local

流程

  1. 运行以下命令,编辑 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
    # ...

    1
    expose:me 标签必须与之前创建的 Service 清单的 spec.selector 属性匹配。
    2
    如果没有指定此属性,则生成的 DNS A 记录的格式为 <vm.metadata.name>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local
    3
    spec.subdomain 属性必须与 Service 对象的 metadata.name 值匹配。
  2. 保存更改并退出编辑器。
  3. 重启虚拟机以应用更改。

8.4.3. 使用其内部 FQDN 连接到虚拟机

您可以使用其内部完全限定域名 (FQDN) 连接到虚拟机 (VM)。

先决条件

  • 已安装 virtctl 工具。
  • 您已从 web 控制台或将虚拟机映射到无头服务来识别虚拟机的内部 FQDN。内部 FQDN 的格式是 <vm.spec.hostname>.<vm.spec.subdomain>.<vm.metadata.namespace>.svc.cluster.local

流程

  1. 输入以下命令连接到虚拟机控制台:

    $ virtctl console vm-fedora
  2. 要使用请求的 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 地址。

8.4.4. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.