Statische Webseiten mit Garage und Pangolin bereitstellen

Dieses Dokument beschreibt die Bereitstellung statischer Webseiten mit Garage S3 Website Hosting und Pangolin.

Architektur

Die Webseite wird als statischer Inhalt erzeugt und in einem Garage Bucket gespeichert.

Der Zugriff erfolgt über Pangolin und Newt.

static website hosting

Komponenten

Garage

Garage dient als:

  • S3 Object Storage

  • Website Hosting Plattform

Konfiguration:

webApi:
  rootDomain: ".s3.home.tamay.cloud"

Bucket

Für jede Webseite wird ein Bucket erstellt.

Beispiel:

apiVersion: garage.rajsingh.info/v1beta1
kind: GarageBucket
metadata:
  name: docs
spec:
  clusterRef:
    name: garage
  website:
    enabled: true

Dadurch stellt Garage automatisch folgende Adresse bereit:

docs.s3.home.tamay.cloud

Pangolin

Pangolin veröffentlicht die Webseite nach außen.

Newt

Newt verbindet Pangolin mit internen Ressourcen des Kubernetes Clusters.

Dadurch können Kubernetes Services direkt von Pangolin erreicht werden.

Datenfluss

Internet
    |
    v
docs.tamay.cloud
    |
    v
Pangolin
    |
    v
Newt
    |
    v
garage.garage-operator-system:3902
    |
    v
Garage Website API
    |
    v
Bucket: docs
    |
    v
Statische Webseite

Garage Konfiguration

GarageCluster

Website Hosting wird über die Root Domain aktiviert.

apiVersion: garage.rajsingh.info/v1beta2
kind: GarageCluster
spec:
  webApi:
    rootDomain: ".s3.home.tamay.cloud"

Bucket

apiVersion: garage.rajsingh.info/v1beta1
kind: GarageBucket
metadata:
  name: docs
spec:
  clusterRef:
    name: garage
  website:
    enabled: true

Zugriffsschlüssel

apiVersion: garage.rajsingh.info/v1beta1
kind: GarageKey
metadata:
  name: docs
spec:
  clusterRef:
    name: garage
  bucketPermissions:
    - bucketRef:
        name: docs
      read: true
      write: true

Veröffentlichung

Die Inhalte werden durch die CI Pipeline direkt in den Bucket hochgeladen.

Beispiel:

upload:
  image: woodpeckerci/plugin-s3

  settings:
    bucket: docs

    source: public/**/*
    strip_prefix: public/

Dadurch wird beispielsweise:

public/index.html

zu:

s3://docs/index.html

hochgeladen.

Pangolin Konfiguration

Resource

Typ:

HTTPS

Ziel:

garage.garage-operator-system:3902

Der Zugriff erfolgt über Newt.

Dadurch kann Pangolin interne Kubernetes Services direkt erreichen.

Host Header

Garage bestimmt den Bucket anhand des Host Headers.

Deshalb muss der Host Header explizit gesetzt werden.

Verwendeter Host Header:

docs.s3.home.tamay.cloud

Öffentliche URL

Pangolin veröffentlicht die Ressource unter:

docs.tamay.cloud

Dadurch ergibt sich:

docs.tamay.cloud
    ->
Host Header Rewrite
    ->
docs.s3.home.tamay.cloud
    ->
Garage Website Bucket

DNS

Der öffentliche DNS Eintrag zeigt auf den Pangolin Server.

Beispiel:

docs.tamay.cloud. IN A     <gateway-ipv4>
docs.tamay.cloud. IN AAAA  <gateway-ipv6>

Validierung

Interne Prüfung:

curl \
  -H "Host: docs.s3.home.tamay.cloud" \
  http://garage.garage-operator-system:3902

Über Gateway API:

curl -k \
  -H "Host: docs.s3.home.tamay.cloud" \
  https://<gateway-ip>

Öffentliche Prüfung:

curl -I https://docs.tamay.cloud

Vorteile

  • Keine öffentliche Freigabe von Garage erforderlich

  • Kein öffentlich erreichbarer Kubernetes Service notwendig

  • Kein zusätzlicher Reverse Proxy im Cluster notwendig

  • Zentrale Veröffentlichung über Pangolin

  • Direkte Nutzung von Garage Website Hosting