javascript - 使用 Kubernetes 和Ambassador 为静态网站提供服务

标签 javascript kubernetes google-cloud-storage envoyproxy

我有一个静态网站 bundle ,我想在我的集群上提供服务。该 bundle 存储在谷歌云存储桶中,这让我认为我实际上可能不需要单独的“服务器”来返回文件。

我已经能够让 Python-Flask 引用存储桶中的文件,但我似乎不知道如何让大使做同样的事情。我可以做一些事情,比如将 bundle 添加到 nginx 实例,但我不想将 JS bundle 构建到任何 docker 镜像中,这样我就可以进行快速更新。

我不知道如何设置大使路线来执行以下操作:

如果用户访问

https://my-website.com/

他们从我的 Google 存储桶获取 index.html 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 这样的东西?

最佳答案

Ambassador 实际上不是一个网络服务器(正如 Laszlo Valko 指出的那样)。它需要将您的请求代理到其他某个 Web 服务器才能正常工作 - 这当然可以是 Flask(事实上,Ambassador 诊断服务是在大使 Pod 内启动时启动的 Flask 应用程序),但它需要运行某处。 :)

关于javascript - 使用 Kubernetes 和Ambassador 为静态网站提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54371155/

相关文章:

javascript:从两个略有不同的字符串中获取标准化值

Kubernetes 持久卷覆盖 pod/容器中的现有数据

google-cloud-storage - 如何在 Google Cloud Storage 上正确设置 Expires header ?

google-app-engine - GCS 客户端库 NoSuchMethod systemNanoTime

javascript - 无法使用 javascript 获取 HTML4 中的 HTML5 视频 id?

javascript - Animate.css 摇动不起作用

kubernetes - SeaweedFS k8s 100 硬盘

docker - Kubernetes无法提取图像没有基本身份验证凭据

ios - 使用服务帐户从 iOS 应用上传到 Google Cloud Storage

javascript - 如何检测是否应更新页面?