通过minikube访问在本地主机上运行的mysql

时间:2019-03-14 13:49:20

标签: mysql kubernetes database-connection minikube

我在minikube中运行一些服务,并尝试连接到在3306端口上的localhost(127.0.0.1)上运行的mysql。

我阅读了this,并试图创建serviceEndpoints。但是,当我将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数据库。

我还尝试用计算机的公共IP替换127.0.0.1(虽然不知道为什么),并且连接超时。

感谢任何对正确方向的帮助或指导。

2 个答案:

答案 0 :(得分:0)

由于未提及操作系统和迷你库vm-driver,因此我认为它是--vm-driver=virtualbox,因为这可能是最常见的情况。如果您使用其他方法,则需要根据您的配置调整此解决方案。

说明:

127.0.0.1是一个localhostlo0)接口IP地址。节点,主机和Pod具有它们自己的localhost接口,并且彼此之间未连接。

您的mysql-server在主机上运行,​​无法通过localhost(或其IP范围)从minikube集群容器内部或minikube vm内部进行访问。

解决方案:

  1. 您应该在minikube VM和主机之间建立网络。 Virtualbox中的默认NAT网络不适合这样做,因此最好创建另一个仅主机的网络。让我们在Virtualbox UI中创建名为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 
  1. 要将此网络连接到minikube VM,应使用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.100at least the first time.) 您可以使用minikube ssh然后使用ifconfig命令对其进行检查。

  2. 最后一部分-我们需要在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
  1. 现在,我们可以在该群集的任何吊舱内使用mysql-service名称和端口3306作为目的地。

答案 1 :(得分:0)

这与您的问题无关,但也许有帮助。

如果真正的问题是要将某些服务连接到数据库,则可以在Minikube中运行数据库(不是存储,容器可能是无状态的)。在这种情况下,您将能够使用标签将数据库服务与其他服务进行匹配。我们将使用PersistentVolume,PersistenceVolumeClaim和Secrets。 video对此确实很有帮助。