代码之家  ›  专栏  ›  技术社区  ›  Gismo Ranas

使用入口的kubernetes上的s3代理

  •  2
  • Gismo Ranas  · 技术社区  · 6 年前

    我正在使用 this ingress controller

    https://my-kube-server.org/img/dog.jpg 
    

    我希望在

    https://s3.eu-central-1.amazonaws.com/mybucket123/pictures/dog.jpg
    

    this example :

    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那里得到了错误,因为它必须有“H”ost:s3.eu-central-1.amazonaws.com“在标题中。我既不能在s3代理服务定义中也不能在入口规则中设置这个头( configuration-snippet 不起作用,因为它将在已在中设置后添加另一个主机头nginx.conf 豆荚。

    我的解决方案是将此入口规则的整个位置块作为 server-snippet ,这是相当野蛮的力量。

    另一个选择是在入口后面提供nginxpod+服务,负责设置正确的头。因此流将是请求->入口控制器->nginx->第三。

    有人知道如何代理s3吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   VAS    6 年前

    可能的解决方案之一是使用 DaemonSet 使用将S3存储连接到本地目录的 s3fs .

    S3FS-保险丝 S3FS还负责本地缓存文件以提高性能。 这个插件简单地将amazons3存储桶显示为您计算机上的一个驱动器 系统。

    这是一篇很好的文章,给你一步一步的指导如何做到这一点。

    然后可以将此目录用作pod中的卷,例如,作为代理服务器的静态内容目录。

    this this
    升级版本: (由于Kubernetes对FUSE的支持有限,这个解决方案还不能工作- FUSE volumes #7890 ) workaround 需要运行特权容器}

    s3fs有两种替代方案:

    • ObjectiveFS -支持amazons3和Google云存储后端的商业FUSE插件
    • RioFs -用C语言编写的轻量级实用程序。不支持附加到文件,不支持完全兼容POSIX的文件系统接口,并且不能重命名文件夹。

    或者,你可以试试 Traefik ingress controller

    • traefik.ingress.kubernetes.io/redirect-正则表达式:^ http://localhost/ (.*) traefik.ingress.kubernetes.io/redirect-更换 .
    • http://mydomain/ $1 -重定向到该前端的另一个URL。必须设置为 traefik.ingress.kubernetes.io/redirect-正则表达式 .
        2
  •  0
  •   Steve E.    3 年前

    如果你需要使用 server-snippet 解决方案。类似于下面的内容将添加一个自定义 location 阻止Nginx入口配置。如果您对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;
          }
    

    另外,如果要反向代理到提供有限日志记录的端点(awss3)。Nginx公司 mirror 功能可以帮助调试正在发送的请求。向入口控制器添加附加注释,并指定可以监视请求的系统。

    nginx.ingress.kubernetes.io/mirror-target: "http://my-debug-target/"