minikube 的入口在 Mac 和 Ubuntu 上的工作方式不同。何时将 etc/hosts 设置为 127.0.0.1 与 "minikube ip"?

ingress with minikube working differently on Mac vs Ubuntu. When to set etc/hosts to 127.0.0.1 vs "minikube ip"?

我有一个简单的入口文件,它可以在多个环境中工作,但是要访问它,它的行为会有所不同,具体取决于我 运行在我的 Mac 或我的 Mac 上安装我的 minikube 集群Ubuntu mac海因斯。

具体来说,对于我的 mac,我必须添加条目: 127.0.0.1 my.kube 到 /etc/hosts,还有 运行 minikube tunnel 让我能够在 http://my.kube.

的浏览器中访问我的应用程序

但是,对于我的 Ubuntu 系统,我必须获取 minikube ip 并将生成的 ip 放入 /etc/hosts 中,例如 192.168.49.2 my.kube。然后我不需要 运行 minikube tunnel.

虽然我可以看到每个的优缺点:

  1. 使用 127.0.0.1 和隧道消除了对 minikube ip 的依赖,如果删除并重新创建集群,这种依赖可能会改变(尽管已经进行了一些工作以使其持久化)。
  2. 使用 minikube ip 而不需要隧道也很好。

但是,我的问题是为什么事情的表现完全不同?

我已经在 minikube addons enable ingress.

的两个环境中启用了 ingress 插件

当我使用 kubectl get ingress my-ingress -o yaml 检查入口创建的 loadBalancer 的主机名时,我得到了相同的结果。我希望在使用 minikube IP 的情况下看到一个 IP (Ubuntu)。

....
status:
  loadBalancer:
    ingress:
    - hostname: localhost

同样,所有服务都已启动并且 运行ning 正常,这只是 /etc/hosts 中的内容以及 minikube tunnel 是否 运行ning 的问题.

此外,需要说明的是,我的 Ubuntu 系统无法与 127.0.0.1minikube tunnel 一起使用。我找不到适用于这两种环境的通用方法。

作为参考,这是我的入口文件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: my.kube
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-ui
                port:
                  number: 3000
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: my-api
                port:
                  number: 8080

为了保护无辜者,部分名称已更改。

为了完整起见,服务很简单:

apiVersion: v1
kind: Service
metadata:
  name: my-ui
spec:
  selector:
    app: my-ui
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: my-api
spec:
  selector:
    app: my-api
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

您描述的行为很可能是因为 ingressingress-dns 插件当前仅在使用 Docker 驱动程序时在 Linux 系统上受支持,如前所述在 minikube 文档的 Known Issues 部分。

Minikube 在 Mac 和 Linux 上对入口的支持不同。

在 Linux 上完全支持入口,因此不需要使用 minikube tunnel

Mac 由于网络问题,存在未解决的问题。文档指出不支持 minikube ingress 插件,但我认为如果这不是错误的,那将是极具误导性的。它只是得到不同的支持(而且不太好)。

在 Mac 和 Linux 上都需要 minikube addons enable ingress。在 Mac 上启用入口插件表明入口将在 127.0.0.1 上可用,如屏幕截图所示,而 Linux 将使其在 minikube ip 上可用。然后,当我们在 Mac 上启动 minikube tunnel 时,它将像任何其他暴露的服务一样连接到入口。

感谢 Gabriel 为我指明了正确的方向。