Ukraine needs your help!


Sharing the service between namespaces in Kubernetes


When we want to access the Kubernetes service from another namespace in the scope of our cluster we could use the external name of that service. Bellow, I want to describe a little use case that I’m using in development.


Let’s imagine that we have two independent applications located in a dedicated namespace. I will call these namespaces first-app, second-app.

Also, each of them requires to use of a database that is located in the namespace with a name shared.

Sharing the service between namespaces in Kubernetes


First of all, let’s create a service in Kubernetes with the type ExternalName which will consume the deployment which we want to share, in a particular case that is database Postgres.

apiVersion: v1
kind: Service
  name: postgress-server
  namespace: shared
    - protocol: TCP
      port: 5432
      targetPort: 5432
  type: ExternalName
  externalName: postgress-server.shared.svc.cluster.local

Let me describe what is going on here:

  • metadata.namespace → contains the name of namespace where we want to create that service;
  • spec.type → defines the type of service we create;
  • spec.externalName → defines the external name which we want to use from other services.
    • [].[metadata.namespace].[svc - share resource].[cluster]

As a result, we have to use instead of localhost:5432 the postgress-server.shared.svc.cluster.local:5432 host.

p.s. Hope it will be a useful note for someone. If you will have some questions, feel free to ask in the comments.


Alex BarchukBlog about programming 🚀 © 2022