在 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
上访问它。例如,假设您的 NodePort
是 30080
,那么您的服务将以 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 年遇到了类似的问题。这是我 运行 的命令:
kubectl create deployment deploymentName --image=dockerHubUsername/imageTag:imageVersion
kubectl expose deployment deploymentName --type=LoadBalancer --port=8080
minikube tunnel
kubectl get services deploymentName
这提供了访问应用程序所需的外部 ip 地址。我使用 127.0.0.1:8080
访问应用程序
在 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
上访问它。例如,假设您的 NodePort
是 30080
,那么您的服务将以 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 年遇到了类似的问题。这是我 运行 的命令:
kubectl create deployment deploymentName --image=dockerHubUsername/imageTag:imageVersion
kubectl expose deployment deploymentName --type=LoadBalancer --port=8080
minikube tunnel
kubectl get services deploymentName
这提供了访问应用程序所需的外部 ip 地址。我使用127.0.0.1:8080
访问应用程序