【问题标题】:Access mysql running on localhost from minikube从 minikube 访问在 localhost 上运行的 mysql
【发布时间】:2019-08-05 10:45:45
【问题描述】:

我正在 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

请帮助我了解如何从minikube 连接到mysql db。

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

对正确方向的任何帮助或指导表示赞赏。

【问题讨论】:

    标签: mysql kubernetes database-connection minikube


    【解决方案1】:

      根据minikube's文档,如果您的minikube's版本高于v1.10,您可以使用host.minikube.internal访问您的localhost。您可以使用minikube ssh 来确认连接。

    【讨论】:

      【解决方案2】:

      这与您的问题无关,但可能会有所帮助。

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

      【讨论】:

        【解决方案3】:

        由于没有提到操作系统和 minikube vm-driver,我认为它是 --vm-driver=virtualbox,因为它可能是最常见的情况。如果您使用不同的东西,则需要根据您的配置调整此解决方案。

        说明:

        127.0.0.1 是一个 localhost(lo0) 接口 IP 地址。 Nodes、Hosts 和 Pods 有自己的 localhost 接口,它们之间没有相互连接。

        您的 mysql-server 正在主机上运行,​​并且无法使用 localhost(或其 IP 范围)从 minikube 集群 pod 内部或 minikube vm 内部访问。

        解决办法:

        1. 您应该在 minikube 虚拟机和主机之间建立一个网络。 Virtualbox 中的默认 NAT 网络对此不利,因此最好创建另一个仅限主机的网络。让我们 create 在 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 虚拟机 --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 (at least the first time.) 您可以使用minikube sshifconfig 命令进行检查。

        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. 现在我们可以在此集群的任何 pod 内使用 mysql-service 名称和端口 3306 作为目标点。

        【讨论】:

          猜你喜欢
          • 2017-09-07
          • 2021-12-01
          • 2017-12-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-02
          • 2021-07-24
          相关资源
          最近更新 更多