×

You can access a virtual machine (VM) that is attached to a secondary network interface from outside the cluster by using the fully qualified domain name (FQDN) of the cluster.

Accessing VMs by using the cluster FQDN is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.

For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.

Configuring DNS server for secondary networks

The Cluster Network Addons Operator (CNAO) deploys the Domain Name Server (DNS) server and monitoring components when you enable the KubeSecondaryDNS feature gate in the HyperConverged custom resource (CR).

Prerequisites
  • You installed the OpenShift CLI (oc).

  • You have access to an OpenShift Container Platform cluster with cluster-admin permissions.

Procedure
  1. Create a LoadBalancer service using MetalLB or any other load balancer to expose the DNS server outside the cluster. The service listens on port 53 and targets port 5353. For example:

    $ oc expose -n openshift-cnv deployment/secondary-dns --name=dns-lb --type=LoadBalancer --port=53 --target-port=5353 --protocol='UDP'
  2. Retrieve the public IP address of the service by querying the Service object:

    $ oc get service -n openshift-cnv
    Example output
    NAME        TYPE            CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE
    dns-lb   LoadBalancer       172.30.27.5    10.46.41.94      53:31829/TCP     5s
  3. Deploy the DNS server and monitoring components by editing the HyperConverged CR:

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
        featureGates:
          deployKubeSecondaryDNS: true (1)
        kubeSecondaryDNSNameServerIP: "10.46.41.94" (2)
    # ...
    1 Set the KubeSecondaryDNS feature gate to true.
    2 Set the IP address of the service to the value retrieved in step 2.
  4. Retrieve the FQDN of the OpenShift Container Platform cluster by using the following command:

    $ oc get dnses.config.openshift.io cluster -o json | jq .spec.baseDomain
    Example output
    openshift.example.com
  5. Point to the DNS server by using one of the following methods:

    • Add the kubeSecondaryDNSNameServerIP value to the resolv.conf file on your local machine.

      Editing the resolv.conf file overwrites any existing DNS settings.

    • Add the kubeSecondaryDNSNameServerIP value and the cluster FQDN to the enterprise DNS server records. For example:

      vm.<FQDN>. IN NS ns.vm.<FQDN>.
      ns.vm.<FQDN>. IN A 10.46.41.94

Connecting to a virtual machine on a secondary network by using the cluster FQDN

You can access a virtual machine (VM) that is attached to a secondary network interface from outside the cluster by using the fully qualified domain name (FQDN) of the cluster.

Prerequisites
  • The QEMU guest agent must be running on the virtual machine.

  • The IP address of the VM that you want to connect to, by using a DNS client, must be public.

  • You have configured the DNS server for secondary networks.

  • You have retrieved the fully qualified domain name (FQDN) of the cluster.

Procedure
  1. Retrieve the VM configuration by using the following command:

    $ oc get vm -n <namespace> <vm_name> -o yaml
    Example output
    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: example-vm
      name: example-vm
      namespace: example-namespace
    spec:
      running: true
      template:
        metadata:
          labels:
            kubevirt.io/vm: example-vm
        spec:
          domain:
            devices:
    # ...
              interfaces:
                - bridge: {}
                  name: example-nic
    # ...
          networks:
          - multus:
              networkName: bridge-conf
            name: example-nic (1)
    # ...
    1 Specify the name of the secondary network interface.
  2. Connect to the VM by using the ssh command:

    $ ssh <user_name>@<interface_name>.<vm_name>.<namespace>.vm.<FQDN> (1)
    1 Specify the user name, interface name, VM name, VM namespace, and FQDN.
    Example
    $ ssh you@example-nic.example-vm.example-namespace.vm.openshift.example.com