使用 Ingress 暴露 minikube 中的应用

部署一个Spring Boot 应用到 minikube 中 中,我们将一个 Spring Boot 的应用发布到 minikube 中,本文我们将通过 ingress 将该应用暴露出来,以便于 minikube (集群)之外的用户访问。

安装 Ingress

在 minikube 中, Ingress 是以 addons 的形式存在的。 因此,我们先看看当前的 minikube 中有那些 addons。 执行:

1
minikube 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 | 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
minikube 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
kubectl get 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

本文标题:使用 Ingress 暴露 minikube 中的应用

文章作者:梅老师

发布时间:2020年03月19日 - 07:03

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/microservice/k8s/minikube-use-ingress/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。