问题描述
我有一个简单的入口文件,可以在多个环境下运行,但要访问它,它的行为会有所不同,具体取决于我是在Mac上还是在Ubuntu计算机上运行Minikube集群。
具体地说,对于我的Mac,我必须添加条目:127.0.0.1 my.kube
到/etc/hosts,并运行minikube tunnel
使我能够在http://my.kube
访问浏览器中的应用程序。
但是,对于我的Ubuntu系统,我必须获取minikube ip
并将生成的IP放在/etc/hosts
Like192.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
是否正在运行。
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
推荐答案
在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
时,它将像任何其他公开的服务一样连接到入口。
感谢加布里埃尔为我指明了正确的方向。