minikube ip is not reachable

3/16/2020

I have created one service called fleetman-webapp:

apiVersion: v1
kind: Service
metadata:
 name: fleetman-webapp

spec:
 selector:
  app: webapp

 ports:
  - name: http
    port: 80
    nodePort: 30080

 type: NodePort

also, a pod named webapp:

apiVersion: v1
kind: Pod
metadata:
 name: webapp
 labels:
  app: webapp
spec:
 containers:
 - name: webapp
   image: richardchesterwood/k8s-fleetman-webapp-angular:release0

I have checked the minikube ip:

192.168.99.102

But when I type in the browser 192.168.99.102:30080, the webapp is not reachable:enter image description here

Please note that I use Ubuntu latest version. I have verified furthermore if proxies and firewalls are active:

cat /etc/environment:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

iptables -L:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere 

I have also disabled ufw in Ubuntu, but no success, the url 192.168.99.102:30080 .

Would you help me please ? thanks in advance for your answer.

-- Mohamed Aoutir
kubectl
kubernetes
minikube

1 Answer

3/17/2020

There are a lot of different hypervisors which can work with minikube. Choosing one will be highly dependent on variables like operating system. Some of them are:

  • Virtualbox
  • Hyper-V
  • VMware Fusion
  • KVM2
  • Hyperkit
  • "Docker (--vm-driver=none)" (see the quotes)

There is official documentation talking about it: Kubernetes.io: Minikube: Specifying the vm driver

Choosing Hypervisor will affect how the minikube will behave.

Focusing on:

  • Docker: --vm-driver=none
  • Virtualbox: --vm-driver=virtualbox

Docker

Official documentation sums it up:

Minikube also supports a --vm-driver=none option that runs the Kubernetes components on the host and not in a VM. Using this driver requires Docker and a Linux environment but not a hypervisor.

-- Kubernetes.io: Install minikube: Install a hypervisor

The output of command$ sudo minikube ip will show IP address of a host machine.

Service object type of NodePort will be available with IP_ADDRESS_OF_HOST:NODEPORT_PORT.

Following with command: $ kubectl get nodes -o wide:

NAME STATUS ROLES  AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
K8S  Ready  master 95s v1.17.3 192.168.0.114 <none>  Ubuntu 18.04.4 LTS 5.3.0-28-generic docker://19.3.8

Please take a specific look on:

INTERNAL-IP
192.168.0.114

It's the same IP address as a host it's working on. You can (for example) curl pods without any restrictions. Please consider reading the article in included citing:

Caution: The none VM driver can result in security and data loss issues. Before using --vm-driver=none, consult this documentation for more information.

You can check what was exposed with command: $ sudo netstat -tulpn

Virtualbox

Creating a minikube instance with --vm-driver=virtualbox will create a virtual machine with Virtualbox as host.

Virtual machine created with this kind of --vm-driver will have 2 network interfaces provided below:

  • NAT
  • Host-only adapter

What is important is that your minikube instance will be accessible by Host-only adapter.

Host-only networking. This can be used to create a network containing the host and a set of virtual machines, without the need for the host's physical network interface. Instead, a virtual network interface, similar to a loopback interface, is created on the host, providing connectivity among virtual machines and the host.

-- Virtualbox.org: Virtual networking

For example:

  • minikube host-only adapter will have an address: 192.168.99.103
  • Your host-only adapter will have an address: 192.168.99.1

They must be different!

If you are having issues with connecting to this adapter please check:

  • If minikube's host-only adapter address is responding to ping when minikube start completed successfully.
  • Your host-only adapter is present in your network configuration by issuing either:
    • ip a
    • ifconfig
  • Your host-only adapter address is in range of your minikube instance (subnet)

From my experience reboot/recreation of this adapter worked all the time if something wasn't right.

The output of command$ sudo minikube ip will show IP address of a Host-only adapter.

Following with command: $ kubectl get nodes -o wide:

NAME   STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE              KERNEL-VERSION   CONTAINER-RUNTIME
m01    Ready    master   29m   v1.17.3   192.168.99.103   <none>        Buildroot 2019.02.9   4.19.94          docker://19.3.6

Please take a specific look once more on INTERNAL-IP and ip address associated with it.

Service object type of NodePort will be available with: IP_ADDRESS_OF_HOST_ONLY_ADAPTER:NODEPORT_PORT.

I recreated your Deployment and Service attached to it and it worked in both --vm-driver=none and --vm-driver=virtualbox cases.

Please let me know if you have any questions in this topic.

-- Dawid Kruk
Source: StackOverflow