首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用入侵对kubernetes的s3代理

利用入侵对kubernetes的s3代理
EN

Stack Overflow用户
提问于 2018-09-17 16:33:40
回答 2查看 5.8K关注 0票数 10

我正在使用这个入口控制器,并希望在某个桶中设置一个s3代理。如果我调用浏览器url

代码语言:javascript
复制
https://my-kube-server.org/img/dog.jpg 

我希望看到/下载图片

代码语言:javascript
复制
https://s3.eu-central-1.amazonaws.com/mybucket123/pictures/dog.jpg

我可以设置重写规则并指向外部服务,如这个例子中所解释的那样

代码语言:javascript
复制
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吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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,还有两种替代方案:

  • ObjectiveFS -商业FUSE插件,支持亚马逊S3和Google后端
  • 里奥夫斯 -使用C语言编写的轻量级实用程序。不支持附加到文件,不支持完全符合POSIX的文件系统接口,它不能重命名文件夹。

或者,您也可以尝试使用Traefik入口控制器

  • traefik.ingress.kubernetes.io/redirect-regex:^http://localhost/(.*) -为该前端重定向到另一个URL。必须用traefik.ingress.kubernetes.io/redirect-replacement.设置
  • traefik.ingress.kubernetes.io/redirect-replacement: http://mydomain/$1 -为该前端重定向到另一个URL。必须用traefik.ingress.kubernetes.io/redirect设置。
票数 3
EN

Stack Overflow用户

发布于 2021-03-11 01:06:19

如果您需要使用服务器段解决方案。类似于下面的内容,将向Nginx配置添加一个自定义location块。如果您有Nginx入口的其他自定义要求,这尤其有用。

代码语言:javascript
复制
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控制器添加一个额外的注释,并指定一个可以监视请求的系统。

代码语言:javascript
复制
nginx.ingress.kubernetes.io/mirror-target: "http://my-debug-target/"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52372230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档