Minikube 将在 localhost 上运行的 MySQL 公开为服务

Posted

技术标签:

【中文标题】Minikube 将在 localhost 上运行的 MySQL 公开为服务【英文标题】:Minikube expose MySQL running on localhost as service 【发布时间】:2017-09-07 07:51:00 【问题描述】:

我的机器上正在运行 minikube 版本 v0.17.1。我想模拟我在 AWS 中的环境,我的 mysql 实例将在我的 Kubernetes 集群之外。

基本上,如何将我机器上运行的本地 MySQL 实例暴露给通过 minikube 运行的 Kubernetes 集群?

【问题讨论】:

也许这个answer 会帮助你? 不是真的,或者至少我不确定。大多数帖子,包括这篇文章,似乎都在谈论如何从本地主机访问在 Kubernetes 中运行的服务,而我想要完全相反:在我的本地主机上公开一个端口并让它在我的 Kubernetes 集群中可用。 【参考方案1】:

Kubernetes 允许你创建一个没有选择器的服务,并且集群不会为这个服务创建相关的端点,这个特性通常用于代理遗留组件或外部组件。

    创建一个没有选择器的服务

    apiVersion: v1
    kind: Service
    metadata:
        name: my-service
    spec:
        ports:
            - protocol: TCP
              port: 1443
              targetPort: <YOUR_MYSQL_PORT>
    

    创建一个相对的 Endpoint 对象

    apiVersion: v1
    kind: Endpoints
    metadata:
        name: my-service
    subsets:
        - addresses:
            - ip: <YOUR_MYSQL_ADDR>
          ports:
            - port: <YOUR_MYSQL_PORT>
    

    获取服务IP

    $ kubectl get svc my-service
    NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    my-service   <SERVICE_IP>   <none>        1443/TCP    18m
    

    从服务&lt;SERVICE_IP&gt;:1443my-service:1443 访问您的MYSQL

【讨论】:

对于 pod 间引用,可以使用服务名称“my-service”代替其他 pod 的配置。只需确保在同一网络部分中找到 IP“”。 成功了,您可以使用 my-service:1443 代替 :1443 但是当 YOUR_MYSQL_ADDR 在 localhost 上运行时,你为它放了什么? @Calicoder 那应该是运行mysql数据库的机器的ip地址。对于 mysql 我不得不调整数据库的绑定地址 即使我们添加了mysql本地主机地址也无法正常工作。我已经尝试了 4 天。【参考方案2】:

从 minikube 1.10 开始,有一个 special hostname host.minikube.internal 可以解析为运行 minikube 虚拟机或容器的主机。然后,您可以在 pod 的环境变量或定义相关设置的 ConfigMap 中配置此主机名。

【讨论】:

不幸的是 OP,但这应该是那些使用 minikube 1.10+ 的人接受的答案【参考方案3】:

选项 1 - 使用没有选择器的无头服务

因为这个服务没有选择器,所以不会创建对应的Endpoints对象。您可以手动将服务映射到您自己的特定端点(请参阅doc)。

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  ports:
  - port: 80
    targetPort: 8080
---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-service
subsets:
- addresses:
  - ip: 10.0.2.2
  ports:
  - port: 8080

选项 2 - 使用 ExternalName 服务

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  type: ExternalName
  externalName: minikube.host

唯一需要注意的是它需要能够解析minikube.host。只需将此行添加到etc/hosts 文件即可。

10.0.2.2        minikube.host

ExternalName 目前不支持端口映射。


另一个注意事项:已知 IP 10.0.2.2 仅适用于 Virtual Box(请参阅 SO)。 对于xhyve,请尝试将其替换为192.168.99.1(参见GitHub issue 和issue)。一个演示GitHub。

【讨论】:

【参考方案4】:

提醒一下,如果在 Windows 上,请打开防火墙。

【讨论】:

以上是关于Minikube 将在 localhost 上运行的 MySQL 公开为服务的主要内容,如果未能解决你的问题,请参考以下文章

访问 minikube 仪表板 - (Ubuntu20.04 服务器)VM 运行在带有 VirtualBox 6.1 的 Windows 10 主机上

Minikube Kubernetes 不允许在 Mac 上进入,尽管作为 VM 运行

docker container和Minikube之间的链接

0-2 如何安装 minikube

需要帮助将Docker客户端指向我的笔记本电脑上运行的docker守护进程

如何在 gcloud 和 minikube 之间切换 kubectl 集群