在 部署一个Spring Boot 应用到 minikube 中 中,我们将一个 Spring Boot 的应用发布到 minikube 中,本文我们将通过 ingress 将该应用暴露出来,以便于 minikube (集群)之外的用户访问。
安装 Ingress
在 minikube 中, Ingress 是以 addons 的形式存在的。 因此,我们先看看当前的 minikube 中有那些 addons。 执行:
系统显示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| |-----------------------------|----------|--------------| | ADDON NAME | PROFILE | STATUS | |-----------------------------|----------|--------------| | dashboard | minikube | enabled ✅ | | default-storageclass | minikube | enabled ✅ | | efk | minikube | disabled | | freshpod | minikube | disabled | | gvisor | minikube | disabled | | helm-tiller | minikube | disabled | | ingress | minikube | disabled | | ingress-dns | minikube | disabled | | istio | minikube | disabled | | istio-provisioner | minikube | disabled | | logviewer | minikube | disabled | | metrics-server | minikube | disabled | | nvidia-driver-installer | minikube | disabled | | nvidia-gpu-device-plugin | minikube | disabled | | registry | minikube | disabled | | registry-creds | minikube | disabled | | storage-provisioner | minikube | enabled ✅ | | storage-provisioner-gluster | minikube | disabled | |-----------------------------|----------|--------------|
|
可以看到,当前 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 2 3 4 5 6 7 8 9 10
| NAME READY STATUS RESTARTS AGE coredns-5c98db65d4-jqpkd 1/1 Running 10 19d coredns-5c98db65d4-sfrrv 1/1 Running 10 19d etcd-minikube 1/1 Running 0 27h kube-apiserver-minikube 1/1 Running 2 27h kube-controller-manager-minikube 1/1 Running 4 19d kube-proxy-zvb6k 1/1 Running 3 19d kube-scheduler-minikube 1/1 Running 5 19d nginx-ingress-controller-657fd58d97-wct76 1/1 Running 0 48m storage-provisioner 1/1 Running 5 19d
|
如果 nginx-ingress-controller-xxxx 已经处于 Running 状态,则说明已经完成 ingress 的激活。
再次执行 addons list,
可以看到,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| |-----------------------------|----------|--------------| | ADDON NAME | PROFILE | STATUS | |-----------------------------|----------|--------------| | dashboard | minikube | enabled ✅ | | default-storageclass | minikube | enabled ✅ | | efk | minikube | disabled | | freshpod | minikube | disabled | | gvisor | minikube | disabled | | helm-tiller | minikube | disabled | | ingress | minikube | enabled ✅ | | ingress-dns | minikube | disabled | | istio | minikube | disabled | | istio-provisioner | minikube | disabled | | logviewer | minikube | disabled | | metrics-server | minikube | disabled | | nvidia-driver-installer | minikube | disabled | | nvidia-gpu-device-plugin | minikube | disabled | | registry | minikube | disabled | | registry-creds | minikube | disabled | | storage-provisioner | minikube | enabled ✅ | | storage-provisioner-gluster | minikube | disabled | |-----------------------------|----------|--------------|
|
ingress 已经被激活了。
添加 Ingress 规则
前面的操作只是激活了 ingress, 要使用 ingress 暴露服务, 还需要定制 ingress 的规则。 建立一个名为: k8s-basic-ingress.yaml 的文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: k8s-basic-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - host: minikube.study.me http: paths: - path: / backend: serviceName: springboot-k8s-basic servicePort: 8080
|
注意: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 2
| NAME HOSTS ADDRESS PORTS AGE k8s-basic-ingress minikube.study.me 192.168.1.54 80 45s
|
说明名为: 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
|