轉載說明:如果您喜歡這篇文章并打算轉載它,請私信作者取得授權。感謝您喜愛本文,請文明轉載,謝謝。
背景
前段時間,minio官方爆出一個安全漏洞:
在minio集群部署中,minio會返回所有的環(huán)境變量,包括MINIO_SECRET_KEY和 MINIO_ROOT_PASSWORD,導致信息泄露,分布式部署的所有用戶都會受到影響,建議用戶盡快升級。
為安全起見,將minio升級到安全版本。
漏洞編號:CVE-2023-28432
漏洞信息鏈接:
https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q
安全版本:>=RELEASE.2023-03-20T20-16-18Z
升級與數(shù)據(jù)遷移方案
在升級時遇到一個問題:當前環(huán)境的版本太老,是2021年的老版本,要升級到安全版本RELEASE.2023-03-20T20-16-18Z,無法通過數(shù)據(jù)掛載的方式直接升級。
MinIO 網(wǎng)關和相關文件系統(tǒng)模式于 2020 年 7 月進入功能凍結狀態(tài)。2022 年 2 月,MinIO 宣布棄用 MinIO 網(wǎng)關,隨著棄用公告,MinIO還宣布該功能將在六個月內(nèi)刪除。
自發(fā)布2022-10-29T06-21-33Z起,MinIO網(wǎng)關和相關文件系統(tǒng)模式代碼已被刪除。 使用standalone 或 filesystem模式的老版本minio在升級到 RELEASE.2022-10-29T06-21-33Z 或更高版本時,會無法啟動。
要升級到 RELEASE.2022-10-29T06-21-33Z 或更高版本,使用standalone 或 filesystem模式的用戶必須先部署一個新的minio實例,然后手動將配置和數(shù)據(jù)內(nèi)容遷移到新實例(注意新實例不能和原來老版本minio在相同的目錄,如果是以磁盤為單位部署,則需要使用新的磁盤??傊?,新版本在老版本數(shù)據(jù)盤上,是無法直接啟動的)。
實驗記錄
1. 部署新舊2個版本minio實例
版本分別為:
minio.RELEASE.2021-12-09T06-19-41Z
minio.RELEASE.2023-03-24T21-41-23Z
如圖:
2.部署nginx,配置個簡單的nginx域名代理訪問
minio2021配置文件:
upstream minio_console2021 {
server 10.0.0.102:9001 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
server_name minio2021.test.com; #假域名,瀏覽器通過綁定windows電腦hosts訪問
access_log /var/log/nginx/minio2021.test.com.log main;
error_log /var/log/nginx/minio2021.test.com_error.log warn;
location / {
proxy_http_version 1.1;
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://minio_console2021;
expires 0;
}
}
[root@test101 conf.d]#
minio2023配置文件:
upstream minio_console2023 {
server 10.0.0.102:9003 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
server_name minio2023.test.com; #假域名,瀏覽器通過綁定windows電腦hosts訪問
access_log /var/log/nginx/minio2023.test.com.log main;
error_log /var/log/nginx/minio2023.test.com_error.log warn;
location / {
proxy_http_version 1.1;
proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://minio_console2023;
expires 0;
}
}
[root@test101 conf.d]#
3. 上傳測試數(shù)據(jù)
在minio2021創(chuàng)建一個bucket并上傳一些測試數(shù)據(jù),minio2023數(shù)據(jù)為空:
4. 部署一個mc,做數(shù)據(jù)遷移
4.1 啟動一個mc容器,并進入容器中
# docker run -it --entrypoint=/bin/sh minio/mc
4.2 分別設置minio2021和minio2023的alias
# mc alias set minio2021 http://10.0.0.102:9000 ? admin ? ? admin@2021
## ? ? ? ? ? ? 別名 ? ? ? ? minio的后端鏈接端口 ?管理員賬號 ?管理員密碼
# mc alias set minio2023 http://10.0.0.102:9002 admin admin@2023?
注意:
如上注釋,上述命令中的端口是用的minio后端端口,此處是docker部署且映射到主機改了端口,通過ip+端口鏈接的。如在K8s中,可通過service連接。
執(zhí)行效果:
4.3 mc遷移數(shù)據(jù)
mc遷移數(shù)據(jù)通常有下面三種場景:
##1. 全量遷移,重名文件不覆蓋,如bucket不存在,會自動創(chuàng)建
mc mirror minio2021 minio2023
##2. 只遷移某個bucket,以test為例,遷移的目標bucket需要提前創(chuàng)建
mc mirror minio2021/test minio2023/test #test要提前在minio2023中創(chuàng)建
##3. 加上--overwrite參數(shù),覆蓋重名文件
mc mirror --overwrite minio2021 minio2023
mc mirror --overwrite minio2021/test minio2023/te
這里使用第一種方式,全量遷移:
遷移完成后,在minio2023上能看到minio的bucket了:
但此時在minio2023界面打開test2021這個bucket,卻發(fā)現(xiàn)文件無法查看,一直處于loading狀態(tài):
此時會發(fā)現(xiàn),nginx錯誤日志可能會沒有報錯,且如果繞開nginx代理,直接IP+端口訪問,就會是正常的。
瀏覽器打開F12就會發(fā)現(xiàn),有關于WebSocket的報錯,訪問bucket發(fā)起的是websocket請求:
?
所以,minio2023的nginx需要加上websocket代理:
#開啟websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
如圖:
reload nginx后,再刷新界面,文件加載正常:
數(shù)據(jù)存與寫的區(qū)別
進入minio2021和minio2023的數(shù)據(jù)目錄,可以看到數(shù)據(jù)文件有很大的區(qū)別。
在minio2021的數(shù)據(jù)目錄下,看到的是一個一個的文件,與web瀏覽器端看到的文件一一對應,這些文件可以直接從服務器下載到本地。
這就意味著如果minio的數(shù)據(jù)目錄掛載到服務器本地,則可以直接通過寫磁盤的方式將文件寫入minio,在minio界面也能正常下載。
但當數(shù)據(jù)遷移到minio2023后,不管是從minio2021遷移過來的數(shù)據(jù),還是新上傳的數(shù)據(jù),每一個文件,在2023版本的存儲目錄下都是一個目錄,目錄下存的是一個.meta元數(shù)據(jù)文件。
這就意味著在默認情況下,像2021老版本那樣直接通過寫磁盤的方式將文件寫入minio,是行不通了。
minio2023與minio2021文件對比如下圖:
文章來源:http://www.zghlxwxcb.cn/news/detail-545281.html
至此,整個minio升級與數(shù)據(jù)遷移完成。文章來源地址http://www.zghlxwxcb.cn/news/detail-545281.html
到了這里,關于記錄一次跨越16個月的minio版本升級與數(shù)據(jù)遷移的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!