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

问题描述 投票:0回答:3

我有一个可以在多种环境下运行的简单入口文件,但要访问它,它的行为会有所不同,具体取决于我是在 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
检查入口创建的 loadBalancer 的主机名时,我得到了相同的结果。我希望在使用 minikube IP 的情况下看到 IP (Ubuntu)。

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

再次强调,所有服务都已启动并运行良好,问题只是

/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

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

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

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
kubernetes-ingress minikube
3个回答
7
投票

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
使其可用。然后,当我们在 Mac 上启动
minikube tunnel
时,它将像任何其他公开的服务一样连接到入口。

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


1
投票

您所描述的行为很可能是因为当前仅在使用 Docker 驱动程序时在 Linux 系统上支持

ingress
ingress-dns
插件,如 minikube 文档的 已知问题 部分所述。


0
投票

在我的 minikube(macos BigSur) 中,版本为 v1.25.2,

  • 我需要在一个终端中运行

    minikube tunnel

    minikube tunnel 
    
    
  • 此外,入口主机需要在

    /etc/hosts
    中映射到
    127.0.0.1
    。例如,假设我的入口主机为“core.harbor.domain”。此域映射必须在
    /etc/hosts
    文件中设置

    sudo vi /etc/hosts
    
    127.0.0.1 core.harbor.domain
    
    
© www.soinside.com 2019 - 2024. All rights reserved.