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

Cha*_*e G 5 minikube kubernetes-ingress

我有一个可以在多种环境下运行的简单入口文件,但要访问它,它的行为会有所不同,具体取决于我是在 Mac 还是 Ubuntu 机器上运行 minikube 集群。

具体来说,对于我的 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

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

....
status:
  loadBalancer:
    ingress:
    - hostname: localhost
Run Code Online (Sandbox Code Playgroud)

再说一次,所有服务都已启动并运行良好,问题只是其中包含哪些内容/etc/hosts以及是否minikube tunnel正在运行。

另外,需要明确的是,我的 Ubuntu 系统无法与127.0.0.1和 一起使用minikube 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
Run Code Online (Sandbox Code Playgroud)

为了保护无辜者,一些名字已被更改。

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

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
Run Code Online (Sandbox Code Playgroud)

Cha*_*e G 6

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

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

在 Mac 上,由于网络问题存在一个未解决的问题。文档指出不支持 minikube ingress 插件,但我认为这即使不是不正确,也是高度误导的。只是支持方式不同(而且不太好)。

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

CLI 中的 minikube 命令

感谢加布里埃尔为我指明了正确的方向。