Teil II Minimal Python API : Deploy to K8s

In dem letzten Beitrag https://blog.consol.de/software-engineering/devops/teil-i-eines-minimal-python-testusecases-fuer-container-basierte-setups/ habe ich eine minimale Python‑API mit Flask erstellt und als Container deployed. In diesem Teil gehen wir weiter und erstellen ein K8s‑Manifest mit der GatewayAPI basiert auf Traefik‑Ingress, um unsere API nach außen verfügbar zu machen.

Zuletzt haben wir diesen „Dockerfile“ erstellt:

FROM python:3.10-alpine
EXPOSE 5000
RUN pip install pipenv

ADD Pipfile .
ADD Pipfile.lock .
RUN pipenv install --system --deploy --ignore-pipfile

RUN mkdir -p /app

ADD app.py /app
WORKDIR /app

CMD ["python", "app.py"] 

Um das daraus resultierende Image auf Kubernetes zu deployen, wird es in eine verfügbare Registry gepusht und mit dem folgenden Manifest deployment.yaml als Deployment + HttpRoute bereitgestellt.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: weather-api-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: weather-api
  template:
    metadata:
      labels:
        app: weather-api
    spec:
      containers:
      - name: weather-api-container
        image: <REGISTRY-URL>/weather-api:latest
        ports:
        - containerPort: 5000
        env:
        - name: API_KEY
          value: "a9289XXXXXXXXXXXXXXXXXXXXXXXXX268"
      imagePullSecrets:
      - name: gitlab-auth
---
apiVersion: v1
kind: Service
metadata:
  name: weather-api-service
  labels:
    app: weather-api
spec:
  ports:
  - port: 5000
    targetPort: 5000
  type: LoadBalancer
  selector:
    app: weather-api
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: weather-api-httproute
spec:
  parentRefs:
    - name: traefik-gateway
      namespace: kube-system
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /weather-api
      filters:
        - type: URLRewrite
          urlRewrite:
            path:
              type: ReplacePrefixMatch
              replacePrefixMatch: /
      backendRefs:
        - name: weather-api-service
          port: 5000

Das Secret gitlab‑auth zum Pull aus der Registry wurde zuvor für die GitLab‑Registry im Source‑Projekt angelegt und per nachfolgendem Befehl in Kubernetes bekannt gemacht.

kubectl create secret docker-registry gitlab-auth \
    --docker-server=https://<DNS-Name-of-your-registry> \
    --docker-username=kubernetes \
    --docker-password=<password aus dem token> \
    --docker-email=<your fine email adress>

Jetzt kann per curl http://<DNS-NAME>/weather-api/London/uk zugegriffen werden. Im dritten und letzten Teils dieses Blogs erweitern wir die HttpRoute um eigene Zertifikate für den Https-Zugriff.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen
WordPress Cookie Hinweis von Real Cookie Banner