在运行 Minikube 时,我想连接到一个服务器,该服务器有一个恼人的习惯,即从其 pod 内部使用其内部 IP 地址向服务注册表宣布自己。
但是,由于遗留原因,我必须先连接到此注册表并从中检索该服务器的 IP 地址。在我看来,从我的开发机器访问该服务器的唯一方法是桥接到内部网络,这样我就可以访问 Minikube 的网络。是否有捷径可寻?
在运行 Minikube 时,我想连接到一个服务器,该服务器有一个恼人的习惯,即从其 pod 内部使用其内部 IP 地址向服务注册表宣布自己。
但是,由于遗留原因,我必须先连接到此注册表并从中检索该服务器的 IP 地址。在我看来,从我的开发机器访问该服务器的唯一方法是桥接到内部网络,这样我就可以访问 Minikube 的网络。是否有捷径可寻?
您可以从 localhost 添加到 k8 内部网络的路由
使用 minikube ip 地址添加到内部网络的路由
$ sudo ip route add 172.17.0.0/16 via $(minikube ip) # linux
$ sudo route -n add 172.17.0.0/16 $(minikube ip) # OSX
可以使用kubectl get service
命令找到您的子网掩码
通过部署测试容器来测试路由并从 localhost 连接到它
$ kubectl run monolith --image=kelseyhightower/monolith:1.0.0 --port=80
$ IP=$(kubectl get pod -l run=monolith -o jsonpath='{.items[0].status.podIP }')
$ curl http://$IP
{"message":"Hello"}
您还可以添加路由到 K8 master
sudo route -n add 10.0.0.0/24 $(minikube ip)
这仅对本地开发有用,您应该在生产中使用NodePort
或LoadBalancer
公开 pod。
如果我理解正确:您正试图将 minikube 中的服务器暴露给您的主机网络。这可以通过以下几种方式完成:
第一个是为您的服务器/pod创建一个NodePort 服务。然后,您可以运行minikube service list
以获取服务的 url:
$ minikube service list
|-------------|----------------------|-----------------------------|
| NAMESPACE | NAME | URL |
|-------------|----------------------|-----------------------------|
| default | kubernetes | No node port |
| default | <your-service> | http://192.168.99.100:<port>|
| kube-system | kube-dns | No node port |
| kube-system | kubernetes-dashboard | http://192.168.99.100:30000 |
|-------------|----------------------|-----------------------------|
第二种是使用kubectl proxy并将您想要的端口代理到本地机器。此方法不需要您创建服务,它应该适用于您当前的配置。
kubectl proxy --port=<port-you-want-access-on-server>
这将使代理端口在 localhost:port 可用
如果你只是想获取一个 pod 的 IP 地址,这个命令应该可以工作(来自How to know a Pod's own IP address from a container in the Pod?):
kubectl get pod $POD_NAME --template={{.status.podIP}}
此外,如果您只需要访问 minikube 的内部网络,您可以使用:
minikube ssh
这会让你进入 minikube 的虚拟机