Django в kubernetes с входом- nginx не обслуживает файлы c - PullRequest
3 голосов
/ 16 января 2020

Я новичок в Kubernetes, и это мой первый проект, использующий его.

В основном я пытаюсь сделать это. У меня есть приложение Django и приложение реакции. Я хочу обслужить их вместе, используя один вход - nginx, используя собственную входную библиотеку nginx kubernetes (kubernetes / ingress- nginx). Приложение React подается в root, а Django подается в "/ api "root. Я определил FORCE_SCRIPT_NAME в настройках Django.

Также для stati c файлов я создал отдельную заявку на постоянный том и смонтировал ее в файле развертывания Django. Но когда я попадаю на страницу администрирования Django, файлы stati c не обслуживаются. А также файлы мультимедиа подаются по пути api / api / media ..., в котором есть дополнительный api. Как правильно подавать файлы stati c в Кубернетес? Я не хочу использовать онлайн-статус c root, как S3. Вот мой Django развертывание yaml.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: django
  labels:
    deployment: django
spec:
  replicas: 1
  selector:
    matchLabels:
      pod: django
  template:
    metadata:
      labels:
        pod: django
    spec:
      volumes:
        - name: django-configmap-volume
          configMap:
            name: django-configmap
        - name: static-volume
          persistentVolumeClaim:
            claimName: static-volume
        - name: media-volume
          persistentVolumeClaim:
            claimName: media-volume
      containers:
        - name: django
          image: my_image:v1.0
          ports:
            - containerPort: 8182
          envFrom:
            - configMapRef:
                name: django-configmap
          env:
            - name: DB_HOST
              value: postgres-service
            - name: DB_NAME
              value: kubernetes_django
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: user
            - name: DB_PASS
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: password
            - name: DB_PORT
              value: "5432"
          volumeMounts:
            - name: django-configmap-volume
              mountPath: /etc/config
            - name: static-volume
              mountPath: /app/static
            - name: media-volume
              mountPath: /app/media

Django settings.py

...
FORCE_SCRIPT_NAME = '/api/'
STATIC_ROOT = '/app/static'
MEDIA_ROOT = '/app/media'
STATIC_URL = '/api/static/'
MEDIA_URL = '/api/media/'
...

Я определил фрагмент конфигурации во входе для stati c файлов и носителей расположение файлов, но я думаю, что это не работает. ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hoosthere-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/proxy-connect-timeout: '30'
    nginx.ingress.kubernetes.io/proxy-send-timeout: '500'
    nginx.ingress.kubernetes.io/configuration-snippet: |
      location ~* "^/api/static?(.*)" {
        alias /app/static/;
      }
      location ~* "^/api/media?(.*)" {
        alias /app/media/;
      }
spec:
  rules:
  - http:
      paths:
        - path: /?(.*)
          backend:
            serviceName: react-service
            servicePort: 1220
        - path: /api/?(.*)
          backend:
            serviceName: django-service
            servicePort: 8000

Если вы можете привести хороший пример этого, я был бы признателен за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...