Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Connect to local database from inside minikube cluster

I'm trying to access a MySQL database hosted inside a docker container on localhost from inside a minikube pod with little success. I tried the solution described Minikube expose MySQL running on localhost as service but to no effect. I have modelled my solution on the service we use on AWS but it does not appear to work with minikube. My service reads as follows

apiVersion: v1

kind: Service

metadata: 

  name: mysql-db-svc

  namespace: external

spec: 
  type: ExternalName
  ExternalName: 172.17.0.2

...where I try to connect to my database from inside a pod using "mysql-db-svc" on port 3306 but to no avail. If I try and CURL the address "mysql-db-svc" from inside a pod it cannot resolve the host name.

Can anybody please advise a frustrated novice?

like image 980
prime Avatar asked Jun 20 '18 15:06

prime


2 Answers

I'm using ubuntu with Minikube and my database runs outside of minikube inside a docker container and can be accessed from localhost @ 172.17.0.2. My Kubernetes service for my external mysql container reads as follows:

kind: Service
apiVersion: v1
metadata:
  name: mysql-db-svc
  namespace: external
spec: 
  type: ExternalName
  externalName: 10.0.2.2

Then inside my .env for a project my DB_HOST is defined as

mysql-db-svc.external.svc

... the name of the service "mysql-db-svc" followed by its namespace "external" with "svc"

Hope that makes sense.

like image 62
prime Avatar answered Sep 16 '22 23:09

prime


If I'm not mistaken, you should also create an Endpoint for this service as it's external.

In your case, the Endpoints definition should be as follows:

kind: "Endpoints"
apiVersion: "v1"
metadata:
  name: mysql-db-svc
  namespace: external
subsets: 
- addresses:
  - ip: "10.10.1.1"
  ports:
    port: 3306

You can read about the external sources on Kubernetes Defining a service docs.

like image 27
Crou Avatar answered Sep 17 '22 23:09

Crou