Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Acesse o mysql em execução no localhost do minikube


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:


  1. 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 nome vmnet2 e intervalo de IP 192.168.77.1/24 . Você não precisa habilitar o DHCP para essa rede.

  2. Você tem que configurar o mysql para escutar na interface vmnet2 ou ip 192.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 

  1. Para anexar esta rede à VM do minikube, a chave --host-only-cidr deve ser usada. Tipo diferente de vm-driver use diferentes opções de cli para esta finalidade. Verifique o minikube start --help saída. Então, para virtualbox 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 usando minikube ssh e então ifconfig comandos.

  2. Última parte - precisamos criar um Service e Endpoint para ele dentro do minikube 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
  1. Agora podemos usar o mysql-service nome e porta 3306 dentro de qualquer pod deste cluster como ponto de destino.