Gis*_*nas 6 nginx amazon-s3 amazon-web-services kubernetes
我正在使用这个入口控制器,并想为某个存储桶设置一个 s3 代理。如果我在浏览器中调用 url
https://my-kube-server.org/img/dog.jpg
Run Code Online (Sandbox Code Playgroud)
我希望看到/下载图像
https://s3.eu-central-1.amazonaws.com/mybucket123/pictures/dog.jpg
Run Code Online (Sandbox Code Playgroud)
我可以设置重写规则并指向外部服务,如本示例中所述:
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
Run Code Online (Sandbox Code Playgroud)
但是我从 aws 收到错误,因为它需要在标题中包含“Host:s3.eu-central-1.amazonaws.com”。我无法在 s3-proxy 服务定义和入口规则中设置此标头(配置片段不起作用,因为它会在 nginx.conf pod 中设置后添加另一个 Host 标头。
我的解决方案是获取此入口规则的整个位置块并将其包含为server-snippet,这非常暴力。
另一种选择是在入口后面有一个 nginx pod+service,负责设置正确的标头。所以流程是请求 -> 入口控制器 -> nginx -> s3。
有人知道如何代理s3吗?
如果您需要使用服务器片段解决方案。类似于以下内容将向locationNginx 入口配置添加自定义块。如果您对 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;
}
Run Code Online (Sandbox Code Playgroud)
此外,如果您反向代理到提供有限日志记录的终端节点 (AWS S3)。Nginx镜像功能可以帮助调试正在发送的请求。向 Ingress 控制器添加附加注释并指定可以监控请求的系统。
nginx.ingress.kubernetes.io/mirror-target: "http://my-debug-target/"
Run Code Online (Sandbox Code Playgroud)
一种可能的解决方案是使用DaemonSet在每个集群节点上启动 pod ,使用 DaemonSet 将 S3 存储连接到本地目录 ,并使用s3fs。
\n\n\n\n\nS3FS-保险丝:这是一个免费的开源 FUSE 插件和易于使用的实用程序,支持主要的 Linux 发行版和 MacOS。\n S3FS 还负责本地缓存文件以提高性能。\n 该插件只是显示将 Amazon S3 存储桶作为您系统上的\n 驱动器。
\n
这是一篇很好的文章,为您提供了如何执行此操作的分步说明。
\n\n\n\n然后,您可以将此目录用作 Pod 中的卷,例如,用作代理服务器的包含静态内容的目录。
\n\n{ 或者,您可以使用内部 s3fs 工具创建自定义代理服务器映像,并将 S3 存储桶直接安装到 Pod 中。查看这篇文章和这篇文章了解详细信息。
\n UPD:(由于 Kubernetes 中对 FUSE 的支持有限,该解决方案尚无法工作 - FUSE 卷 #7890)\n有一个解决方法,需要运行特权容器}
s3fs 有两种替代方案:
\n\n或者,您可以尝试Traefik 入口控制器:
\n\n| 归档时间: |
|
| 查看次数: |
3348 次 |
| 最近记录: |