Connect to Postgresql from inside kubernetes cluster Connect to Postgresql from inside kubernetes cluster kubernetes kubernetes

Connect to Postgresql from inside kubernetes cluster


The first thing we have to do is create the headless service with custom endpoint. The IP in my solution is only specific for my machine.

Endpoint with service:

apiVersion: v1kind: Servicemetadata:  name: postgres-servicespec:  ports:    - protocol: TCP      port: 5432      targetPort: 5432---apiVersion: v1kind: Endpointsmetadata:  name: postgres-servicesubsets:  - addresses:      - ip: 192.168.2.105    ports:      - port: 5432

As for my particular specs, I haven't defined any ingress or loadbalancer so i'll change the selector type from LoadBalancer to NodePort in the service after its deployed.

Now i deployed the keycloak with the the mentioned .yaml file

apiVersion: v1kind: Servicemetadata:  name: keycloak  labels:    app: keycloakspec:  ports:    - name: http      port: 8080      targetPort: 8080    - name: https      port: 8443      targetPort: 8443  selector:    app: keycloak  type: NodePort---apiVersion: apps/v1kind: Deploymentmetadata:  name: keycloak  namespace: default  labels:    app: keycloakspec:  replicas: 1  selector:    matchLabels:      app: keycloak  template:    metadata:      labels:        app: keycloak    spec:      containers:        - name: keycloak          image: quay.io/keycloak/keycloak:11.0.0          env:            - name: KEYCLOAK_USER              value: "admin" # TODO give username for master realm            - name: KEYCLOAK_PASSWORD              value: "admin" # TODO give password for master realm            - name: PROXY_ADDRESS_FORWARDING              value: "true"            - name: DB_ADDR              value: # <Node-IP>:<LoadBalancer-Port/ NodePort>            - name: DB_DATABASE              value: "keycloak" # Database to use            - name: DB_PASSWORD              value: "admin" # Database password            - name: DB_SCHEMA              value: public            - name: DB_USER              value: "postgres" # Database user            - name: DB_VENDOR              value: POSTGRES          ports:            - name: http              containerPort: 8080            - name: https              containerPort: 8443          readinessProbe:            httpGet:              path: /auth/realms/master              port: 8080

After mentioning all the possible values, it connects successfully to the postgres server that is hosted on another server away from kubernetes master and workers node !