Accessing a virtual machine on a secondary network by using the cluster domain name
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 OKD cluster with
cluster-admin
permissions.
Procedure
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'
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
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 totrue
.2 Set the IP address of the service to the value retrieved in step 2. Retrieve the FQDN of the OKD cluster by using the following command:
$ oc get dnses.config.openshift.io cluster -o json | jq .spec.baseDomain
Example output
openshift.example.com
Point to the DNS server by using one of the following methods:
Add the
kubeSecondaryDNSNameServerIP
value to theresolv.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
Retrieve the VM configuration by using the following command:
$ oc get vm -n secondary-test vm-test-sec-dns -o yaml
Example output
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
labels:
kubevirt.io/vm: vm-test-sec-dns
name: vm-test-sec-dns (1)
namespace: secondary-test (2)
spec:
running: true
template:
metadata:
labels:
kubevirt.io/vm: vm-test-sec-dns
spec:
domain:
devices:
# ...
interfaces:
- bridge: {}
name: nic1
# ...
networks:
- multus:
networkName: bridge-conf
name: nic1 (3)
# ...
1 The name of the VirtualMachine
object.2 The namespace in which the VirtualMachine
object is defined.3 The name of the secondary network interface. Connect to the VM by using the following command:
<interface_name>.<vm_name>.<namespace>.vm.<FQDN>
where:
<interface_name>
specifies the name of the secondary network interface.<vm_name>
specifies the name of theVirtualMachine
object.<namespace>
specifies the namespace in which theVirtualMachine
object is defined.<FQDN>
specifies the fully qualified domain name of the cluster.
Example
nic1.vm-test-sec-dns.secondary-test.vm.openshift.example.com