<p>Am trying to access postgres db deployed in kubernetes(kubeadm) on centos vms from another application running on another centos vm. I have deployed postgres service as 'NodePort' type. My understanding is we can deploy it as LoadBalancer type only on cloud providers like AWS/Azure and not on baremetal vm. So now am trying to configure 'ingress' with NodePort type service. But am still unable to access my db other than using kubectl exec $Pod-Name on kubernetes master.</p>

<p>My ingress.yaml is</p>

<pre><code>apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: postgres-ingress
spec:
  backend:
    serviceName: postgres
    servicePort: 5432
</code></pre>

<p>which does not show up any address as below</p>

<pre><code>NAME                    HOSTS   ADDRESS    PORTS   AGE
postgres-ingress        *                  80      4m19s
</code></pre>

<p>am not even able to access it from pgadmin on my local mac. Am I missing something?</p>

<p>Any help is highly appreciated.</p>

santosh
<p>Ingress won't work, it's only designed for HTTP traffic, and the Postgres protocol is not HTTP. You want solutions that deal with just raw TCP traffic:</p>

<ul>
<li>A NodePort service alone should be enough. It's probably the simplest solution. Find out the port by doing <code>kubectl describe</code> on the service, and then connect your Postgres client to the IP of the node VM (not the pod or service) on that port.</li>
<li>You can use port-forwarding: <code>kubectl port-forward pod/your-postgres-pod 5432:5432</code>, and then connect your Postgres client to <code>localhost:5432</code>. This is my preferred way for accessing the database from your local machine (it's very handy and secure) but I wouldn't use it for production workloads (kubectl must be always running so it's somewhat fragile and you don't get the best performance).</li>
<li>If you do special networking configuration, it is possible to directly access the service or pod IPs from outside the cluster. You have to route traffic for the pod and service CIDR ranges to the k8s nodes, this will probably involve configuring your VM hypervisors, routers and firewalls, and is highly dependent on what networking (CNI) plugin are you using for your Kubernetes cluster.</li>
</ul>
