我有一个运行 4 个节点的 kubernetes 集群,我的主主节点加上其他节点。我使用 kubespray 让一切运行起来。这是在我的家庭网络上,我将在下面解释。我想要完成的是让某种 DNS 解析工作,这样我就可以继续设置入口。
我的设置:
- 网络 - 使用 USG、Cloud Key 和交换机的 Unifi 设置。DHCP DNS指向Master box的内部IP加上8.8.8.8和8.8.4.4,默认搜索域设置为我的个人域之一(以mydomain.com为例)
- Master:运行 DNS (Bind9) plus 的 Ubuntu 18.04 LTS 作为 Kubernetes 集群的 master。他在内部解析为 server.mydomain.com
- 节点 1-3:Ubuntu 18.04 LTS 仅用作 Kubernetes 主机。内部解析为 nodeX.mydomain.com,其中 X 是节点号 1-3
我猜我需要以某种方式告诉在我的主服务器上运行的 DNS 服务器任何 XXX.server.mydomain.com。至少,我想象它应该如何工作?我不确定,也许我误解了它。
问题是,即使我尝试手动 nslookup 服务,它似乎仍然不起作用。我试过类似的东西:
> nslookup nzbget.server.mydomain.com 10.233.0.3
Server: 10.233.0.3
Address: 10.233.0.3#53
** server can't find nzbget.server.mydomain.com: NXDOMAIN
也
> nslookup nzbget 10.233.0.3
Server: 10.233.0.3
Address: 10.233.0.3#53
** server can't find nzbget.mydomain.com: REFUSED
其中 10.233.0.3 是集群中 CoreDNS 服务 IP 的 IP。
我知道这只是我不知道我在做什么,但我什至不知道在这一点上谷歌正确的事情。感谢您提供的任何指导。
您需要在 bind9 中设置通配符域/子域,如果您在 google 上搜索“绑定通配符记录”,您应该会找到这篇 带 BIND 的通配符 DNS
我会将@DarkVex 的答案保留为正确的答案,因为它确实回答了原始问题,但我想为将来可能会在这里绊倒的人添加我的最终解决方案的一些细节。
基本上,我试图通过简化的内部 DNS 名称访问我的 Kubernetes 服务,例如 jenkins.mydomain.com。仅使用 Docker,我在 Linux 主机上创建虚拟网卡,然后将 Docker 容器的 IP/端口映射到这些 IP/端口,然后将 Bind9 中的 DNS A 记录指向该 IP。我试图使用 Kubernetes 做类似的事情,但不知道如何实现。
事实证明这实际上比我想象的要容易。我要做的第一件事是向我的网络设置添加一个路由,以将 Kubernetes 中使用的 IP 子网路由到主节点的 IP。因此,例如我的内部网络有 3 个虚拟 LAN:10.0.xx、10.1.xx 和 10.2.xx,而我的 Kubernetes 选择了 10.233.xx 如果我的主节点在 10.0.0.10 上,那么我只是告诉我的路由器发送 10.233。 xx 到 10.0.0.10 的流量。这打开了 IP,以便我可以从外部访问它们。
接下来是以 LoadBalanced 模式为 Kubernetes 中的部署创建服务。我也可以使用 Ingress 服务器,但我没有看到需要,因为第一步允许我从内部网络上的任何地方访问服务。该服务位于所有已部署的 pod 之上,为所有底层 pod 公开一个负载平衡 IP。这里的关键是,虽然 Pod 的 IP 可以随时更改,但服务的 IP 保持静态,直到您将其删除。
最后一步与之前相同...只需在 Bind9 中添加一条 A 记录,指向 Service 的 IP。中提琴!我现在可以通过简化的主机名访问该服务。缺点是需要一些手动步骤才能完成。弄清楚如何设置 DNS 来代理所有请求会很好,也许使用 Ingress 设置查看请求的主机名以路由到正确的服务。无论如何,我最终可能会这样做,但现在它至少让我回到了我在 Docker 中的位置。