kubernetesdigital-oceankubernetes-ingresskubernetes-servicedigital-ocean-spaces

K8s Ingress to Static Assets in DigitalOcean Bucket


I'm trying to use an Ingress and ExternalName Service in Kubernetes to route traffic to an external storage service (DigitalOcean Spaces) - but no matter what I try, I get some form of http error.

Things I've tried:

How do I configure a K8s Ingress/Service to direct ingress requests from example.com/static to a storage bucket (e.g. <zone>.digitaloceanspaces.com/<bucket-name>/<path>/<object>)?


Solution

  • It looks like some of the resources I was able to find were simply outdated. The following solution works as of Kubernetes v1.21.4.

    Important Notes:

    apiVersion: v1
    kind: Service
    metadata:
      name: do-bucket-service
    spec:
      type: ExternalName
      externalName: <zone>.digitaloceanspaces.com
    
    ---
    
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: do-bucket-ingress
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/backend-protocol: HTTPS
        nginx.ingress.kubernetes.io/rewrite-target: /<bucket>/$2
        nginx.ingress.kubernetes.io/upstream-vhost: <zone>.digitaloceanspaces.com
    spec:
      rules:
      - http: 
          paths:
          - path: /path/to/static/assets(/|$)(.*)
            pathType: Prefix
            backend:
              service:
                name: do-bucket-service
                port:
                  number: 443