Dev machine as part of Minikube's network?

2019-04-06 16:48发布

问题:

Is it possible to have my development machine to be part of Minikube's network?

Ideally, it should work both ways:

  • While developing an application in my IDE, I can access k8s resources inside Minikube using the same addressing that pods would use.
  • Pods running in Minikube can access my application running in the IDE, for example via HTTP requests.

This sounds like the first part is feasible on GCE using network routes, so I wonder if it's doable locally using Minikube.

回答1:

There is an issue open upstream (kubernetes/minikube#38) in order to discuss that particular use case.

kube-proxy already adds the IPtables rules needed for IP forwarding inside the minikube VM (this is not specific to minikube), so all you have to do is add a static route to the container network via the IP of minikube's eth1 interface on your local machine:

ip route add 10.0.0.0/24 via 192.168.42.58 (Linux)
route -n add 10.0.0.0/24 192.168.42.58     (macOS)

Where 10.0.0.0/24 is the container network CIDR and 192.168.42.58 is the IP of your minikube VM (obtained with the minikube ip command).

You can then reach Kubernetes services from your local environment using their cluster IP. Example:

❯ kubectl get svc -n kube-system kubernetes-dashboard
NAME                   CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   10.0.0.56    <nodes>       80:30000/TCP   35s

This also allows you to resolve names in the cluster.local domain via the cluster DNS (kube-dns addon):

❯ nslookup kubernetes-dashboard.kube-system.svc.cluster.local 10.0.0.10
Server:     10.0.0.10
Address:    10.0.0.10#53

Name:   kubernetes-dashboard.kube-system.svc.cluster.local
Address: 10.0.0.56

If you also happen to have a local dnsmasq running on you local machine you can easily take advantage of this and forward all DNS requests for the cluster.local domain to kube-dns:

server=/cluster.local/10.0.0.10