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 !