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。
虽然我可以看到每个的优点和缺点:
127.0.0.1和 隧道消除了对 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)
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 上启动时,它将像任何其他公开的服务一样连接到入口。
感谢加布里埃尔为我指明了正确的方向。
| 归档时间: |
|
| 查看次数: |
3010 次 |
| 最近记录: |