首页天道酬勤不踩坑不(踩坑王)

不踩坑不(踩坑王)

admin 11-30 22:39 361次浏览

前言

最近正在配置预生产环境。为了尽可能与未来的生产环境保持一致,与开发环境相比,有必要将访问协议从HTTP切换到HTTPS。但是,现有的MinIO部署仍然通过HTTP(默认)向外部提供服务,这将导致无法在HTTPS页面获取基于HTTP的MinIO的数据。然后,需要对MinIO进行改革,以支持HTTPS协议访问。

有两个想法:

通用解决方案,通过nginx的反向代理在nginx端配置https,内部MinIO仍然使用HTTP;MinIO服务器直接配置为HTTPS;在确定了大概方向的可能性之后,我也在网上搜索了一下,几乎和预想的一样。基本上,nginx反向代理和MinIO配置为HTTPS。

第一种方式,网上有现成的方案,可以作为底稿;

第二种方式,一般反映根据官网的教程,HTTPS接入无法实现。不过,既然官网文件明确支持HTTPS,这个方案肯定是可行的。

因此,我们计划从第二个计划开始,如果不起作用,我们将采用底部计划。

环境概述:

Centos 8.3

码头工人20.1

踩坑过程

选择第二个选项意味着开始踩坑。

首先根据官网的描述(如何用TLS安全访问minio服务器),把TLS的公钥和私钥放在:{HOME}}/。minio/certs。

注意:

私钥需要命名为:private.key。

公钥需要命名为:public.crt(如果公钥以pem格式结束,可以直接改为crt格式)

启动MinIO容器:

docker run-dit-p 390000:39000-p 39001336039001-name minio-v/mnt/data/minio test/data :/data-v/mnt/data/minio test/config :/root/。MINIO-e ' MINIO _ ACCESS _ KEY=username '-e ' MINIO _ SECRET _ KEY=password ' MINIO/MINIO服务器/数据-地址' :39000' -控制台-地址' :39001 '

成功启动:

您可以看到访问协议已更改为HTTPS。

描述:

Address: Minio API调用地址端口,其中地址可以是IP或者主机控制台的地址端口-address 3360 MinIO web管理页面,其中地址同上/mnt/data/minio/config:主机存储Minio配置文件的目录。其中,private.key和publich.crt文件放在这个目录的certs文件夹中/mnt/data/MinIO/data:主机存储数据的目录,MinIO中的所有bucket数据都放在这个目录中。MINIO_ACCESS_KEY:管理员用户名MINIO_SECRET_KEY:管理员密码

第一坑

启动后发现:

第一个坑:当TLS的公钥和私钥已经放在相应的位置时,为什么不显示不安全?

原因是TLS的公钥私钥对是针对abc.com域名的,访问是通过IP端口进行的,因此出现了不安全的问题。将请求更改为域名端口以解决第一个坑:

00-1010在登录页面上,输入用户名和密码后,将出现以下内容:

第二个坑:登录失败,报告的x509:无法验证xxx.xxx.xxx.xxx的证书,因为它不包含任何sn。

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

C++构造析构赋值运算函数怎么应用javascript如何实现加减乘除运算雷士灯具管理系统java计算机毕业设计网上超市系统源码+系统+数据库+lw文档+mybatis+运行部署
为什么要用k8s(kafka权威指南) 正邦集团管理层名单(正邦集团为什么不能长期干)
相关内容