Como o SO e o minikube
vm-driver
não foi mencionado, suponho que seja --vm-driver=virtualbox
porque é provavelmente o caso mais comum. Se você usa algo diferente, precisa ajustar esta solução de acordo com sua configuração. Explicação:
127.0.0.1
é um localhost
(lo0
) endereço IP da interface. Nós, hosts e pods têm suas próprias interfaces de host local e não estão conectados uns aos outros. Seu
mysql-server
está sendo executado na máquina Host e não pode ser acessado usando o localhost
(ou é o intervalo de IP) de dentro de um pod de cluster minikube ou de dentro do minikube vm. Solução:
-
Você deve ter uma rede entre o minikube VM e o host. A rede NAT padrão no Virtualbox não é boa para isso, então é melhor criar outra rede somente de host. Vamos criar rede somente host adicional na interface do usuário do Virtualbox com o nomevmnet2
e intervalo de IP192.168.77.1/24
. Você não precisa habilitar o DHCP para essa rede.
-
Você tem que configurar o mysql para escutar na interface vmnet2 ou ip192.168.77.1
que é usado por padrão para a máquina host. Verifique se está acessível a partir do host:
mysql -h 192.168.77.1 -u root -p
-
Para anexar esta rede à VM do minikube, a chave --host-only-cidr deve ser usada. Tipo diferente devm-driver
use diferentes opções de cli para esta finalidade. Verifique ominikube start --help
saída. Então, paravirtualbox
será parecido com o seguinte:
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
Eu escrevi outras opções de cli mais comuns apenas por conveniência.
O MinikubeVM obterá o seguinte endereço IP:192.168.77.100
(pelo menos na primeira vez. )Você pode verificá-lo usandominikube ssh
e entãoifconfig
comandos.
-
Última parte - precisamos criar um Service e Endpoint para ele dentro dominikube
cacho:
kubectl apply -f mysql-service.yaml
Aqui está um conteúdo do
mysql-service.yaml
Arquivo:---
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
- Agora podemos usar o
mysql-service
nome e porta3306
dentro de qualquer pod deste cluster como ponto de destino.