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
2
3
4
5
6
7
8
9
10
11
[sudo] password for k1: 
Status:
machine: minikube
pid: 338850
route: 10.96.0.0/12 -> 192.168.49.2
minikube: Running
services: []
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors

创建 Kubernetes 部署

1
2
3
kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
# 使用阿里云镜像:
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4

创建一个 kubernetes 服务类型 LoadBalancer

1
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080

检查外部 IP

1
kubectl get svc
1
2
3
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.105.219.39 10.105.219.39 8080:31918/TCP 10s

请注意,如果没有 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