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

时间:2017-04-11 18:59:18

标签: kubernetes minikube

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

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

5 个答案:

答案 0 :(得分:8)

Kubernetes允许您创建没有选择器的服务,并且集群不会为此服务创建相关端点,此功能通常用于代理旧组件或外部组件。

  1. 创建不带选择器的服务

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

    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. 从服务<SERVICE_IP>:1443my-service:1443

  5. 访问您的MYSQL

答案 1 :(得分:0)

如果要将本地端口映射到Minikube集群,可以按照Kubernetes documentation中所述使用kubectl port-forward

以下示例将127.0.0.1:6379映射到同一端口上minikube ip上的Redis服务。

kubectl port-forward svc/redis-master 6379:6379

答案 2 :(得分:0)

一个想法是使用没有选择器的无头服务。由于此服务没有选择器,因此将不会创建相应的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

另一种解决方案是使用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)。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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