Domain-Name-System

通過內部 DNS 伺服器解析 Kubernetes 服務 - 裸機

  • February 18, 2020

我有一個執行 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。

我知道這只是我不知道我在做什麼,但我什至不知道在這一點上Google正確的事情。感謝您提供的任何指導。

您需要在 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 中的位置。

引用自:https://serverfault.com/questions/1003236