我正在使用这个入口控制器,并希望在某个桶中设置一个s3代理。如果我调用浏览器url
https://my-kube-server.org/img/dog.jpg 我希望看到/下载图片
https://s3.eu-central-1.amazonaws.com/mybucket123/pictures/dog.jpg我可以设置重写规则并指向外部服务,如这个例子中所解释的那样
kind: Service
apiVersion: v1
metadata:
name: s3-proxy
spec:
type: ExternalName
externalName: s3.eu-central-1.amazonaws.com
headers:
- host: s3.eu-central-1.amazonaws.com但是我从aws中得到了错误,因为它需要在标题中包含"Host:s3.eu-central-1.amazonaws.com“。无论是在S3代理服务定义中还是在入口规则中,我都不能设置这个头(配置-片段不能工作,因为它将在nginx.conf荚中设置后添加另一个主机头)。
我的解决方案是为这个入口规则获取整个位置块,并将其作为一个服务器段,这是相当野蛮的力量。
另一种选择是在入口后面有一个nginx pod+service,负责设置正确的标头。因此,流程将请求->入口-控制器-> nginx -> s3。
有谁知道如何代理s3吗?
发布于 2018-09-18 14:08:33
可能的解决方案之一是使用DaemonSet启动每个集群节点上的吊舱,后者使用s3fs将S3存储连接到本地目录。
S3FS-FUSE:This是一个免费的、开源的FUSE插件,也是一个易于使用的实用工具,它支持主要的Linux发行版& MacOS。S3FS还负责本地缓存文件以提高性能。这个插件简单地显示了亚马逊的S3桶作为驱动器在您的系统上。
这是一篇很好的文章,给你一步一步的指导。
然后,您可以将此目录用作Pods中的卷,例如,作为代理服务器具有静态内容的目录。
{或者您可以使用s3fs工具创建一个自定义代理服务器映像,并将您的S3桶直接挂载到Pod中。有关详细信息,请参阅这和这文章。
UPD: (由于库伯内特斯-熔断器卷#7890中对FUSE的支持有限),需要运行特权容器}的解决办法。
除了s3fs,还有两种替代方案:
或者,您也可以尝试使用Traefik入口控制器
发布于 2021-03-11 01:06:19
如果您需要使用服务器段解决方案。类似于下面的内容,将向Nginx配置添加一个自定义location块。如果您有Nginx入口的其他自定义要求,这尤其有用。
metadata:
annotations:
<other annotations>
nginx.ingress.kubernetes.io/server-snippet: |
location "/img/" {
proxy_pass http://s3.eu-central-1.amazonaws.com/mybucket123/pictures/;
proxy_set_header Host s3.eu-central-1.amazonaws.com;
}另外,如果要反向代理提供有限日志记录(AWS S3)的端点。Nginx 镜像特性可以帮助调试正在发送的请求。向Ingress控制器添加一个额外的注释,并指定一个可以监视请求的系统。
nginx.ingress.kubernetes.io/mirror-target: "http://my-debug-target/"https://stackoverflow.com/questions/52372230
复制相似问题