Static pages from k8s with minio backend and nginx reverse proxy.
Find a file
Waylon S. Walker 07a1d9a31d revert
2025-05-17 09:16:07 -05:00
helm-chart revert 2025-05-17 09:16:07 -05:00
scripts v2 release: Improved NGINX configuration for performance and compatibility 2025-02-19 10:19:48 -06:00
.gitignore v1 release: Initial release 2025-02-19 09:51:47 -06:00
CHANGELOG.md v2 release: Improved NGINX configuration for performance and compatibility 2025-02-19 10:19:48 -06:00
justfile v2 release: Improved NGINX configuration for performance and compatibility 2025-02-19 10:19:48 -06:00
Readme.md v1 release: Initial release 2025-02-19 09:51:47 -06:00
version v2 release: Improved NGINX configuration for performance and compatibility 2025-02-19 10:19:48 -06:00

k8s-pages Helm Chart

This repository contains a Helm chart for deploying an NGINX reverse proxy configured with dynamic site definitions, configurable caching headers for Cloudflare (using stale-while-revalidate), and more. The chart is designed to be deployed either via the Helm CLI or using Argo CD for GitOps-style continuous delivery.

Features

  • Dynamic Site Configuration: Define multiple sites with individual hosts, backend URLs, and host headers.
  • Configurable Caching: Set the Cache-Control header to control browser/CDN caching with max-age and stale-while-revalidate directives.
  • NGINX Reverse Proxy: Leverages a ConfigMap to generate the NGINX configuration, a Deployment to run NGINX, and a Service/Ingress for routing.
  • GitOps Ready: Easily deploy via Argo CD by pointing to this GitHub repository.

Prerequisites

  • Kubernetes Cluster: Ensure you have a running Kubernetes cluster.
  • Helm 3: Install Helm 3.
  • Argo CD (optional): If you prefer a GitOps approach, install Argo CD.

Configuration

The default configuration is defined in helm-chart/values.yaml. Here you can set:

# The namespace where all resources will be created.
namespace: k8s-pages
# Number of replicas for the deployment.
replicaCount: 1
# List of sites to configure.
bucket: "k8s-pages"
sites:
  - name: pages
    host: example.com
    # URL to which the proxy_pass should direct traffic. (Include protocol and path)
    minioURL: "minio.minio.svc.cluster.local:9000"
    # The host header to set when proxying.
    minioHost: "minio.example.com"
    # Error Page
    errorPage: "/404.html"
    maxAge: 31536000
    staleWhileRevalidate: 86400

Deploying with Argo CD

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: k8s-pages
  namespace: argocd  # Namespace where Argo CD is installed
spec:
  project: default
  source:
    repoURL: 'https://github.com/waylonwalker/k8s-pages.git'
    targetRevision: HEAD
    path: helm-chart
    helm:
      valueFiles:
        - values.yaml
      # Optional: Override values with parameters
      # parameters:
      #   - name: replicaCount
      #     value: "2"
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: mypages  # Target namespace for deployment
  syncPolicy:
    automated:
      prune: true
      selfHeal: true