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

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

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

【问题讨论】:

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

标签: kubernetes minikube


【解决方案1】:

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

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

    apiVersion: v1
    kind: Service
    metadata:
        name: my-service
    spec:
        ports:
            - protocol: TCP
              port: 1443
              targetPort: <YOUR_MYSQL_PORT>
    
  2. 创建一个相对的 Endpoint 对象

    apiVersion: v1
    kind: Endpoints
    metadata:
        name: my-service
    subsets:
        - addresses:
            - ip: <YOUR_MYSQL_ADDR>
          ports:
            - port: <YOUR_MYSQL_PORT>
    
  3. 获取服务IP

    $ kubectl get svc my-service
    NAME         CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    my-service   <SERVICE_IP>   <none>        1443/TCP    18m
    
  4. 从服务&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 issueissue)。一个演示GitHub

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2012-04-26
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多