带有Minikube的入口在Mac和Ubuntu上的工作方式不同。何时将ETC/HOSTS设置为127.0.0.1 vs;mini kube IP"?

人气:964 发布:2022-10-16 标签: kubernetes-ingress minikube

问题描述

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

具体地说,对于我的Mac,我必须添加条目: 127.0.0.1 my.kube到/etc/hosts,并运行minikube tunnel 使我能够在http://my.kube访问浏览器中的应用程序。

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

虽然我可以看到每种方法的优缺点:

使用127.0.0.1和隧道可以消除对mini kube IP的依赖,如果删除并重新创建群集,这种依赖可能会发生变化(尽管已经进行了一些工作以使其持久)。 使用mini kube IP,不需要隧道也不错。

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

我已使用minikube addons enable ingress在两个环境上启用了入口外接程序。

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

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

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

另外,需要说明的是,我的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

推荐答案

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

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

在Mac上,由于网络问题而存在未解决的问题。文档指出不支持mini kube入口插件,但我认为这是极具误导性的,如果不是错误的话。只是支持方式不同(而且不一样)。

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

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

111