I have 2 dockerized NestJS
apps that need to communicate with one another using HTTP protocol.
One way is to use HttpModule to send http requests to the remote microservice. But with this the app needs to be aware of IP (exact urls) of the remote microservice.
In Nest, a microservice is fundamentally an application that uses a different transport layer than HTTP.
HTTP is an application layer protocol that uses TCP as Layer 4 protocol.Looks like making it too complicated. Think Kubernetes think easy..!
You can directly sue the service name in each other to connect the two micro services. Although service discovery is a good option to implement when you can tons of micro services.
if you have only two micro services deployment with name service-1 & service-2 you can both connect to each other over this name. http://service-1
is and http://service-2
service-1.yaml
apiVersion: v1
kind: Service
metadata:
name: service-1
spec:
type: clusterip
selector:
app: MyApp
ports:
- port: 80
targetPort: 80
If you don't want to go with a third party to implement the service discovery you can also leverage the Nginx.
You can read my article : https://medium.com/@harsh.manvar111/service-discovery-with-nginx-kubernetes-999c692cd851
All services connect to each other across Kubernetes cluster with service name.
This is the FQDN : <service-name>.<namespace-name>.svc.cluster.local
You can also use this with Kubernetes DNS will also resolve IP even if get changed anytime nothing to worry: http://<service-name>.<namespace-name>.svc.cluster.local
For where is easy to understand my Keycloak application here trying to connect to Postgres database. Both running in same namespace.
So keycloak connecting to Postgres database with service name only directly. Here Postgres service.yaml for ref.