Kubernetes - Nginx Frontend & Django Backend

I'm following along this doc: https://kubernetes.io/docs/tasks/access-application-cluster/connecting-frontend-backend/ the mainly difference is that my app is a Djago app running on port 8000.

The frontend pod keeps crashing:

2021/03/15 00:15:52 [emerg] 1#1: host not found in upstream "posi:8000" in /etc/nginx/conf.d/posi.conf:2
nginx: [emerg] host not found in upstream "posi:8000" in /etc/nginx/conf.d/posi.conf:2

Could someone point out my mistakes, please.

deploy_backend.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: posi-backend
spec:
  selector:
    matchLabels:
      app: posi
      tier: backend
      track: stable
  replicas: 2
  template:
    metadata:
      labels:
        app: posi
        tier: backend
        track: stable
    spec:
      containers:
      - name: posi-backend
        image: xxxxxxxxxx.yyy.ecr.us-east-1.amazonaws.com/posi/posi:uwsgi
        command: ["uwsgi"]
        args: ["--ini", "config/uwsgi.ini"]
        ports:
        - name: http
          containerPort: 8000
      imagePullSecrets:
        - name: regcred

service_backend.yaml

 apiVersion: v1
 kind: Service
 metadata:
   name: posi-backend
 spec:
   selector:
     app: posi
     tier: backend
   ports:
   - protocol: TCP
     port: 8000
     targetPort: 8000

deploy_frontend.yaml

 apiVersion: apps/v1
 kind: Deployment
 metadata:
   name: posi-frontend
 spec:
   selector:
     matchLabels:
       app: posi
       tier: frontend
       track: stable
   replicas: 1
   template:
     metadata:
       labels:
         app: posi
         tier: frontend
         track: stable
     spec:
       containers:
         - name: posi-frontend
           image: alx/urn_front:1.0
           lifecycle:
             preStop:
               exec:
                 command: ["/usr/sbin/nginx", "-s", "quit"]

service_frontend.yaml

 apiVersion: v1
 kind: Service
 metadata: 
   name: posi-frontend
 spec: 
   selector:
     app: posi
     tier: frontend
   ports:
   - protocol: "TCP"
     port: 80
     targetPort: 80
   type: NodePort

nginx.conf

upstream posi_backend {
    server posi:8000;
}
server {
    listen 80;
    server_name qa-posi;
     location /static/ {
         alias /code/static/;
     }
    location / {
        proxy_pass http://posi_backend;
        include     /etc/nginx/uwsgi_params;
    }
}
  • Cluster information:

  • Kubernetes version: 1.20
  • Cloud being used: bare-metal
  • Installation method: Kubeadm
  • Host OS: Centos 7.9
  • CNI and version: Weave 0.3.0
  • CRI and version: Docker 19.03.11

Solution 1:

You named your Service (and your Pod) posi-backend, but your nginx configuration tries to connect to:

upstream posi_backend {
    server posi:8000;
}

It should rather connect to posi-backend.

upstream posi_backend {
    server posi-backend:8000;
}