K8s環境下基于Nginx WebDAV與TLS/SSL的文件上傳下載部署指南

#作者:閆乾苓

文章目錄

  • 1.問題及背景
  • 2.方案說明
  • 3.部署步驟
    • 3.1 制作TLS/SSL私有證書
    • 3.2 創建訪問nginx賬戶密碼文件并創建secret
    • 3.3 為TLS/SSL私有證書創建secret
    • 3.4 為Nginx 配置文件創建confimap
    • 3.5 使用deployment,svc部署nginx
    • 3.6 客戶端curl上傳下載文件

1.問題及背景

  1. 中間件巡檢腳本生成報告需統一匯總至一臺服務器,便于集中分析與管理。
  2. 巡檢腳本需要集中存放,支持客戶端下載更新,提高維護效率和一致性。

2.方案說明

  1. 在集中匯總服務器部署 Nginx,啟用 WebDAV 模塊以支持客戶端使用 curl 上傳巡檢日志。
  2. Nginx 默認支持 HTTP 文件下載,用于客戶端獲取巡檢腳本。
  3. 上傳與下載過程通過 HTTP Basic 認證進行賬戶密碼驗證,確保安全性。
  4. 為加強數據傳輸安全,使用https。

3.部署步驟

3.1 制作TLS/SSL私有證書

使用自有CA簽發的私有證書(Private CA + Signed Certificate),需要創建一個根CA(Root CA),然后用這個CA去簽發服務器證書。

這樣做的好處是:你可以將CA證書安裝到多個客戶端的信任庫中,這樣所有由該CA簽發的證書都會被信任。更適合內部網絡、企業內網服務、局域網部署等。

3.1.1生成自有CA私鑰
需要使用openssl命令,如果系統中沒有,可以使用如下命令進行安裝:

~# yum install openssl~# openssl genpkey -algorithm RSA -out ca.key -aes256
記錄輸入的密碼(生成環境部署時,密碼請自行替換):abc@888.com

命令執行完成后生成如下文件:

-rw------- 1 root root 1.9K  6月  6 11:12 ca.key

3.1.2 生成CA證書(自簽)
交互式命令需要提供的內容請參考以下內容:

~# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
Enter pass phrase for ca.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:InternalCA
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:MyInternalRootCA
Email Address []:mail@cmc.com
執行完成后,會生成一個根CA證書文件:
-rw-r--r-- 1 root root 1.5K  6月  6 11:14 ca.crt(可選)查看證書內容
~# openssl x509 -in ca.crt -text -noout
這會顯示證書詳細信息,包括頒發者、有效期、公鑰、指紋等。
3.1.3生成服務器私鑰和CSR
~# openssl genpkey -algorithm RSA -out server.key
生成的私鑰
-rw------- 1 root root 1.7K  6月  6 11:15 server.key~# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany IT Department
Organizational Unit Name (eg, section) []:SA    
Common Name (e.g. server FQDN or YOUR name) []:report.server.com
Email Address []:mail@server.comPlease enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

注意:Common Name (e.g. server FQDN or YOUR name) []: 輸入的內容需要和nginx要使用的域名保持一致。

以下兩行直接回車,可以不輸入。

A challenge password []:
An optional company name []:

命令執行完成后生成如下文件:

-rw-r--r-- 1 root root 1.1K  6月  6 11:21 server.csr

3.1.4使用自有CA簽發服務器證書

-days 3650 指定證書有效期為10年
~# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
Signature ok
subject=C = CN, ST = Beijing, L = Beijing, O = MyCompany IT Department, OU = SA, CN = report.server.com, emailAddress = mail@server.com
Getting CA Private Key
Enter pass phrase for ca.key:  #輸入第一步創建CA私鑰時的密碼

命令執行完成后生成的文件如下:

-rw------- 1 root root 1.7K  6月  6 11:15 server.key
-rw-r--r-- 1 root root 1.4K  6月  6 11:27 server.crt

3.2 創建訪問nginx賬戶密碼文件并創建secret

安裝htpasswd命令的軟件包:

~# yum install -y httpd-tools

使用htpasswd命令創建賬戶并設置密碼,-c 指定文件名,user為用戶名,請自行替換。

~# htpasswd -c htpasswd user
New password: 
Re-type new password: 
Adding password for user user

在k8s環境為此文件創建secret

~# kubectl create secret generic nginx-webdav-basic-auth --from-file=htpasswd~# kubectl get secret
NAME                      TYPE     DATA   AGE
nginx-webdav-basic-auth   Opaque   1      11s

3.3 為TLS/SSL私有證書創建secret

kubectl create secret generic nginx-webdav-tls-certs \--from-file=ca.crt \--from-file=server.crt \--from-file=server.key

它會將本地的三個文件:

  • ca.crt(CA證書)
  • server.crt(服務器證書)
  • server.key(服務器私鑰)
    打包成一個 Kubernetes Secret 對象,名為:nginx-webdav-tls-certs
    Pod掛載時Secret 中的每個 key(即文件名)都會被掛載到 /etc/nginx/certs/ 目錄下作為一個獨立文件。

3.4 為Nginx 配置文件創建confimap

Nginx.conf示例配置文件如下,生產環境請更加實際情況進行調整:

worker_processes 1;events {worker_connections 1024;
}http {include       mime.types;default_type  application/octet-stream;server {listen 443 ssl;server_name report.server.com;ssl_certificate     /etc/nginx/certs/server.crt;ssl_certificate_key /etc/nginx/certs/server.key;ssl_client_certificate /etc/nginx/certs/ca.crt;ssl_verify_client optional;# 文件下載配置location /down/ {alias /data/down/;  # 注意結尾的斜杠autoindex on;                           # 自動列出目錄內容(可選)auth_basic "Restricted";auth_basic_user_file /etc/nginx/htpasswd;}# WebDAV相關配置(上傳)    location /upload {# 啟用WebDAVdav_methods PUT DELETE MKCOL COPY MOVE;# 允許創建新文件和目錄create_full_put_path on;# 設置誰可以訪問這個位置dav_access user:rw group:rw all:r;# 設置上傳文件的存儲目錄alias /data/nginx_upload_data;# 允許瀏覽器訪問現有文件(GET 請求)autoindex off;  # 關閉目錄列表(更安全)add_header Content-Disposition "inline";  # 瀏覽器內直接顯示文件(非強制下載)# 限制僅允許 GET 和 WebDAV 方法if ($request_method !~ ^(GET|HEAD|PUT|DELETE|MKCOL|COPY|MOVE)$) {return 405;}# 可選:限制上傳文件的最大尺寸client_max_body_size 50M;# 確保只有授權用戶才能進行上傳auth_basic "Restricted";auth_basic_user_file /etc/nginx/htpasswd;}}
}

創建configmap

~# kubectl create configmap nginx-webdav-conf --from-file=nginx.conf~# kubectl get cm
NAME                DATA   AGE
nginx-webdav-conf   1      2d18h

3.5 使用deployment,svc部署nginx

deployment示例中只設置了1個pod副本,并通過nodeName指定了pod固定調度的k8s node節點,文件持久存儲使用HostPath,如需設置多個副本,為保證文件下載文件統一管理,建議使用nfs等共享存儲方案

deployment.yaml 示例內容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: report-nginx-webdavlabels:app: report-nginx
spec:replicas: 1selector:matchLabels:app: report-nginxtemplate:metadata:labels:app: report-nginxspec:nodeName: worker3 containers:- name: nginximage: nginx:1.27.5ports:- containerPort: 443volumeMounts:- name: tls-certsmountPath: /etc/nginx/certsreadOnly: true- name: basic-authmountPath: /etc/nginx/htpasswdsubPath: htpasswdreadOnly: true             - name: custom-configmountPath: /etc/nginx/nginx.confsubPath: nginx.confreadOnly: true- name: download-datamountPath: /data/down- name: upload-datamountPath: /data/nginx_upload_datavolumes:- name: tls-certssecret:secretName: nginx-webdav-tls-certs- name: basic-authsecret:secretName: nginx-webdav-basic-auth- name: custom-configconfigMap:name: nginx-webdav-conf- name: download-datahostPath:path: /data/report-nginx-data/downtype: Directory- name: upload-datahostPath:path: /data/report-nginx-data/uploadtype: Directory

svc yaml 示例內容如下,生產環境看根據實際環境調整svc對外開放端口的方式:

apiVersion: v1
kind: Service
metadata:name: nginx-webdav-ssl-svc
spec:type: NodePortselector:app: report-nginxports:- protocol: TCPport: 443targetPort: 443nodePort: 30043namenode指定的主機節點創建hostpath目錄,并設置為Nginx pod內nginx 的uid,gid
~# mkdir /data/report-nginx-data/{down,upload} -p
~# chown -R 101:101 report-nginx-data/

部署deployment, svc

~# kubectl apply -f deployment.yaml -f svc.yaml~# kubectl get pod
NAME                          READY   STATUS    RESTARTS        AGE
pod/report-nginx-webdav-5f977c7bfc-mpfcg   1/1     Running   1 (2d21h ago)   2d21h~# kubectl get svc
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
nginx-webdav-ssl-svc   NodePort    10.110.106.124   <none>        443:30043/TCP   2d21h

3.6 客戶端curl上傳下載文件

客戶端訪問服務器端https時,需要指定CA證書去驗證TLS/SSL證書,所以需要把自簽的私有CA證書復制到客戶端,在使用curl訪問時指定。

-rw------- 1 root root 1.9K  6月  6 11:12 ca.key

另外為將htpasswd創建的基于Nginx Basic Auth 的賬戶和密碼,訪問的服務器域名存入一個文件中,方便使用。

~# vim .netrc 
machine report.server.com
login user
password abc.888.com

上傳文件到服務器upload目錄示例命令:

~# curl --cacert ca.crt --netrc-file .netrc --upload-file file01.txt https://report.server.com:30043/upload/

從服務器down目錄下載腳本到本地示例命令:

~# curl --cacert ca.crt --netrc-file .netrc -o file02.sh https://report.server.com:30043/down/file02.sh

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89216.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Day 7-N17】Python函數(1)——函數定義、位置參數調用函數、關鍵字參數調用函數、函數的默認值

挑戰14天學會Python&#xff0c;第7天學習筆記&#xff01;加油&#xff01; 一、概述 函數&#xff08;Function&#xff09;是 Python 中用于封裝可重用代碼塊的基本結構。通過定義函數&#xff0c;我們可以將復雜邏輯拆分為更小、更易管理的單元&#xff0c;并通過參數傳遞…

STM32 驅動 ADS1015 單端 差分 多通道模式 ADC 轉換

文章目錄 一、ADS1015簡介二、引腳功能三、寄存器介紹1.Conversion Register 轉化數據存放寄存器2.Config Register 配置寄存器 四、IIC時序1.寫寄存器2.讀寄存器 五、程序六、實驗現象1.單端模式2.差分模式3.偽多通道模式 一、ADS1015簡介 ADS1015 是一款由德州儀器&#xff…

RabbitMQ 消費冪等性與消息重放實現

一、冪等性實現 1.1 什么是冪等性&#xff1f; 冪等性是指同一條消息無論被消費多少次&#xff0c;業務結果都只生效一次&#xff0c;防止重復扣款、重復發貨等問題。 RabbitMQ 的投遞模式是“至少一次交付”(at-least-once delivery)&#xff0c;如果消費者處理失敗或者沒有及…

【HarmonyOS 5】鴻蒙TEE(可信執行環境)詳解

【HarmonyOS 5】鴻蒙TEE&#xff08;可信執行環境&#xff09;詳解 一、TEE是什么&#xff1f; 1、TEE的定義&#xff1a; 可信執行環境&#xff08;Trusted Execution Environment&#xff09;&#xff0c;簡稱TEE&#xff0c;是存在于智能手機、平板或任意移動設備主處理器…

算法: 冒泡排序

冒泡排序是一種簡單的排序算法&#xff0c;通過相鄰元素的比較和交換&#xff0c;使較大的元素逐漸"浮"到數組末尾。 時間復雜度:最佳 O(n) | 平均 O(n) | 最差 O(n) 空間復雜度:O(1) 穩定性:穩定 應用場景/前提條件 適用于小規模數據對幾乎已排序的數據效率較高…

基于SpringBoot的家電銷售展示平臺

源碼編號&#xff1a;S567 源碼名稱&#xff1a;基于SpringBoot的家電銷售展示平臺 用戶類型&#xff1a;雙角色&#xff0c;用戶、管理員 數據庫表數量&#xff1a;14 張表 主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 運行環境&#xff1a;Windows/M…

java+vue+SpringBoo智慧旅游系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.…

Docker 入門教程(三):鏡像操作命令

文章目錄 &#x1f433; Docker 入門教程&#xff08;三&#xff09;&#xff1a;鏡像操作命令獲取鏡像&#xff1a;docker pull查看鏡像&#xff1a;docker images刪除鏡像&#xff1a;docker rmi搜索鏡像&#xff1a;docker search鏡像打標簽&#xff1a;docker tag鏡像詳情與…

如何修改discuz文章標題字數限制 修改成255

在 Discuz! X3.5 中&#xff0c;文章&#xff08;主題&#xff09;標題字數的限制可以通過修改數據庫結構以及后臺配置來實現&#xff0c;以下是完整的修改方法&#xff0c;將標題長度限制改為 255 個字符&#xff1a; ? 一、修改數據庫字段長度 Discuz 默認標題字段是 subje…

基于BP神經網絡的26個英文字母識別

本課題旨在設計并實現一個基于BP&#xff08;反向傳播&#xff09;神經網絡的英文字母識別系統&#xff0c;實現對手寫或打印的26個英文字母&#xff08;A-Z&#xff09;的自動分類識別。項目首先對字母圖像進行預處理&#xff08;如灰度化、歸一化、二值化和特征提取&#xff…

系統架構設計師論文分享-論云原生技術的應用

我的軟考歷程 摘要 2023年2月&#xff0c;我所在的公司做了開發紗線MES系統的決定&#xff0c;該系統為國內紗線工廠提供SAAS服務&#xff0c;旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師&#xff0c;全面掌管該項目的架構設計工作。該項目涉…

重置 MySQL root 密碼

引言 在linux可能存在安裝mysql安裝失敗&#xff0c;一直不出現默認密碼 /usr/local/mysql/mysql-8.0.26/bin/mysqld --defaults-file/etc/my.cnf --usermysql --basedir/usr/local/mysql/mysql-8.0.26 --datadir/usr/local/mysql/mysql-8.0.26/data --lower-case-table-name…

面試八股---HTML

面試八股 1、HTML 1.1 src和href的區別 src 用于替換當前元素&#xff0c;href 用于在當前文檔和引用資源之間確立聯系。 核心區別在于 href 關聯的資源&#xff08;主要是 CSS&#xff09;是用于描述頁面外觀的&#xff0c;瀏覽器可以先生成內容再應用樣式&#xff0c;因此…

氣候智能體:AI如何重構人類應對氣候危機的決策體系?

前言 前些天發現了一個巨牛的人工智能免費學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 《氣候智能體&#xff1a;AI如何重構人類應對氣候危機的決策體系&#xff1f;》 展開全景式論述。文章結合2025年最新技術突破與…

UITableView的位置向下偏移, contentInsetAdjustmentBehavior使用詳情

一.contentInsetAdjustmentBehavior 作用: 在iOS 11及以后&#xff0c;蘋果引入了安全區域&#xff08;Safe Area&#xff09;的概念,當UITableView的frame超出了安全區域,系統會自定調整SafeAreaInsets的值,它可以自動調整內容的內邊距&#xff0c;使得內容不會被導航欄遮擋。…

騰訊云RayData全新推出“行業解決方案模板”,一鍵快捷制作3D數據可視化作品

點擊藍字? 關注我們 本文共計958字 預計閱讀時長3分鐘 騰訊云RayData Plus是一款專注于高視效的3D數據可視化的實時渲染工具。 功能全面&#xff1a;提供了三維、二維、動畫、數據、交互邏輯等各類能力&#xff1b; 零代碼制作&#xff1a;靈活的節點式創作&#xff0c;即便沒…

深度解析基于貝葉斯的垃圾郵件分類

貝葉斯垃圾郵件分類的核心邏輯是基于貝葉斯定理&#xff0c;利用郵件中的特征&#xff08;通常是單詞&#xff09;來計算該郵件屬于“垃圾郵件”或“非垃圾郵件”的概率&#xff0c;并根據概率大小進行分類。它是一種樸素貝葉斯分類器&#xff0c;因其假設特征&#xff08;單詞…

WPF 3D 開發全攻略:實現3D模型創建、旋轉、平移、縮放

&#x1f3ae; WPF 3D 入門實戰&#xff1a;從零打造一個可交互的立方體模型 標題&#xff1a; &#x1f680;《WPF 3D 開發全攻略&#xff1a;實現旋轉、平移、縮放與法線顯示》 &#x1f4a1; 引言 在現代圖形應用中&#xff0c;3D 可視化已經成為不可或缺的一部分。WPF 提供…

Ruby 安裝使用教程

一、Ruby 簡介 Ruby 是一種簡單快捷的面向對象腳本語言&#xff0c;以優雅、簡潔、易讀著稱。它常被用于 Web 開發&#xff08;如 Ruby on Rails 框架&#xff09;、自動化腳本、DevOps、命令行工具等領域。 二、Ruby 安裝教程 2.1 支持平臺 Ruby 支持跨平臺運行&#xff0c…

python | numpy小記(五):理解 NumPy 中的 `np.arccos`:反余弦函數

python | numpy小記&#xff08;五&#xff09;&#xff1a;理解 NumPy 中的 np.arccos&#xff1a;反余弦函數 一、函數簽名與核心參數二、數學定義與取值范圍三、基礎使用示例四、與 Python 內建 math.acos 的對比五、常見問題與注意事項六、典型應用場景1. 三維向量夾角計算…