Estoy ejecutando localmente una réplica statefulset de MongoDB en Minikube y estoy tratando de conectarme a esta usando Spring Mongo DB.
En las propiedades de configuración tengo:
spring.data.mongodb.uri=mongodb://mongod-0.mongo:27017/test
El problema es que, cuando trato de implementar la aplicación localmente, recibo este error:
com.mongodb.MongoSocketException: mongod-0.mongo: Name or service not known
Parece que no puedo enriquecer la réplica implementada, pero no sé por qué.
El statefulset, el servicio y los pods se ejecutan correctamente.
Aquí está la configuración de ellos:
apiVersion: apps/v1 kind: StatefulSet metadata: name: mongod spec: serviceName: mongodb-service replicas: 1 selector: matchLabels: role: mongo template: metadata: labels: role: mongo environment: test replicaset: MainRepSet spec: terminationGracePeriodSeconds: 10 containers: - name: mongod-container image: mongo command: - "mongod" - "--bind_ip" - "0.0.0.0" - "--replSet" - "MainRepSet" resources: requests: cpu: 0.2 memory: 200Mi ports: - containerPort: 27017 volumeMounts: - name: mongodb-persistent-storage-claim mountPath: /data/db volumeClaimTemplates: - metadata: name: mongodb-persistent-storage-claim annotations: volume.beta.kubernetes.io/storage-class: "standard" spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi apiVersion: v1 kind: Service metadata: name: mongodb-service labels: name: mongo spec: ports: - port: 27017 targetPort: 27017 clusterIP: None selector: role: mongo¿Alguien tiene alguna idea de cómo podría conectar mi aplicación a la réplica?
se debe a que el nombre de su servicio es: mongodb-service
Tiene que usar siempre el nombre del servicio en las cadenas de conexión en todas partes principalmente.
El flujo de tráfico es como:
Service -> deployment or statefulsets -> PODsahora ha expuesto el nombre del servicio y el puerto (27017) y K8s administrará automáticamente el nombre del servicio en el DNS interno, por lo que puede usar el nombre para la cadena de conexión.
Su aplicación solo podrá conectarse en el nombre del servicio si se ejecuta en el mismo clúster K8s.
Ejemplo :
spring.data.mongodb.uri=mongodb://mongo-service:27017/test
Puede seguir este artículo también como referencia. : https://medium.com/geekculture/how-to-deploy-spring-boot-and-mongodb-to-kubernetes-minikube-71c92c273d5e