在 minikube 中公开端口

Expose port in minikube

在 minikube 中,如何使用 nodeport 暴露服务?

例如,我使用以下命令启动一个 kubernetes 集群并创建并公开一个端口,如下所示:

$ minikube start
$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
$ kubectl expose deployment hello-minikube --type=NodePort
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/ ....

现在如何从主机访问暴露的服务?我想 minikube 节点也需要配置为公开此端口。

minikube 运行 类似 192.168.99.100。因此,您应该能够在您公开服务的 NodePort 上访问它。例如,假设您的 NodePort30080,那么您的服务将以 192.168.99.100:30080.

的形式访问

要获取 minikube ip,运行 命令 minikube ip

2017 年 9 月 14 日更新:

这是一个使用 minikube 的小例子 v0.16.0

1) 运行 下面的命令在 8080 上创建一个 nginx 运行ning 和一个 NodePort svc 转发到它:

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed

2) 找到svc使用的nodeport:

$ kubectl get svc hello-minikube
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)          AGE
hello-minikube   10.0.0.76    <nodes>       8080:30341/TCP   4m

3) 找到minikube ip:

$ minikube ip
192.168.99.100

4) 用 curl 与它对话:

$ curl 192.168.99.100:30341
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
...

我不太确定你在问什么,因为你似乎已经知道 minikube service <SERVICE_NAME> --url 命令,它会给你一个 url 可以访问该服务的地方。为了打开暴露的服务,可以使用minikube service <SERVICE_NAME>命令:

$ kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
deployment "hello-minikube" created
$ kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
$ kubectl get svc
NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
hello-minikube   10.0.0.102   <nodes>       8080/TCP   7s
kubernetes       10.0.0.1     <none>        443/TCP    13m

$ minikube service hello-minikube
Opening kubernetes service default/hello-minikube in default browser...

此命令将在您的默认浏览器中打开指定的服务。

还有一个 --url 选项用于打印在浏览器中打开的服务 url:

$ minikube service hello-minikube --url
http://192.168.99.100:31167

由于 minikube 通过 nodeIP:nodePort 而不是 localhost:nodePort 公开访问权限,您可以使用 kubectl 的端口转发功能来实现此功能。例如,如果您正在 运行ning mongodb 服务:

kubectl port-forward svc/mongo 27017:27017

这将公开 localhost:27017 上的服务,FWIW。此外,您可能想弄清楚如何 运行 在后台执行此操作。

给任何寻找连接被拒绝答案的人的提示:如果你的 minikube 在 "something like 192.168.99.100" 上没有 运行 你可能 运行 与另一个 vm-driver 像 "none"。在这种情况下,删除您的 minikube 集群并使用默认值重建。它会工作的……哎呀……我似乎无法让隧道工作……

我 运行 在 2022 年遇到了类似的问题。这是我 运行 的命令:

  1. kubectl create deployment deploymentName --image=dockerHubUsername/imageTag:imageVersion
  2. kubectl expose deployment deploymentName --type=LoadBalancer --port=8080
  3. minikube tunnel
  4. kubectl get services deploymentName 这提供了访问应用程序所需的外部 ip 地址。我使用 127.0.0.1:8080
  5. 访问应用程序

Source