Kubernetes use External Services inside Pod

10/30/2018

im Running Kubernetes (minikube) on Windows via Virtualbox. I've got a Services running on my Host-Service i dont want to put inside my Kubernetes Cluster, how can i access that Services from Inside my Pods?

Im new to to Kubernetes i hope this Questions isnt to stupid to ask.

I tried to create a Service + Endpoint but it didnt work:

kind: Endpoints
apiVersion: v1
metadata:
  name: vetdb
subsets:
- addresses:
  - ip: 192.168.99.100
  ports:
  - port: 3307
kind: Service
apiVersion: v1
metadata:
  name: vetdb
spec:
  selector:
    app: vetdb
  type: ClusterIP
  ports:
  - port: 3306
    targetPort: 3307

i started a ubuntu image inside the same cluster the pod should be running on later and tested the connection:

$ root@my-shell-7766cd89c6-rtxt2:/# curl vetdb:3307 --output test
Host '192.168.99.102' is not allowed to connect to this MariaDB serverroot@my-shell

This is the same Output i get running (except other Host-IP)

curl 192.168.99.100:3307

on my Host PC ==> Itworks.

But i cant access the Host from inside my Microservices where i really need to access the URL.

$ kubectl get pods
NAME                        READY     STATUS             RESTARTS   AGE
eureka-77f949499-g2l82      1/1       Running            0          2h
my-shell-7766cd89c6-rtxt2   1/1       Running            0          2h
vet-ms-54b89f9c86-29psf     1/1       Running            10         18m
vet-ms-67c774fd9b-2fnjc     0/1       CrashLoopBackOff   7          18m

The Curl Response i posted above was from Pod: my-shell-7766cd89c6-rtxt2 But i need to access vetdb from vet-ms-*

$ kubectl logs -f vet-ms-67c774fd9b-2fnjc
...
Caused by: java.net.UnknownHostException: vetdb
...

Spring URL Settings i tried

spring.profiles.datasource.url: jdbc:mysql://vetdb:3307/vetdb?useSSL=false&allowPublicKeyRetrieval=true
spring.profiles.datasource.url: jdbc:mysql://vetdb:3306/vetdb?useSSL=false&allowPublicKeyRetrieval=true
spring.profiles.datasource.url: jdbc:mysql://vetdb/vetdb?useSSL=false&allowPublicKeyRetrieval=true

Ty guys



Edit:// i allowed every Host to Connect to the DB to remove this error

Host '192.168.99.102' is not allowed to connect to this MariaDB

but i still get the Same Unknown Host Exception inside of my Microservices.

-- pro sp
docker
java
kubernetes

1 Answer

10/30/2018

I think the Ubuntu image test is most informative here.

From the error message I think the problem is in the MySQL config. You must configure server to listen on port of your host IP address (i.e. not localhost or socketfile).

In addition, you must also ensure that IP address from pod subnets are allowed to connect also.

-- Hitobat
Source: StackOverflow