VirtualMachineInstance당 고유한 DNS 레코드를 만들려면 spec.hostname
과 spec.subdomain
를 설정할 수 있습니다. 하위 도메인이 설정되어 있고 하위 도메인과 일치하는 이름을 가진 헤드리스 서비스가 있는 경우 kube-dns는 서비스 선택기와 일치하는 모든 VirtualMachineInstance에 대해 고유한 DNS 항목을 만듭니다. 추가 정보는 DNS for Services and Pods 문서를 참조하세요.
다음 예제는 VirtualMachine과 VirtualMachineInstance의 레이블과 하위 도메인과 일치하는 헤드리스 서비스로 구성됩니다.
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:
name: vmi-fedora
labels:
expose: me
spec:
hostname: "myvmi"
subdomain: "mysubdomain"
domain:
devices:
disks:
- disk:
bus: virtio
name: containerdisk
- disk:
bus: virtio
name: cloudinitdisk
resources:
requests:
memory: 1024M
terminationGracePeriodSeconds: 0
volumes:
- name: containerdisk
containerDisk:
image: kubevirt/fedora-cloud-registry-disk-demo:latest
- cloudInitNoCloud:
userDataBase64: IyEvYmluL2Jhc2gKZWNobyAiZmVkb3JhOmZlZG9yYSIgfCBjaHBhc3N3ZAo=
name: cloudinitdisk
---
apiVersion: v1
kind: Service
metadata:
name: mysubdomain
spec:
selector:
expose: me
clusterIP: None
ports:
- name: foo # Actually, no port is needed.
port: 1234
targetPort: 1234
결과적으로, 예를 들어 virtctl console vmi-fedora
를 통해 VirtualMachineInstance에 들어가서 myvmi.mysubdomain을 ping하면 VirtualMachineInstance(서비스가 아닌)의 IP인 10.244.0.57을 가리키는 myvmi.mysubdomain.default.svc.cluster.local의 DNS 항목을 찾을 수 있습니다:
[fedora@myvmi ~]$ ping myvmi.mysubdomain
PING myvmi.mysubdomain.default.svc.cluster.local (10.244.0.57) 56(84) bytes of data.
64 bytes from myvmi.mysubdomain.default.svc.cluster.local (10.244.0.57): icmp_seq=1 ttl=64 time=0.029 ms
[fedora@myvmi ~]$ ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 0a:58:0a:f4:00:39 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.57/24 brd 10.244.0.255 scope global dynamic eth0
valid_lft 86313556sec preferred_lft 86313556sec
inet6 fe80::858:aff:fef4:39/64 scope link
valid_lft forever preferred_lft forever
따라서 spec.hostname과 spec.subdomain은 <vmi.spec.hostname>.<vmi.spec.subdomain> 형식의 DNS A 레코드로 변환됩니다. spec.hostname이 설정되지 않은 경우 VirtualMachineInstance 이름 자체로 돌아갑니다. 그러면 결과 DNS A 레코드는 다음과 같습니다: <vmi.metadata.name>.<vmi.spec.subdomain>.<vmi.metadata.namespace>.svc.cluster.local