Обслуживание статического сайта с помощью Kubernetes и Ambassador

У меня есть пакет статических веб-сайтов, который я хочу обслуживать в своем кластере. Пакет хранится в корзине облачного хранилища Google, что заставляет меня думать, что на самом деле мне может не понадобиться отдельный «сервер» для возврата файлов.

Мне удалось заставить Python-Flask ссылаться на файлы из корзины, но я не могу понять, как заставить Ambassador сделать то же самое. Я мог бы сделать что-то вроде добавления пакета в экземпляр nginx, но я не хочу встраивать пакет JS в какой-либо образ докера, чтобы я мог делать быстрые обновления.

Я не могу понять, как настроить маршрут посла, чтобы сделать следующее:

Если пользователь переходит на

https://my-website.com/

Они получают index.html обслуживание из моего Google Bucket my-bucket/index.html

и когда index.html ссылается на файл внутри (/static/js/main.js), Ambassador обслуживает файл, найденный в my-bucket/static/js/main.js

Я пробовал настроить такую ​​службу:

apiVersion: v1
kind: Service
metadata:
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v0
      kind: Mapping
      name: website_mapping
      prefix: /website/
      service: https://my-bucket-url/index.html
  name: website-service
  labels:
    app: website-service
spec:
  ports:
    - port: 80
      targetPort: 80
      name: http-website
  selector:
    app: website

Но при переходе к my-website.com/website/ я получаю только ошибку 503, когда консоль жалуется, что "не был объявлен символ кодировки обычного текстового документа"

Я чувствую, что поступаю неправильно. Могу ли я обслуживать прямо из корзины, используя Ambassador, или мне действительно нужно что-то вроде nginx?


person mstorkson    schedule 25.01.2019    source источник
comment
Если вы введете https://my-bucket-url/index.html в свой браузер, вы получите то, что хотите? Амбассадор будет обслуживать этот контент (как обратный прокси). Конечно, чтобы это работало, my-website.com должен указывать на IP-адрес службы Ambassador.   -  person Laszlo Valko    schedule 27.01.2019
comment
Я получаю index.html, но проблема в том, что нужно немного больше логики, чтобы правильно интерпретировать пути импорта внутри index.html. Чтобы это работало во флаконе, мне пришлось написать конечную точку, которая перенаправляла бы определенные пути как доступ к файлам.   -  person mstorkson    schedule 28.01.2019
comment
Я определенно не понимаю, что вы хотели сказать ... Посол предоставит вам обратный прокси. Вам нужен веб-сервис, работающий за Ambassador. Если у вас есть веб-служба хранения корзины, которая выглядит в точности как веб-сервер, обслуживающий ваш веб-сайт (он может обслуживать ваши файлы в качестве веб-сервера, то есть вы можете просматривать свой веб-сайт прямо там), тогда Ambassador может выполнять обратное проксирование. к этому веб-сервису. Если нет, то вам также понадобится дополнительный веб-сервер где-то между Ambassador и вашей службой хранения файлов.   -  person Laszlo Valko    schedule 29.01.2019


Ответы (1)


Амбассадор на самом деле не веб-сервер (как указывает Ласло Валко). Чтобы это работало, ему необходимо передать ваш запрос на какой-либо другой веб-сервер - это, безусловно, может быть Flask (на самом деле диагностическая служба Ambassador - это приложение Flask, запускаемое во время загрузки внутри модуля Ambassador), но оно должно быть запущено где-то. :)

person Flynn    schedule 27.03.2019