网站首页 > 技术教程 正文
前言
最近在配置预生产环境,为了尽量保证其与未来的生产环境保持一致,相较于开发环境,需要将访问协议从HTTP切换为HTTPS,而现有的MinIO部署还是以HTTP方式(默认)对外提供服务,这就会导致在HTTPS页面中无法获取基于HTTP的MinIO的数据。那么,就需要对MinIO进行改造,使其支持HTTPS协议访问。
思路有两个:
- 万能大法,通过nginx反向代理,将https配置在nginx侧,内部的MinIO还是使用HTTP;
- MinIO服务端直接配置成HTTPS;
确定大概方向的可能性后,在网上也搜索了下,和预计的差不多,基本就nginx反向代理和MinIO配置成HTTPS两种方式。
第一种方式的话,网上有现成的方案,可以作为兜底方案;
第二种方式,普遍反映根据官网的教程,无法实现HTTPS访问。但是既然官网文档有明确表示支持HTTPS,那么该方案一定是可行的。
所以,计划从第二个方案入手,如果走不通,再采用兜底方案。
环境概述:
Centos 8.3
Docker 20.1
踩坑过程
选择了第二个方案,就意味着踩坑的开始。
首先,根据官网描述(How to secure access to MinIO server with TLS),将TLS的公私钥放到:{HOME}}/.minio/certs 里。
注意:
私钥需要命名为:private.key
公钥需要命名为:public.crt (如果公钥是以pem格式结尾,可直接改为crt格式)
启动MinIO容器:
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 ":39000" --console-address ":39001"
成功启动:
可以看到访问的协议已经换成了HTTPS。
说明:
- address: Minio API调用的地址+端口,其中地址可以是IP或者host
- console-address: MinIO web管理页面的地址+端口,其中地址同上
- /mnt/data/minio/config: 宿主机存放MinIO配置文件目录,其中private.key和publich.crt文件放在该目录certs文件夹下
- /mnt/data/minio/data:宿主机存放数据的目录,MinIO里所有的桶数据均放在该目录下。
- MINIO_ACCESS_KEY:管理员用户名
- MINIO_SECRET_KEY:管理员密码
第一坑
启动后,发现:
第一个坑:明明已经将TLS的公私钥放到了对应的位置,为什么显示Not secure?
原因是,TLS的公私钥对是针对abc.com这个域名,而访问是用IP+port的方式,所以出现Not secure的问题。把请求改为域名+port,可解决第一个坑:
第二坑
在登录页面,输入用户名密码后,出现:
第二个坑:登录失败,报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 -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 "open.abc.com:39000" --console-address ":39001"
重新登录,以为能解决这个问题,但是没想到,掉入了第三个坑。
第三坑
给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。那为什么访问配置成open.abc.com:39000就不行呢?
其实到这里,就很容易会猜想:MinIO服务启动,是不是需要先判断address配置给定的URL是否网络可联通?于是测试了下,果然不出所料:
为什么open.abc.com ping不通?这就涉及到阿里云ECS的网络环境问题了:
首先,该域名会映射到一个公网IP上;然后,该IP为弹性IP,与本ECS机器做绑定;但是,在该ECS里ping 这个弹性IP默认是ping不通的,也就是是说ping open.abc.com也ping不通。
找到问题出在哪里后,解决就比较简单:给ECS添加一个本地hosts映射:
echo "172.31.0.171 open.abc.com" >> /etc/hosts
说明:
172.31.0.171是ECS本地eth0网卡的内网IP地址
然后启动容器,添加--network=host(docker容器使用宿主机网络):
docker run --network=host -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 "open.abc.com:39000" --console-address ":39001"
启动成功:
登录成功:
这(前)里(面)才(都)是(是)干(废)货(话)
先在当前ECS里判断,需要设置的域名是否可以ping通,ping不通的话,手动添加域名映射到/etc/hosts
echo "{{eth0的内网ip}} {{设置的域名}}" >> /etc/hosts
docker方式启动:
docker run --network=host -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 "open.abc.com:39000" --console-address ":39001"
docker-compose方式启动
docker-compose.yml:
version: '3'
services:
minio:
image: minio/minio
command: server --address "open.abc.com:39000" --console-address ":39001" /ports:
- "39000:39000"
- "39001:39001"
extra_hosts:
- "dns_1:172.17.0.1"
environment:
MINIO_ACCESS_KEY: "username"
MINIO_SECRET_KEY: "password"
volumes:
- /mnt/data/miniotest/data:/data
- /mnt/data/miniotest/config:/root/.minio
network_mode: host
猜你喜欢
- 2024-10-10 使用 nginx 同域名下部署多个 vue 项目,并使用反向代理
- 2024-09-12 申请免费证书、域名解析以及nginx部署配置https为微信小程序服务
- 2024-09-12 Nginx快速入门之Nginx反向代理与负载均衡
- 2024-09-12 宝塔面板如何用uwsgi与nginx快速部署Django项目
- 2024-09-12 使用 nginx 实现在同一个微信公众号授权域名下访问正式版和测试版
- 2024-09-12 使用nginx:1.24.0-bullseye部署Nginx域名、端口、子目录配置方法
- 2024-09-12 Nginx实现301跳转至https的根域名展示
- 2024-09-12 配置nginx代理grafana实现域名访问
- 2024-09-12 关于TP3.2 nginx下配置子域名(nginx 配置php)
- 2024-09-12 通过Nginx完美解决多个项目共用一个端口「80、443等等」
你 发表评论:
欢迎- 06-12硬盘基本知识、顺序及随机读取(硬盘顺序读写和随机读写的区别)
- 06-12深度学习模型大小与模型推理速度的探讨
- 06-12读取速度破400,这个U盘真的有点快
- 06-1270元OEC玩转NAS家庭影音下载共享保姆教程
- 06-12路由器新手入门——OpenWRT基础设置篇
- 06-12github加速利器,彻底解决github打不开
- 06-12Linux SSH实用技巧几则(linux ssh命令详解)
- 06-12一款用于DNS测速和DNS污染检测的开源工具
- 0℃未命名
- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)