Tutorials  /  Container & Cloud

Kubernetes für Django: Skalierung und Sicherheit mit HTTPS

Ccentron Redaktion · März 2024 ·7 Min. Lesezeit ·Container & Cloud, Tutorial

Django bietet ein leistungsstarkes Web-Framework für Python mit zahlreichen Funktionen. Wir zeigen Ihnen, wie Sie eine Django Polls-Anwendung in einem Kubernetes-Cluster bereitstellen können.

In diesem Tutorial werden wir eine containerisierte Django Polls-Anwendung in einem Kubernetes-Cluster bereitstellen. Django ist ein leistungsstarkes Web-Framework, das Ihnen hilft, Ihre Python-Anwendung schnell zu starten. Es enthält mehrere praktische Funktionen wie einen objektrelationalen Mapper, Benutzerauthentifizierung und eine anpassbare administrative Oberfläche für Ihre Anwendung. Es enthält auch ein Caching-Framework und fördert ein sauberes App-Design durch sein URL-Dispatcher- und Template-System.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • Einen Kubernetes-Cluster 1.15+ mit aktivierter rollenbasierter Zugriffskontrolle (RBAC).
  • Das kubectl-Befehlszeilentool auf Ihrem lokalen Rechner installiert und konfiguriert, um eine Verbindung zu Ihrem Cluster herzustellen.
  • Einen registrierten Domainnamen.
  • Einen ingress-nginx Ingress-Controller und den cert-manager TLS-Zertifikatsmanager in Ihrem Cluster installiert und konfiguriert, um TLS-Zertifikate auszustellen.
  • Ein S3-Objektspeicher-Bucket wie z.B. ein centron Space, um die statischen Dateien Ihres Django-Projekts zu speichern.
  • Eine PostgreSQL-Serverinstanz, Datenbank und Benutzer für Ihre Django-App.
  • Ein Docker Hub-Konto und ein öffentliches Repository.
  • Die Docker-Engine auf Ihrem lokalen Rechner installiert.

Schritt 1 — Klonen und Konfigurieren der Anwendung

In diesem Schritt werden wir den Anwendungscode von GitHub klonen und Einstellungen wie Datenbankanmeldeinformationen und Objektspeicherschlüssel konfigurieren. Beginnen Sie damit, den Anwendungscode von GitHub auf Ihren lokalen Rechner zu klonen und in das entsprechende Verzeichnis zu navigieren.

git clone --single-branch --branch polls-docker https://github.com/do-community/django-polls.git

cd django-polls

Der Anwendungscode enthält eine Dockerdatei, in der die Containerkonfiguration definiert ist. Sie können diese Datei mit einem Editor Ihrer Wahl öffnen und anpassen.

FROM python:3.7.4-alpine3.10

ADD django-polls/requirements.txt /app/requirements.txt

RUN set -ex \

&& apk add --no-cache --virtual .build-deps postgresql-dev build-base \

&& python -m venv /env \

&& /env/bin/pip install --upgrade pip \

&& /env/bin/pip install --no-cache-dir -r /app/requirements.txt \

&& runDeps="$(scanelf --needed --nobanner --recursive /env \

| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \

| sort -u \

| xargs -r apk info --installed \

| sort -u)" \

&& apk add --virtual rundeps $runDeps \

&& apk del .build-deps

ADD django-polls /app

WORKDIR /app

ENV VIRTUAL_ENV /env

ENV PATH /env/bin:$PATH

EXPOSE 8000

CMD ["gunicorn", "--bind", ":8000", "--workers", "3", "mysite.wsgi"]

Schritt 2 — Erstellen des Datenbankschemas und Hochladen von Assets in den Objektspeicher

Nachdem der Container erstellt und konfiguriert wurde, verwenden Sie docker run, um den in der Dockerdatei festgelegten CMD zu überschreiben und das Datenbankschema mithilfe der manage.py makemigrations- und manage.py migrate-Befehle zu erstellen.

docker run --env-file env polls sh -c "python manage.py makemigrations && python manage.py migrate"

Anschließend können Sie einen Superuser für die Django-Anwendung erstellen:

docker run -i -t --env-file env polls sh

python manage.py createsuperuser

Generieren Sie dann die statischen Dateien für die Anwendung und laden Sie sie in den centron Space hoch:

docker run --env-file env polls sh -c "python manage.py collectstatic --noinput"

Schritt 3 — Pushen des Django-App-Images auf Docker Hub

Um Ihre App auf Kubernetes bereitzustellen, muss Ihr App-Image in einem Repository wie Docker Hub hochgeladen werden. Beginnen Sie damit, sich auf Ihrem lokalen Rechner bei Docker Hub anzumelden.

docker login

Dann taggen Sie das Image mit Ihrem Docker Hub-Benutzernamen und dem Repository-Namen und schieben Sie es ins Repo.

docker tag polls:latest your_dockerhub_username/your_dockerhub_repo_name:latest

docker push your_dockerhub_username/your_dockerhub_repo_name:latest

Schritt 4: Konfiguration der ConfigMap

Um Konfigurationsvariablen in die Laufzeitumgebung einzuspeisen, verwenden wir auf Kubernetes ConfigMaps und Secrets. ConfigMaps werden für nicht vertrauliche Informationen wie App-Einstellungen verwendet, während Secrets für sensible Daten wie API-Schlüssel und Datenbankanmeldeinformationen geeignet sind. Die Konfiguration erfolgt durch das Erstellen einer YAML-Datei und das Anwenden mittels `kubectl apply`.

apiVersion: v1

kind: ConfigMap

metadata:

name: polls-config

data:

DJANGO_ALLOWED_HOSTS: "*"

STATIC_ENDPOINT_URL: "https://your_space_name.space_region.centronspaces.com"

STATIC_BUCKET_NAME: "your_space_name"

DJANGO_LOGLEVEL: "info"

DEBUG: "True"

DATABASE_ENGINE: "postgresql_psycopg2"

Schritt 5: Einrichten des Secrets

Geheime Werte müssen base64-codiert sein. Wir erstellen ein Secret-Objekt in unserem Cluster, indem wir die Werte aus einer Umgebungsvariablen-Datei extrahieren und base64-codieren. Dies erfolgt ähnlich wie bei der Konfiguration der ConfigMap, jedoch unter Verwendung des Befehls `kubectl create secret`.

apiVersion: v1

kind: Secret

metadata:

name: polls-secret

type: Opaque

data:

DJANGO_SECRET_KEY: ""

DATABASE_NAME: ""

DATABASE_USERNAME: ""

DATABASE_PASSWORD: ""

DATABASE_HOST: ""

DATABASE_PORT: ""

STATIC_ACCESS_KEY_ID: ""

STATIC_SECRET_KEY: ""

STATIC_BUCKET_NAME: ""

STATIC_ENDPOINT_URL: ""

DJANGO_LOGLEVEL: ""

Schritt 6: Bereitstellen der Django-App mit einer Deployment-Datei

Ein Kubernetes-Deployment wird verwendet, um unsere Django-App bereitzustellen. Hier legen wir die Anzahl der Replikate fest und definieren die Containerkonfigurationen. Die Konfiguration erfolgt in einer YAML-Datei, die dann mittels `kubectl apply` angewendet wird.

apiVersion: apps/v1

kind: Deployment

metadata:

name: polls-app

labels:

app: polls

spec:

replicas: 2

selector:

matchLabels:

app: polls

template:

metadata:

labels:

app: polls

spec:

containers:

- image: your_dockerhub_username/app_repo_name:latest

name: polls

envFrom:

- secretRef:

name: polls-secret

- configMapRef:

name: polls-config

ports:

- containerPort: 8000

name: gunicorn

Schritt 7: Ermöglichen des externen Zugriffs über einen Service

Ein Kubernetes-Service wird erstellt, um einen stabilen Endpunkt für unsere App zu schaffen, der auch bei Änderungen an den Pods erhalten bleibt. Hier legen wir einen NodePort-Service fest, um vorübergehend auf die Django-App zuzugreifen. Die Konfiguration erfolgt ebenfalls in einer YAML-Datei, die dann angewendet wird.

apiVersion: v1

kind: Service

metadata:

name: polls

labels:

app: polls

spec:

type: NodePort

selector:

app: polls

ports:

- port: 8000

targetPort: 8000

Schritt 8: Konfigurieren von HTTPS mit Nginx Ingress und cert-manager

Abschließend richten wir HTTPS-Verschlüsselung für unsere App ein. Dies erfolgt durch die Verwendung von Ingress-Objekten und des cert-manager-Add-Ons. Nachdem die Konfiguration abgeschlossen ist, wird die Bereitstellung der Django-App mit HTTPS-Verschlüsselung in unserem Kubernetes-Cluster abgeschlossen sein.

apiVersion: networking.k8s.io/v1beta1

kind: Ingress

metadata:

name: polls-ingress

annotations:

kubernetes.io/ingress.class: "nginx"

cert-manager.io/cluster-issuer: "letsencrypt-staging"

spec:

tls:

- hosts:

- your_domain.com

secretName: polls-tls

rules:

- host: your_domain.com

http:

paths:

- backend:

serviceName: polls

servicePort: 8000

K8

Passende Infrastruktur bei centron

Vom Container zum Cluster: Managed Kubernetes mit cStack gibt es ab 29,99 € im Monat – Control Plane, AutoScaler und Traffic inklusive. Managed Kubernetes ansehen →

Fazit

Die Bereitstellung einer Django-App in Kubernetes erfordert einige Schritte zur Konfiguration von ConfigMaps, Secrets, Deployments, Services und Ingresses. Mit diesen Schritten kannst du jedoch eine skalierbare und sicher bereitgestellte Anwendung in deiner Kubernetes-Umgebung erstellen.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Container & Cloud
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren