如何从 lxd 主机为 lxd 容器启用主机名解析(dns)?

如何从 lxd 主机为 lxd 容器启用主机名解析(dns)?

如何从 lxd 主机启用 lxd 主机名解析?

创建以下容器后:

>>> lxc launch ubuntu: container
Creating container
Starting container

>>> lxc list
+-----------------+---------+----------------------+------+------------+-----------+
| container       | RUNNING | 10.240.38.157 (eth0) |      | PERSISTENT | 0         |
+-----------------+---------+----------------------+------+------------+-----------+

可以使用 IP 地址但不能使用主机名访问:

>>> ping 10.240.38.157 -c 3
PING 10.240.38.157 (10.240.38.157) 56(84) bytes of data.
64 bytes from 10.240.38.157: icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from 10.240.38.157: icmp_seq=2 ttl=64 time=0.053 ms
64 bytes from 10.240.38.157: icmp_seq=3 ttl=64 time=0.041 ms

--- 10.240.38.157 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2044ms
rtt min/avg/max/mdev = 0.041/0.058/0.082/0.019 ms

>>> ping container
ping: unknown host container

如何使 lxd 容器能够通过主机名从 lxd 主机访问?

答案1

LXD 为您设置了一个 DHCP 和 DNS 服务器(dnsmasq),该服务器仅侦听接口lxdbr0。该 DHCP 服务器允许容器拥有主机名c1.lxd,如mycontainer.lxd等。它仅在容器内工作,因为容器会使用该 LXD 的 DNS 服务器自动配置。

如果您希望主机理解这些c1.lxd主机mycontainer.lxd名,则需要配置主机的 DNS 客户端服务以咨询 LXD 的 DNS 服务器。

答案2

这是将 LXD DNS 服务器临时添加到主机的简单方法。

首先,添加 的 DNS 服务器lxdbr0

sudo resolvectl dns lxdbr0 $(ip -f inet addr show lxdbr0 | sed -En -e 's/.*inet ([0-9.]+).*/\1/p')

其次,确保所有请求都*.lxd发送到该 DNS 服务器。

sudo resolvectl domain lxdbr0 lxd

此后,任何请求都containername.lxd将被解析为容器 IP 地址。确保添加.lxd到主机名

请注意,重启后此配置将被忘记。

相关内容