Поскольку ОС и миникуб vm-driver
не упоминались, я предполагаю, что это --vm-driver=virtualbox
, потому что это, вероятно, наиболее распространенный случай.Если вы используете что-то другое, вам нужно настроить это решение в соответствии с вашей конфигурацией.
Объяснение:
127.0.0.1
- это IP-адрес интерфейса localhost
(lo0
).Узлы, хосты и блоки имеют свои собственные локальные интерфейсы и не связаны друг с другом.
Ваш mysql-server
работает на хост-компьютере и не может быть доступен с помощью localhost
(или его диапазона IP) изнутри модуля кластера minikube или изнутри minikube vm.
Решение:
Между виртуальной машиной Minikube и хостом должна быть сеть.Сеть NAT по умолчанию в Virtualbox не подходит для этого, поэтому лучше создать другую сеть только для хоста.Давайте создадим дополнительную сеть только для хоста в пользовательском интерфейсе Virtualbox с именем vmnet2
и диапазоном IP-адресов 192.168.77.1/24
.Вам не нужно включать DHCP для этой сети.
Вы должны настроить mysql для прослушивания на интерфейсе vmnet2 или ip 192.168.77.1
, который по умолчанию используется для хост-компьютера.Проверьте, доступен ли он с хоста:
mysql -h 192.168.77.1 -u root -p
Для подключения этой сети к виртуальной машине minikube следует использовать ключ --host-only-cidr.Различные типы vm-driver
используют разные опции cli для этой цели.Проверьте вывод minikube start --help
.Итак, для virtualbox
это будет выглядеть следующим образом:
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
Я написал другие наиболее распространенные параметры cli только для удобства.
MinikubeVM получит следующий IP-адрес: 192.168.77.100
( хотя бы в первый раз. ) Вы можете проверить его с помощью команд minikube ssh
, а затем ifconfig
.
Последняя часть - нам нужно создать службу и конечную точку для нее внутри кластера minikube
:
kubectl apply -f mysql-service.yaml
Вот содержимое mysql-service.yaml
файл:
---
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
Теперь мы можем использовать
mysql-service
имя и порт
3306
внутри любого модуля этого кластера в качестве пункта назначения.