[minikube 文档中文翻译] 手册 - 访问应用程序

手册 - 访问应用程序

如何访问在 minikube 中运行的应用程序

Kubernetes 中有两大类服务:

  • NodePort 节点端口

  • LoadBalancer 负载均衡器

minikube 两者都支持。继续阅读!

NodePort 节点端口访问

NodePort 服务是将外部流量直接传输到您的服务的最基本方式。 NodePort,顾名思义,打开一个特定的端口,任何发送到这个端口的流量都会被转发给服务。

使用 service 命令获取 NodePort

我们还有一个获取 minikube IP 和服务的 NodePort 的快捷方式:

1
minikube service --url <service-name>

使用 kubectl 获取 NodePort

minikube VM 通过主机专用 IP 地址暴露给主机系统,可以使用 minikube ip 命令获取。 NodePort 类型的任何服务都可以在 NodePort 上通过该 IP 地址访问。

要确定您的服务的 NodePort,您可以使用这样的 kubectl 命令(注意 nodePort 在 JSON 输出中以小写 n 开头):

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 负载均衡器访问

LoadBalancer 服务是向 Internet 公开服务的标准方式。使用这种方法,每个服务都会获得自己的 IP 地址。

使用 minikube 隧道

LoadBalancer 类型的服务可以通过 minikube tunnel 命令公开。它必须在单独的终端窗口中运行以保持 LoadBalancer 运行。终端中的 Ctrl-C 可用于终止清理网络路由的进程。

例子

在单独的终端中运行 minikube tunnel

它会要求输入密码。

1
minikube tunnel

minikube tunnel 作为一个进程运行,使用集群的 IP 地址作为网关,在主机上创建到集群的服务 CIDR 的网络路由。隧道命令将外部 IP 直接暴露给在主机操作系统上运行的任何程序。

隧道输出示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Password:
Status:
machine: minikube
pid: 39087
route: 10.96.0.0/12 -> 192.168.64.194
minikube: Running
services: [hello-minikube]
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors
...
...
...

创建 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
2
3
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.96.184.178 10.96.184.178 8080:30791/TCP 40s

请注意,如果没有 minikube 隧道,kubernetes 会将外部 IP 显示为“待处理”。

在浏览器中尝试

在浏览器中打开(确保没有设置代理)

http://REPLACE_WITH_EXTERNAL_IP:8080

每个服务都将获得自己的外部 ip。

DNS 解析(实验性)

如果您在 macOS 上,则隧道命令还允许从主机对 Kubernetes 服务进行 DNS 解析。

注意:docker 驱动不支持 DNS 解析

清理孤立路由

如果 minikube tunnel 突然关闭,它可能会在您的系统上留下孤立的网络路由。如果发生这种情况,~/.minikube/tunnels.json 文件将包含该隧道的条目。要删除孤立路由,请运行:

1
minikube tunnel --cleanup

注意: --cleanup 标志的默认值为 true

避免密码提示

添加路由需要用户具有 root 权限,因此如何运行 minikube tunnel 会因操作系统而异。如果您想避免输入 root 密码,请考虑为“ip”和“route”命令设置 NOPASSWD:
linux - Sudoers NOPASSWD for single executable but allowing others - Super User - https://superuser.com/questions/1328452/sudoers-nopasswd-for-single-executable-but-allowing-others

在 Windows 上访问 <1024 端口需要 root 权限

如果您在 Windows 上使用 Docker 驱动程序,则您有可能拥有旧版本的 SSH 客户端,您可能会收到类似的错误 - 特权端口只能由 root 转发。或者如果访问端口小于 1024,即使在 minikube 隧道之后,您也可能无法访问该服务,但对于大于 1024 的端口可以正常工作。

为了解决这个问题,请确保您运行的是最新版本的 SSH 客户端。您可以通过在具有管理员权限的命令提示符中运行以下命令在 Windows 上安装最新版本的 SSH 客户端(需要巧克力包管理器)

1
choco install openssh

默认情况下在 Windows 10 上可用的最新版本(OpenSSH_for_Windows_7.7p1,LibreSSL 2.6.5)不起作用。您可以在此处跟踪此问题 - https://github.com/PowerShell/Win32-OpenSSH/issues/1693 - https://github.com/PowerShell/Win32-OpenSSH/issues/1693


原文链接

Accessing apps | minikube - https://minikube.sigs.k8s.io/docs/handbook/accessing/