8.12. 使用集群 FQDN 访问虚拟机
您可以使用集群的完全限定域名 (FQDN) 从集群外部访问附加到二级网络接口的虚拟机 (VM)。
使用集群 FQDN 访问虚拟机只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
8.12.1. 为二级网络配置 DNS 服务器
当您在 HyperConverged
自定义资源 (CR) 中启用 deployKubeSecondaryDNS
功能门时,Cluster Network Addons Operator (CNAO) 会部署域名服务器 (DNS) 服务器和监控组件。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 已为集群配置负载均衡器。
-
使用
cluster-admin
权限登录到集群。
流程
运行以下命令,在默认编辑器中编辑
HyperConverged
CR:$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
根据以下示例启用 DNS 服务器和监控组件:
apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: featureGates: deployKubeSecondaryDNS: true 1 # ...
- 1
- 启用 DNS 服务器
- 保存文件并退出编辑器。
根据以下示例运行
oc expose
命令,创建一个负载均衡器服务来公开集群外的 DNS 服务器:$ oc expose -n openshift-cnv deployment/secondary-dns --name=dns-lb \ --type=LoadBalancer --port=53 --target-port=5353 --protocol='UDP'
运行以下命令来检索外部 IP 地址:
$ 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
再次编辑
HyperConverged
CR:$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
将您之前检索到的外部 IP 地址添加到企业 DNS 服务器记录的
kubeSecondaryDNSNameServerIP
字段中。例如:apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: featureGates: deployKubeSecondaryDNS: true kubeSecondaryDNSNameServerIP: "10.46.41.94" 1 # ...
- 1
- 指定负载均衡器服务公开的外部 IP 地址。
- 保存文件并退出编辑器。
运行以下命令来检索集群 FQDN:
$ oc get dnses.config.openshift.io cluster -o jsonpath='{.spec.baseDomain}'
输出示例
openshift.example.com
指向 DNS 服务器。将
kubeSecondaryDNSNameServerIP
值和集群 FQDN 添加到企业 DNS 服务器记录中。例如:vm.<FQDN>. IN NS ns.vm.<FQDN>.
ns.vm.<FQDN>. IN A <kubeSecondaryDNSNameServerIP>
8.12.2. 使用集群 FQDN 连接到二级网络上的虚拟机
您可以使用集群的完全限定域名(FQDN)访问附加到二级网络接口的正在运行的虚拟机(VM)。
先决条件
- 您在虚拟机上安装了 QEMU 客户机代理。
- 虚拟机的 IP 地址是公共的。
- 为二级网络配置了 DNS 服务器。
您获取了集群的完全限定域名(FQDN)。
要获取 FQDN,请使用
oc get
命令,如下所示:$ oc get dnses.config.openshift.io cluster -o json | jq .spec.baseDomain
流程
运行以下命令,从虚拟机配置检索网络接口名称:
$ oc get vm -n <namespace> <vm_name> -o yaml
输出示例
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm namespace: example-namespace spec: running: true template: spec: domain: devices: interfaces: - bridge: {} name: example-nic # ... networks: - multus: networkName: bridge-conf name: example-nic 1
- 1
- 请注意网络接口的名称。
使用
ssh
命令连接到虚拟机:$ ssh <user_name>@<interface_name>.<vm_name>.<namespace>.vm.<cluster_fqdn>