如何从 Juju 获取 $db_host 作为域名?

如何从 Juju 获取 $db_host 作为域名?

我使用 Juju 的手动环境,为了不丢失机器,我将它们全部添加为 machinename.local(使用 avahi-discover)。由于管理方面的一些规则,无法使用静态 IP。

例如,当我添加服务和 mysql 之间的关系时,$db_host 总是从 mysql 主机获取 ip 而不是域。

我如何将 $db_host 与 avahi 域而不是 IP 建立关系?

答案1

首先,需要了解有关关系的一些事项:

  • Juju 与决定特定关系设置(例如,在 IP 地址或域名之间进行选择)关系不大。由实现特定关系类型的 charms 来决定设置哪些关系数据。

  • 作为例外,Juju 确实private-address默认设置了关系设置以方便使用,但 charms 可以删除或更改它。

  • Jujuprivate-address在关系设置以及输出中提供unit-get private-address地址,而不是名称。

因此,您最终得到的是 IP 地址而不是主机名,这取决于您所关联的魅力和 Juju 的默认设置,具体取决于具体情况。

查看 mysql charm,我发现它根据 的输出设置host(in ) 。hooks/db-relation-joinedunit-get private-address

因此,一种选择是修改每个设置地址的 charm,并将其更改为提供您需要的名称。或者,如果 charm 只使用默认设置private-address,则在钩子中覆盖它*-relation-joined。在您的环境中,使用类似调用hostname和附加的操作.local即可。但这显然不是一个很好的解决方案,因为您必须修改每个受影响的 charm。

不幸的是,大多数 charm 都是为相反的工作环境而设计的 - IP 通常不会改变(或者管理员可以控制以确保 IP 不会改变),但 mDNS(Zeroconf 所需的)通常不起作用,并且没有可用的中央 DNS 服务器。因此,尽管 Juju 并没有特别要求 charm 只支持地址,但这通常是 charm 商店中的所有 charm 所做的。

相关内容