Como el SO y minikube vm-driver
no se mencionó, supongo que es --vm-driver=virtualbox
porque es probablemente el caso más común. Si usa algo diferente, debe ajustar esta solución de acuerdo con su configuración.
Explicación:
127.0.0.1
es un localhost
(lo0
) dirección IP de la interfaz. Los nodos, hosts y pods tienen sus propias interfaces de host local y no están conectados entre sí.
Tu mysql-server
se está ejecutando en la máquina host y no se puede acceder a él mediante localhost
(o su rango de IP) desde dentro de un minikube cluster pod o desde dentro de minikube vm.
Solución:
-
Debe tener una red entre minikube VM y el host. La red NAT predeterminada en Virtualbox no es buena para eso, por lo que es mejor crear otra red solo de host. Vamos a crear red adicional solo de host en la interfaz de usuario de Virtualbox con el nombre
vmnet2
y rango de IP192.168.77.1/24
. No necesita habilitar DHCP para esa red. -
Tienes que configurar mysql para escuchar en la interfaz vmnet2 o ip
192.168.77.1
que se utiliza de forma predeterminada para la máquina host. Compruebe si es accesible desde el host:
mysql -h 192.168.77.1 -u root -p
-
Para adjuntar esta red a minikube VM, se debe usar la clave --host-only-cidr. Diferente tipo de
vm-driver
use diferentes opciones de cli para este propósito. Comprueba elminikube start --help
producción. Entonces, paravirtualbox
se verá así:minikube start --cpus 2 \ --memory 2048 \ --disk-size 20g \ --vm-driver virtualbox \ --network-plugin flannel \ --kubernetes-version v1.12.2 \ --host-only-cidr 192.168.77.1/24
Escribí otras opciones de cli más comunes solo por conveniencia.
MinikubeVM obtendrá la siguiente dirección IP:
192.168.77.100
(al menos la primera vez. )Puedes comprobarlo usandominikube ssh
y luegoifconfig
comandos. -
Última parte:necesitamos crear un servicio y un punto final dentro del
minikube
grupo:
kubectl apply -f mysql-service.yaml
Aquí hay un contenido de mysql-service.yaml
archivo:
---
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 3306
targetPort: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql-service
subsets:
- addresses:
- ip: 192.168.77.1
ports:
- port: 3306
- Ahora podemos usar el
mysql-service
nombre y puerto3306
dentro de cualquier pod de este clúster como punto de destino.