![如何从 lxd 主机为 lxd 容器启用主机名解析(dns)?](https://linux22.com/image/1008205/%E5%A6%82%E4%BD%95%E4%BB%8E%20lxd%20%E4%B8%BB%E6%9C%BA%E4%B8%BA%20lxd%20%E5%AE%B9%E5%99%A8%E5%90%AF%E7%94%A8%E4%B8%BB%E6%9C%BA%E5%90%8D%E8%A7%A3%E6%9E%90%EF%BC%88dns%EF%BC%89%EF%BC%9F.png)
如何从 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
到主机名。
请注意,重启后此配置将被忘记。