minio docker https 配置 踩坑

1.原minio是http+docker 端口映射是 19000:9000 19090:9090

docker run -it -p 19000:9000 -p 19090:9090 -d --name minio -e "MINIO_ACCESS_KEY=username" -e "MINIO_SECRET_KEY=password" -v /usr/local/etc/minio/RELEASE.2021-12-29T06-49-06Z.fips/data:/data -v /usr/local/etc/minio/RELEASE.2021-12-29T06-49-06Z.fips/conf:/root/.minio minio/minio server /data --console-address ":9000" --address ":9090"

2.HTTPS 证书

MinIO | Learn how to secure access to MinIO server with TLS

证书放在本地映射的conf/certs 里面

注意:

  • 私钥需要命名为:private.key
  • 公钥需要命名为:public.crt (如果公钥是以pem格式结尾,可直接改为crt格式)

启动MinIO容器:成功

坑1:

启动后,发现:

第一个坑:明明已经将TLS的公私钥放到了对应的位置,为什么显示Not secure?

原因是,TLS的公私钥对是针对wz.xxx.cn这个域名,而访问是用IP+port的方式,所以出现Not secure的问题。把请求改为域名+port,可解决第一个坑:


坑2:

在登录页面,输入用户名密码后,出现:

第二个坑:登录失败,报x509:cannot validate certificate for xxx.xxx.xxx.xxx because it doesn't contain any IP SANs

谷歌大法后,找不到对应的解决方案,于是去github的MinIO的issue里搜索“x509”,找到一个类似的问题(cannot login to minio console #12646)以及解决方案:

Run minio server --address "minio.ourdomain.com:443" --certs-dir /etc/minio/certs /mnt/disk{1...4}/data and it shall work fine - or add your IP to your certs.

 也就是说在启动MinIO服务的时候,需要在address字段指定其域名+端口号,那么修改docker启动配置如下:

docker run -it -p 19000:9000 -p 19090:9090 -d --name minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123" -v /usr/local/etc/minio/RELEASE.2021-12-29T06-49-06Z.fips/data:/data -v /usr/local/etc/minio/RELEASE.2021-12-29T06-49-06Z.fips/conf:/root/.minio minio/minio server /data --console-address ":9000" --address "wz.xxx.cn:9090"

重新登录,以为能解决这个问题,但是没想到,掉入了第三个坑。

坑3

给address添加域名后,启动docker容器报错:

那么问题就出现在address这个字段的配置上。结合之前没给address配置域名时可以成功启动并返回了MinIO自动分配的访问URL:

将docker启动配置修改下,将address配置成172.17.0.2:39000,即:

docker run -dit -p 39000:39000 -p 39001:39001 --name minio -v /mnt/data/miniotest/data:/data -v /mnt/data/miniotest/config:/root/.minio -e "MINIO_ACCESS_KEY=username" -e "MINIO_SECRET_KEY=password" minio/minio server /data --address "172.17.0.2:39000" --console-address ":39001"

重新启动,发现API的URL变成了https://172.17.0.2:39000

也就是说,对address配置,是可以改变API对应的URL。那为什么访问配置成wz.xxx.cn:39000就不行呢?

其实到这里,就很容易会猜想:MinIO服务启动,是不是需要先判断address配置给定的URL是否网络可联通?于是测试了下,果然不出所料:

为什么wz.xxx.cn ping不通?这就涉及到阿里云ECS的网络环境问题了:

首先,该域名会映射到一个公网IP上;然后,该IP为弹性IP,与本ECS机器做绑定;但是,在该ECS里ping 这个弹性IP默认是ping不通的,也就是是说ping wz.xxx.cn也ping不通。

找到问题出在哪里后,解决就比较简单:给ECS添加一个本地hosts映射:

echo "111.111.111.111 wz.xxx.cn" >> /etc/hosts

说明:

  • 111.111.111.111 是ECS本地eth0网卡的内网IP地址

然后启动容器,添加--network=host(docker容器使用宿主机网络):

启动成功:

但是网页访问不到

lsof发现19000端口没有监听,只监听了9000

重新改如下:-p 19000:19000 -p 19090:19090

docker run --network=host -it -p 19000:19000 -p 19090:19090 -d --name minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin" -v /usr/local/etc/minio/RELEASE.2021-12-29T06-49-06Z.fips/data:/data -v /usr/local/etc/minio/RELEASE.2021-12-29T06-49-06Z.fips/conf:/root/.minio minio/minio server /data --console-address ":19000" --address "wz.xxx.cn:19090"

坑4:

在另外一台机器访问api 通

在应用服务器加host

echo "111.111.111.111 wz.xxx.cn" >> /etc/hosts

说明:

  • 111.111.111.111 是minio服务器eth0网卡的内网IP地址
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值