[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 | Password: |
创建 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 |
请注意,如果没有 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/