I have a spring boot application that is running on the Kubernetes cluster (GKE) and I have a DB which is on an instance in the same VPC as Kubernetes cluster. I have configured this as mentioned here. But I am unable to connect to the DB. Gives below error on starting the application
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.3.jar!/:na]
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.3.jar!/:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongodb-driver-core-3.4.3.jar!/:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.net.SocketTimeoutException: connect timed out
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242) ~[na:na]
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224) ~[na:na]
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403) ~[na:na]
at java.base/java.net.Socket.connect(Socket.java:609) ~[na:na]
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.3.jar!/:na]
at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.3.jar!/:na]
... 3 common frames omitted
Also I tried pinging the db from the docker container using service name
bash-5.0# ping mongodb
PING mongodb (10.64.2.221): 56 data bytes
When I tried directly pinging using the instance internal ip address, I am able to ping the address but when I tried using the ip address from the application (spring.data.mongodb.host), it didn't work either.
bash-5.0# ping 10.60.0.13
PING 10.60.0.13 (10.60.0.13): 56 data bytes
64 bytes from 10.60.0.13: seq=0 ttl=62 time=1.317 ms
64 bytes from 10.60.0.13: seq=1 ttl=62 time=0.315 ms
64 bytes from 10.60.0.13: seq=2 ttl=62 time=0.385 ms
64 bytes from 10.60.0.13: seq=3 ttl=62 time=0.278 ms
64 bytes from 10.60.0.13: seq=4 ttl=62 time=0.300 ms
Mongo Service YAML
---
apiVersion: v1
kind: Service
metadata:
name: mongodb
spec:
ports:
- port: 27017
targetPort: 27017
---
kind: Endpoints
apiVersion: v1
metadata:
name: mongodb
subsets:
- addresses:
- ip: 10.164.0.1
ports:
- port: 27017
Deployment YAML
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-service
spec:
replicas: 1
selector:
matchLabels:
app: test-service
template:
metadata:
labels:
app: test-service
spec:
containers:
- name: test-service
image: gcr.io/rrr-test-project/test-service:latest
ports:
- containerPort: 8080
env:
- name: MONGO_HOST
value: mongodb
application.yml in Spring application
spring:
# Database
data:
mongodb:
host: ${MONGO_HOST:10.164.0.1}
port: 27017
database: test