Доступ к MySQL, запущенному на локальном хосте, из миникуба - PullRequest
0 голосов
/ 14 марта 2019

Я запускаю некоторые службы в мини-кубе и пытаюсь подключиться к mysql, работающему на localhost (127.0.0.1) на порту 3306.

Я прочитал это и пытаюсь создать service и Endpoints. Однако, когда я указываю 127.0.0.1 как IP, он выдает ошибку, как показано ниже:

The Endpoints "mysql-service" is invalid: subsets[0].addresses[0].ip: Invalid value: "127.0.0.1": may not be in the loopback range (127.0.0.0/8)

мое развертывание выглядит так:

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  ports:
  - protocol: TCP
    port: 1443
    targetPort: mysql

---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-service
subsets:
  - addresses:
    - ip: 127.0.0.1
    ports:
    - name: mysql
      port: 3306

Пожалуйста, помогите мне понять, как я могу подключиться к mysql дБ с minikube.

Я также пытался заменить 127.0.0.1 общедоступным IP-адресом моего компьютера (хотя не знаю почему), и время соединения истекло.

Любая помощь или руководство в правильном направлении приветствуется.

1 Ответ

0 голосов
/ 19 апреля 2019

Поскольку ОС и миникуб vm-driver не упоминались, я предполагаю, что это --vm-driver=virtualbox, потому что это, вероятно, наиболее распространенный случай.Если вы используете что-то другое, вам нужно настроить это решение в соответствии с вашей конфигурацией.

Объяснение:

127.0.0.1 - это IP-адрес интерфейса localhost (lo0).Узлы, хосты и блоки имеют свои собственные локальные интерфейсы и не связаны друг с другом.

Ваш mysql-server работает на хост-компьютере и не может быть доступен с помощью localhost (или его диапазона IP) изнутри модуля кластера minikube или изнутри minikube vm.

Решение:

  1. Между виртуальной машиной Minikube и хостом должна быть сеть.Сеть NAT по умолчанию в Virtualbox не подходит для этого, поэтому лучше создать другую сеть только для хоста.Давайте создадим дополнительную сеть только для хоста в пользовательском интерфейсе Virtualbox с именем vmnet2 и диапазоном IP-адресов 192.168.77.1/24.Вам не нужно включать DHCP для этой сети.

  2. Вы должны настроить 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 внутри любого модуля этого кластера в качестве пункта назначения.
...