Ingress IP 返回 HTTP 错误 DNS_PROBE_FINISHED_NXDOMAIN

48次阅读
没有评论

问题描述

在使用 Kubernetes 中的 Ingress 时遇到了问题。他在执行 “kubectl get ingress” 命令后,得到了下面的输出:

NAME   HOSTS   ADDRESS          PORTS   AGE
main   *       192.168.39.190   80      46m

然而,当他尝试在 Chrome 中访问该 IP 地址时,却收到了以下错误信息:

无法访问网站。检查是否存在 name.local 的写入错误DNS_PROBE_FINISHED_NXDOMAIN

用户还在评论中提到,直接发送到 IP 地址的请求不应该触发 DNS 探测,所以问题可能出在用户使用的域名是 name.local。最近他在使用 Chrome 解析 .local 域名时遇到了困难,这可能与安全 DNS 配置有关。用户建议尝试在 Google Chrome 设置中关闭 “secure dns” 选项。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
用户遇到的问题可能有两个主要原因:

情况1 – 未暴露 DNS

如果你的 DNS 没有被暴露,这可能导致问题。在 Linux 下,你可以按以下步骤解决这个问题:
1. 使用命令 minikube ip 获取 Minikube 的 IP 地址。
2. 使用命令 vim /etc/hosts 编辑 hosts 文件。
3. 在文件中添加刚刚获取的 IP 地址以及你想要暴露的主机名,并保存文件。例如:
# 例如
192.168.39.70 elasticsearch-es-http

你无需重启任何服务,就可以直接生效。你可以添加所有需要的主机名。

情况2 – 在 Minikube 上使用 HTTPS

如果问题是第二种情况,即你的应用程序在使用 Minikube 时重定向到了 HTTPS 地址(由于你是在本地机器上工作,很可能没有安全证书),你需要找到一个方法让应用程序在使用 Minikube 时不使用 HTTPS。

示例脚本

以下是一个简单的 Bash 脚本示例,可以在容器A启动后启动容器B:

#!/bin/bash
# 启动容器A
docker run -d --name container_a your_image_a
# 等待容器A完全启动
while ! docker exec container_a echo "Container A is ready"; do
  sleep 1
done
# 启动容器B
docker run -d --name container_b your_image_b

在这个示例中,我们首先使用 docker run 命令启动容器A,并将其命名为 container_a。然后,使用一个循环来等待容器A完全启动(这里是通过在容器内运行 echo 命令来测试)。一旦容器A就绪,我们再使用 docker run 命令启动容器B,并将其命名为 container_b

希望这些解决方案能够帮助你解决问题。如果问题仍然存在或需要进一步的帮助,请随时提问。

正文完