在minikube中暴露端口

时间:2016-11-23 14:30:56

标签: kubernetes 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节点也需要配置为暴露这个端口。

4 个答案:

答案 0 :(得分:53)

我不确定你在问什么,因为你似乎已经知道了minikube service <SERVICE_NAME> --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...

此命令将在默认浏览器中打开指定的服务。这里是 minikube服务文档:https://github.com/kubernetes/minikube/blob/master/docs/minikube_service.md

还有一个--url选项用于打印服务的URL,这是在浏览器中打开的内容:

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

答案 1 :(得分:12)

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,并转发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 192.168.99.100:30341
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
...

答案 2 :(得分:2)

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

kubectl port-forward svc/mongo 27017:27017

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

答案 3 :(得分:0)

只是为任何寻求连接的人提供的注释拒绝了答案:如果您的minikube不能在“ 192.168.99.100之类的东西”上运行,则可能与另一个vm-driver如“ none”一起运行。在这种情况下,请删除您的minikube集群,然后使用默认值进行重建。它会工作的。。。。。。我似乎无法使隧道工作。。。