25

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

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

4

4 回答 4

15

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. 从服务访问您的 MYSQL<SERVICE_IP>:1443my-service:1443

于 2017-04-18T16:39:37.167 回答
3

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

于 2020-12-17T00:27:02.613 回答
1

选项 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目前不支持端口映射。


另一个注意事项:已知 IP10.0.2.2仅适用于 Virtual Box(请参阅SO)。对于xhyve,请尝试将其替换为192.168.99.1(请参阅 GitHub问题问题)。一个演示GitHub

于 2019-05-26T11:36:55.003 回答
-1

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

于 2020-03-14T01:19:12.883 回答