72

在 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 节点也需要配置为公开这个端口。

4

4 回答 4

127

我不确定您要问什么,因为您似乎已经知道该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
于 2016-11-23T22:02:30.837 回答
27

minikube 在类似的东西上运行192.168.99.100。因此,您应该能够在NodePort您公开服务的地方访问它。例如,假设您的NodePortis 30080,那么您的服务将可以作为 访问192.168.99.100:30080

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

2017 年 9 月 14 日更新:

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

1) 运行以下命令来创建一个在 8080 上运行的 nginx 并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=/
...
于 2016-11-23T20:42:33.343 回答
21

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

kubectl port-forward svc/mongo 27017:27017

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

于 2019-03-11T20:51:05.383 回答
2

对于任何寻找连接被拒绝答案的人来说,请注意:如果您的 minikube 没有在“192.168.99.100 之类的东西”上运行,那么您可能使用另一个 vm-driver(如“none”)运行。在这种情况下,删除您的 minikube 集群并使用默认值进行重建。它会工作....ish...我似乎无法让隧道工作...

于 2019-05-10T07:21:29.210 回答