在 部署一个Spring Boot 应用到 minikube 中 中,我们将一个 Spring Boot 的应用发布到 minikube 中,本文我们将通过 ingress 将该应用暴露出来,以便于 minikube (集群)之外的用户访问。
安装 Ingress
在 minikube 中, Ingress 是以 addons 的形式存在的。 因此,我们先看看当前的 minikube 中有那些 addons。 执行:
1 | minikube addons list |
系统显示:
1 | |-----------------------------|----------|--------------| |
可以看到,当前 ingress 是处于 disabled 状态的。 执行 enable 命令激活它。
1 | minikube addons enable ingress |
系统会立即提示:
1 | * The 'ingress' addon is enabled |
但实际上 ingress 并不能马上使用,因为 ingress 其实是作为一个系统的 POD 被建立起来的,它也需要下载自己的镜像。 我们可以执行 get pods 命令来查看是否已经建立好:
1 | kubectl get pods -n kube-system |
以上命令列出在 kube-system (系统命名空间)中所有的 POD。 结果类似于:
1 | NAME READY STATUS RESTARTS AGE |
如果 nginx-ingress-controller-xxxx 已经处于 Running 状态,则说明已经完成 ingress 的激活。
再次执行 addons list,
1 | minikube addons list |
可以看到,
1 | |-----------------------------|----------|--------------| |
ingress 已经被激活了。
添加 Ingress 规则
前面的操作只是激活了 ingress, 要使用 ingress 暴露服务, 还需要定制 ingress 的规则。 建立一个名为: k8s-basic-ingress.yaml 的文件,内容如下:
1 | apiVersion: networking.k8s.io/v1beta1 |
注意:host 必须使用 DNS 名称,不能使用 IP 地址
在这个规则定义中,我们没有定义 ingress 的端口,系统会使用默认端口: 80
部署这个规则, 执行:
1 | kubectl apply -f .\k8s-basic-ingress.yaml |
系统显示:
1 | ingress.networking.k8s.io/k8s-basic-ingress created |
我们可以查看当前 minikube 中已经部署的 ingress, 执行:
1 | kubectl get ingress |
系统显示:
1 | NAME HOSTS ADDRESS PORTS AGE |
说明名为: k8s-basic-ingress 的 ingress 规则已经部署成功。
因为我们使用了一个自定义的 minikube.study.me 作为域名,该域名在 DNS 系统中并不存在,因此我们需要在手动添加 host 记录。编辑本机的 hosts 文件,在 window 系统中,该文件位于:
1 | C:\Windows\System32\drivers\etc |
目录中。 在文件末尾添加一行:
1 | 192.168.1.54 minikube.study.me |
192.168.1.54 是 minikube 运行的主机的 IP 地址。
然后就可以在浏览器中访问:
1 | http://minikube.study.me |