minikube访问应用程序
访问应用程序
Kubernetes 中有两大类服务:
- 节点端口
- 负载均衡器
minikube 两者都支持。 继续阅读!
节点端口访问
NodePort 服务是将外部流量直接传输到您的服务的最基本方式。 NodePort,顾名思义,打开一个特定的端口,任何发送到这个端口的流量都会被转发给服务。
使用 service 命令获取 NodePort
我们还有一个获取 minikube IP 和服务的快捷方式 NodePort
:
1 | minikube service --url <service-name> |
使用 kubectl 获取 NodePort
minikube VM 通过主机专用 IP 地址暴露给主机系统,该 IP 地址可以通过 minikube ip
命令。 任何类型的服务 NodePort
可以在 NodePort 上通过该 IP 地址访问。
要确定服务的 NodePort,您可以使用 kubectl
像这样的命令(注意 nodePort
以小写开头 n
在 JSON 输出中):
1 | kubectl get service <service-name> --output='jsonpath="{.spec.ports[0].nodePort}"' |
增加 NodePort 范围
默认情况下,minikube 只公开端口 30000-32767。 如果这对您不起作用,您可以使用以下方法调整范围:
1 | minikube start --extra-config=apiserver.service-node-port-range=1-65535 |
此标志还接受以逗号分隔的端口和端口范围列表。
负载均衡器访问
LoadBalancer 服务是向 Internet 公开服务的标准方式。 使用这种方法,每个服务都会获得自己的 IP 地址。
使用 minikube tunnel
服务类型 LoadBalancer
可以通过暴露 minikube tunnel
命令。 它必须在单独的终端窗口中运行以保持 LoadBalancer
跑步。 终端中的 Ctrl-C 可用于终止清理网络路由的进程。
例子:
在单独的终端中运行隧道
它会要求输入密码。
1 | minikube tunnel |
minikube tunnel
作为一个进程运行,使用集群的 IP 地址作为网关,在主机上创建到集群的服务 CIDR 的网络路由。 隧道命令将外部 IP 直接暴露给在主机操作系统上运行的任何程序。
隧道输出示例
1 | [sudo] password for k1: |
创建 Kubernetes 部署
1 | kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4 |
创建一个 kubernetes 服务类型 LoadBalancer
1 | kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080 |
检查外部 IP
1 | kubectl get svc |
1 | kubectl get svc |
请注意,如果没有 minikube 隧道,kubernetes 会将外部 IP 显示为“待处理”。
在浏览器中尝试
在浏览器中打开(确保没有设置代理)
1 | http://REPLACE_WITH_EXTERNAL_IP:8080 |
每个服务都将获得自己的外部 ip。
清理孤立路由
如果 minikube tunnel突然关闭,它可能会在您的系统上留下孤立的网络路由。 如果发生这种情况,~/.minikube/tunnels.json 文件将包含该隧道的条目。 要删除孤立路由,请运行:
1 | minikube tunnel --cleanup |
笔记: --cleanup
标志的默认值为 true
.
避免密码提示
添加路由需要用户root权限,因此运行方式有差异 minikube tunnel取决于操作系统。 如果您想避免输入 root 密码,请考虑为“ip”和“route”命令设置 NOPASSWD:
https://superuser.com/questions/1328452/sudoers-nopasswd-for-single-executable-but-allowing-others