2017-02-16 51 views
0

在運行Minikube時,我想連接到一個服務器,該服務器有惱人的習慣,使用其內部IP地址向服務註冊表宣告自己。將內部Kubernetes IP地址路由到主機系統

但是,由於遺留原因,我必須首先連接到此註冊表,並從中檢索該服務器的IP地址。從我的開發機器訪問此服務器的唯一方法是,我在橋接內部網絡,因此我可以訪問Minikube的網絡。是否有捷徑可尋?

回答

3

如果我理解正確:您正試圖將minikube內的服務器公開到您的主機網絡。這可以通過幾種方法完成:

首先是爲您的服務器/吊艙創建一個NodePort Service。然後,您可以運行minikube service list獲得網址爲您服務:

$ 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> 

這一操作將使得可在本地主機的代理端口:端口

如果你只是想獲得一個吊艙的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的VM

3

您可以從本地主機

使用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 

子網掩碼添加路由到內部網絡的路由添加到K8內部網絡可以使用kubectl get service命令發現

通過部署測試容器並從本地主機連接到它來測試路由

$ 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主

sudo route -n add 10.0.0.0/24 $(minikube ip) 

這是唯一有用的地方發展,你應該使用NodePortLoadBalancer在生產中暴露出的豆莢。

+0

由於kubernetes覆蓋網絡的子網掩碼已經改變,所以我不想再用minikube 0.24工作 - 我估計是'10.0.0.0/8'。 – Peter

+0

它是'10.96.0.0/12'參見[constant.go](https://github.com/kubernetes/minikube/blob/master/pkg/util/constants.go) – Peter