The Problem.
I created a database on digital ocean and because I do not want to create a Kubernetes postgress database with persistent volumes and claims. I must connect to this External Service.
Digital ocean gave me this connection string for my SQLALCHEMY_URI
postgresql://user:password@hostname:25061/databasename?sslmode=require
It works with docker-compose and non docker flask run.
For Kubernetes though it complains that it cannot resolve the hostname.
We will rename the hostnameto digitaloceanpostgress. It can be anything. It must match the further down though.
service.yml
So our deployment will look something like this. This is mine, yours could be different.
apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1
kind: Deployment
metadata:
name: backend-deployment
labels:
app: backend-deployment
spec:
replicas: 1
selector:
matchLabels:
app: backend-deployment
template:
metadata:
labels:
app: backend-deployment
spec:
containers:
- name: backend-deployment
image: username/yourflaskserveretc:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
env:
- name: SQLALCHEMY_DATABASE_URI
# Set this as a secret.
value: "postgresql://user:password@digitaloceanpostgress:25061/databasename?sslmode=require"
Setting up the service.
Type in your terminal $ nslookup hostname (something.com) and paste the ip in the service.yml bellow.
kind: Service
apiVersion: v1
metadata:
name: digitaloceanpostgress
spec:
clusterIP: None
ports:
- port: 25061
---
kind: Endpoints
apiVersion: v1
metadata:
name: digitaloceanpostgress
subsets:
- addresses:
# nslookup hostname given by digitalocean database.
- ip: ip-from-nslookup
ports:
- port: 25061
name: digitaloceanpostgress
Finito.
Disclaimer. Although this works for me it might not be the goto solution for a pro. I am still a newbie.
Top comments (0)