【问题标题】:How to create "DNS entries" for localhost kubernetes ingress hosts?如何为 localhost kubernetes 入口主机创建“DNS 条目”?
【发布时间】:2021-10-11 20:32:31
【问题描述】:

我已经为 ingress-nginx 配置了特定于主机的入口资源,那么如何从我的桌面浏览器以及集群内的其他 pod 中访问http://appX.my.example.com,这也需要访问http://appX.my.example.com

我在 Windows 上的 docker 容器中使用 kind 在本地运行 kubernetes。我猜同样的问题也适用于 minicube、k3s 或其他任何东西。我在 Windows 上使用 Docker for-win 和 WSL2 运行它(这可能无关紧要)。

我找到的一个解决方案是查看 IP 地址 host.docker.internal 解析为什么(当前为 192.168.1.100),然后在 C:\Windows\System32\drivers\etc\hosts 中创建这样的条目:

192.168.1.100   appx.my.example.com
192.168.1.100   appy.my.example.com

现在http://appX.my.example.com 在桌面浏览器和appY 中都能正确解析。一切正常。这有两个问题:

  • 例如重启后、启动 VPN 后以及其他黑魔法原因,host.docker.internal“有时”会更改 IP 地址
  • 无法在C:\Windows\System32\drivers\etc\hosts(或linux /etc/hosts)中创建*.my.example.com 条目。

这导致需要维护容易出错且烦人的hosts 文件。

有没有更好的方法?如果我们想在入口规则中使用命名主机,那么在 localhost 上使用 kubernetes 进行开发的最简单方法是什么?

【问题讨论】:

  • 您使用的是哪个版本的 Kubernetes?您是什么意思 host.docker.internal “有时”更改 IP 地址?你看到this page了吗?
  • kind 当前安装的是 1.21 版。我认为host.docker.internal 在 docker 运行时是不变的(请记住:“kind”代表“Docker 中的 Kubernetes”)。但是,如果我在启用/禁用 VPN 或重新启动后重新启动 docker(以及因此 kind/kubernetes),host.docker.internal 很容易获得新的 IP 地址。

标签: kubernetes dns localhost kubernetes-ingress


【解决方案1】:

这是我想出的:

我在我拥有的域的真实 DNS 条目中创建了通配符证书。类似的东西

*.local.mydomain.dk. IN A 127.0.0.1

现在的诀窍是让 coredns(kubernetes 集群中的 DNS 服务器)将 *.local.mydomain.dk 解析为 CNAME host.docker.internal。为此,我在 kube-system 命名空间中修改了名为 coredns 的配置映射和部署:

diff -u configmap.yaml.orig configmap.yaml
--- configmap.yaml.orig 2021-08-10 00:24:29.234095600 +0200
+++ configmap.yaml  2021-08-10 00:24:37.664095600 +0200
@@ -7,6 +7,7 @@
            lameduck 5s
         }
         ready
+        file /etc/coredns/mydomain.dk.db local.mydomain.dk
         kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
@@ -21,6 +22,11 @@
         reload
         loadbalance
     }
+  mydomain.db: |
+    local.mydomain.dk.   IN SOA   sns.dns.icann.org. noc.dns.icann.org. 2015082541 7200 3600 1209600 3600
+    local.mydomain.dk.   IN NS    a.iana-servers.net.
+    local.mydomain.dk.   IN NS    b.iana-servers.net.
+    *.local.mydomain.dk. IN CNAME host.docker.internal.
 kind: ConfigMap
 metadata:
   creationTimestamp: "2021-08-09T21:58:26Z"
diff -u deployment.yaml.orig deployment.yaml
--- deployment.yaml.orig    2021-08-10 00:26:17.324095600 +0200
+++ deployment.yaml 2021-08-10 00:25:57.584095600 +0200
@@ -108,6 +108,8 @@
           items:
           - key: Corefile
             path: Corefile
+          - key: mydomain.dk.db
+            path: mydomain.dk.db
           name: coredns
         name: config-volume
 status:

现在whatever.local.mydomain.dk 在浏览器中解析为127.0.0.1,在pod 中解析为host.docker.internal。宾果游戏!

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 2021-05-31
    • 2020-12-28
    • 2021-08-08
    • 2020-11-04
    • 2020-10-20
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多