minikube 的入口在 Mac 和 Ubuntu 上的工作方式不同。何时将 etc/hosts 设置为 127.0.0.1 与 "minikube ip"?
ingress with minikube working differently on Mac vs Ubuntu. When to set etc/hosts to 127.0.0.1 vs "minikube ip"?
我有一个简单的入口文件,它可以在多个环境中工作,但是要访问它,它的行为会有所不同,具体取决于我 运行在我的 Mac 或我的 Mac 上安装我的 minikube 集群Ubuntu mac海因斯。
具体来说,对于我的 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 ip 而不需要隧道也很好。
但是,我的问题是为什么事情的表现完全不同?
我已经在 minikube addons enable ingress
.
的两个环境中启用了 ingress 插件
当我使用 kubectl get ingress my-ingress -o yaml
检查入口创建的 loadBalancer 的主机名时,我得到了相同的结果。我希望在使用 minikube IP 的情况下看到一个 IP (Ubuntu)。
....
status:
loadBalancer:
ingress:
- hostname: localhost
同样,所有服务都已启动并且 运行ning 正常,这只是 /etc/hosts
中的内容以及 minikube tunnel
是否 运行ning 的问题.
此外,需要说明的是,我的 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
您描述的行为很可能是因为 ingress
和 ingress-dns
插件当前仅在使用 Docker 驱动程序时在 Linux 系统上受支持,如前所述在 minikube 文档的 Known Issues 部分。
Minikube 在 Mac 和 Linux 上对入口的支持不同。
在 Linux 上完全支持入口,因此不需要使用 minikube tunnel
。
Mac 由于网络问题,存在未解决的问题。文档指出不支持 minikube ingress 插件,但我认为如果这不是错误的,那将是极具误导性的。它只是得到不同的支持(而且不太好)。
在 Mac 和 Linux 上都需要 minikube addons enable ingress
。在 Mac 上启用入口插件表明入口将在 127.0.0.1 上可用,如屏幕截图所示,而 Linux 将使其在 minikube ip
上可用。然后,当我们在 Mac 上启动 minikube tunnel
时,它将像任何其他暴露的服务一样连接到入口。
感谢 Gabriel 为我指明了正确的方向。
我有一个简单的入口文件,它可以在多个环境中工作,但是要访问它,它的行为会有所不同,具体取决于我 运行在我的 Mac 或我的 Mac 上安装我的 minikube 集群Ubuntu mac海因斯。
具体来说,对于我的 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 ip 而不需要隧道也很好。
但是,我的问题是为什么事情的表现完全不同?
我已经在 minikube addons enable ingress
.
当我使用 kubectl get ingress my-ingress -o yaml
检查入口创建的 loadBalancer 的主机名时,我得到了相同的结果。我希望在使用 minikube IP 的情况下看到一个 IP (Ubuntu)。
....
status:
loadBalancer:
ingress:
- hostname: localhost
同样,所有服务都已启动并且 运行ning 正常,这只是 /etc/hosts
中的内容以及 minikube tunnel
是否 运行ning 的问题.
此外,需要说明的是,我的 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
您描述的行为很可能是因为 ingress
和 ingress-dns
插件当前仅在使用 Docker 驱动程序时在 Linux 系统上受支持,如前所述在 minikube 文档的 Known Issues 部分。
Minikube 在 Mac 和 Linux 上对入口的支持不同。
在 Linux 上完全支持入口,因此不需要使用 minikube tunnel
。
Mac 由于网络问题,存在未解决的问题。文档指出不支持 minikube ingress 插件,但我认为如果这不是错误的,那将是极具误导性的。它只是得到不同的支持(而且不太好)。
在 Mac 和 Linux 上都需要 minikube addons enable ingress
。在 Mac 上启用入口插件表明入口将在 127.0.0.1 上可用,如屏幕截图所示,而 Linux 将使其在 minikube ip
上可用。然后,当我们在 Mac 上启动 minikube tunnel
时,它将像任何其他暴露的服务一样连接到入口。
感谢 Gabriel 为我指明了正确的方向。