我有一个静态网站 bundle ,我想在我的集群上提供服务。该 bundle 存储在谷歌云存储桶中,这让我认为我实际上可能不需要单独的“服务器”来返回文件。
我已经能够让 Python-Flask 引用存储桶中的文件,但我似乎不知道如何让大使做同样的事情。我可以做一些事情,比如将 bundle 添加到 nginx 实例,但我不想将 JS bundle 构建到任何 docker 镜像中,这样我就可以进行快速更新。
我不知道如何设置大使路线来执行以下操作:
如果用户访问
他们从我的 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/