$ oc expose -n openshift-cnv deployment/secondary-dns --name=dns-lb --type=LoadBalancer --port=53 --target-port=5353 --protocol='UDP'
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. |
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).
You installed the OpenShift CLI (oc
).
You have access to an OKD cluster with cluster-admin
permissions.
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
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 to true . |
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
openshift.example.com
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 |
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
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.
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.
Retrieve the VM configuration by using the following command:
$ oc get vm -n <namespace> <vm_name> -o yaml
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. |
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. |
$ ssh you@example-nic.example-vm.example-namespace.vm.openshift.example.com