【问题标题】:How do I set the minio domain for pre-signed URLs?如何为预签名 URL 设置 minio 域?
【发布时间】:2019-07-31 19:51:16
【问题描述】:

我在 Kubernetes 中使用 minio,效果很好。但是,我似乎无法更改预签名 URL 的域和协议。 Minio 不断给我http://minio.test.svc:9000/delivery/ 我想要的https://example.com/delivery。我试过在吊舱中设置MINIO_DOMIN,但似乎没有效果;我想我还是在滥用这个变量。

【问题讨论】:

  • 当您说“Minio 不断给我...”时,您到底在做什么?使用一些客户端库,使用 minio 客户端 CLI 卷曲 API 端点?您实际执行的是什么,您看到的完整响应是什么?
  • 我正在为 nodejs 使用 minio SDK;我正在调用 presignedGetObject,它返回一个签名 URL,很像 S3。
  • 基于thisthisthis,看起来presignedGetObject的第四个参数是headers对象,其host属性将用于设置主机对于预签名的 URL,因此您可以将其设为“example.com”...
  • ... 协议看起来是由客户端的配置决定的,因此如果您将客户端配置为指向 https://minio.test.svc:9000 而不是 http://minio.test.svc:9000 可能会使协议成为您想要的.如果你尝试这两种方法,它有效吗?
  • 你能解决这个问题吗?

标签: kubernetes minio


【解决方案1】:

这完全取决于您如何创建 Minio 客户端实例。如下指定主机和端口将使 Minio 将您的域解析为 IP 地址并使用 IP 而不是域。示例 JavaScript 代码:

import { Client as MinioClient } from 'minio';

const client = new MinioClient(
  endPoint: 'yourdomain.com',
  port: 9000,
  accessKey: process.env.MINIO_ACCESS_KEY,
  secretKey: process.env.MINIO_SECRET_KEY,
  useSSL: false
);

如果你像上面一样创建你的 minio 实例,你的域将被解析到它对应的 IP 地址,因此 minio 将使用 http://x.x.x.x:9000 而不是 https://yourdomain.com

还要注意,如果您的客户端配置如上,尝试使用useSSL: true 将引发如下 SSL 错误

write EPROTO 140331355002752:error:1408F10B:SSL routines:ssl3_get_record:wrong 
version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332

要让 minio 将您的域用作 https://yourdomain.com,您需要有一个像 nginx 这样的网络服务器来代理您的请求到您的 minio 服务器。 Minio 记录了如何实现这一目标here。按照here 的文档将 SSL 添加到您的域,然后继续创建您的 minio 客户端,如下所示:

import { Client as MinioClient } from 'minio';

const client = new MinioClient(
  endPoint: 'yourdomain.com',
  port: 443,
  accessKey: process.env.MINIO_ACCESS_KEY,
  secretKey: process.env.MINIO_SECRET_KEY,
  useSSL: true
);

注意portuseSSL 参数的变化。

Minio 现在将在所有情况下使用https://yourdomain.com。签名的网址也将是https

【讨论】:

  • 我认为 OP 和我有同样的问题,那就是在 Kube 集群中只有 http://minio.test.svc:9000/delivery/ 可以访问,但 https://example.com/delivery 不是。我个人尝试使用似乎不起作用的hostNetworkdnsPolicy kube 配置。如果 minio 允许您签署主机 URL,而不是从您连接它的位置,那就太好了
  • @MathisHard 你能找到解决方案吗?
  • @properchels 是的,我做到了。我使用 NGINX 和 kubernetes 来更改进入 minio 集群的 HOST 标头。请注意,这意味着如果您在与您的 minio 实例相同的集群中有另一个服务,它必须管理 minio 的公共和私有 URL 这是我拥有的解决方案的链接stackoverflow.com/questions/64815229/…
【解决方案2】:

我在这个问题上苦苦思索了几天,并设法在我的 Kubernetes 集群中使用 NGINX 解决了这个问题。

NGINX controller Kubernetes: need to change Host header within ingress

您使用入口注释将所有传入流量的主机标头更改为您的 Minio 入口,以便它始终是相同的主机名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多