我正在使用 this ingress controller并想为某个存储桶设置一个 s3 代理。如果我在浏览器中调用 url
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 收到错误,因为标题中需要有“Host:s3.eu-central-1.amazonaws.com”。我无法在 s3-proxy 服务定义和入口规则中设置此 header ( configuration-snippet 不起作用,因为它会在已经在 nginx.conf pod 中设置后添加另一个 Host header 。
我的解决方案是为此入口规则获取整个位置 block 并将其包含为 server-snippet ,这是相当蛮力的。
另一种选择是在 ingress 后面有一个 nginx pod+service,负责设置正确的 header 。所以流程是 request -> ingress-controller -> nginx -> s3。
有人知道如何代理s3吗?
最佳答案
如果您需要使用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;
}
此外,如果您要反向代理到提供有限日志记录 (AWS S3) 的端点。 Nginx mirror功能可以帮助调试正在发送的请求。向 Ingress Controller 添加一个额外的注解,并指定一个可以监控请求的系统。nginx.ingress.kubernetes.io/mirror-target: "http://my-debug-target/"
关于amazon-web-services - 使用 Ingress 的 Kubernetes 上的 s3 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52372230/