深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

目錄

  • 深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret
    • 一、目錄結構
    • 二、ConfigMap 和 Secret 的創建
      • 1. 創建 ConfigMap
        • `config/app-config.yaml`:
        • `config/db-config.yaml`:
      • 2. 創建 Secret
        • `secrets/db-credentials.yaml`:
    • 三、在 Deployment 中使用 ConfigMap 和 Secret
        • `deployments/app-deployment.yaml`:
    • 四、只掛載 ConfigMap 或 Secret 中的某個變量
      • 1. 只掛載 ConfigMap 中的某個變量
        • 示例:只將 `APP_ENV` 環境變量從 ConfigMap 中注入到容器:
      • 2. 只掛載 Secret 中的某個變量
        • 示例:只將 `DB_USER` 和 `DB_PASSWORD` 從 Secret 中注入到容器:
    • 五、部署和管理
    • 六、安全性和最佳實踐
    • 七、總結

深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

在企業級 Kubernetes 環境中,如何高效、安全地管理應用配置是運維和開發的核心任務之一。Kubernetes 提供了 ConfigMap 和 Secret 兩種資源對象,分別用于存儲非敏感和敏感的配置信息。本文將通過一套完整的 YAML 文件示例,展示如何在 Kubernetes 中使用 ConfigMap 和 Secret 管理應用配置,包括創建、部署、更新和安全控制等方面,并且我們會演示如何只掛載 ConfigMap 或 Secret 中的某個變量。


一、目錄結構

以下是示例項目的目錄結構:

├── config/
│   ├── app-config.yaml       # 存儲應用配置的 ConfigMap
│   └── db-config.yaml        # 存儲數據庫配置的 ConfigMap
├── secrets/
│   └── db-credentials.yaml   # 存儲數據庫憑證的 Secret
├── deployments/
│   └── app-deployment.yaml   # 應用的 Deployment 配置
└── README.md

二、ConfigMap 和 Secret 的創建

1. 創建 ConfigMap

ConfigMap 用于存儲非敏感的配置信息,例如環境變量、應用配置等。

config/app-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: app-confignamespace: default
data:# 應用環境設置APP_ENV: productionLOG_LEVEL: infoFEATURE_FLAG: "true"  # 特性標志,用于控制功能開關
config/db-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: db-confignamespace: default
data:# 數據庫連接配置DB_HOST: db.example.comDB_PORT: "5432"DB_NAME: myapp

2. 創建 Secret

Secret 用于存儲敏感信息,例如數據庫憑證、API 密鑰等。數據以 base64 編碼存儲。

secrets/db-credentials.yaml
apiVersion: v1
kind: Secret
metadata:name: db-credentialsnamespace: default
type: Opaque
data:# 數據庫用戶名和密碼,值經過 base64 編碼DB_USER: YWRtaW4=  # base64 編碼的 'admin'DB_PASSWORD: cGFzc3dvcmQ=  # base64 編碼的 'password'

注意:Secret 中的值使用 base64 編碼存儲,實際使用時需要解碼。


三、在 Deployment 中使用 ConfigMap 和 Secret

在 Deployment 中掛載 ConfigMap 和 Secret,可以通過環境變量或卷的方式將配置數據注入到容器中。

deployments/app-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: app-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: app-containerimage: myapp:v1ports:- containerPort: 8080envFrom:# 使用 ConfigMap 注入環境變量- configMapRef:name: app-config- configMapRef:name: db-config# 使用 Secret 注入環境變量- secretRef:name: db-credentialsvolumeMounts:# 將 ConfigMap 掛載為文件- name: config-volumemountPath: /etc/config# 將 Secret 掛載為文件- name: secret-volumemountPath: /etc/secretvolumes:# ConfigMap 掛載配置文件- name: config-volumeconfigMap:name: app-config# Secret 掛載敏感信息文件- name: secret-volumesecret:secretName: db-credentials

四、只掛載 ConfigMap 或 Secret 中的某個變量

如果只需要掛載 ConfigMap 或 Secret 中的某個變量,可以使用 envenvFrom 來指定具體的鍵,而不是將整個 ConfigMap 或 Secret 注入容器。

1. 只掛載 ConfigMap 中的某個變量

示例:只將 APP_ENV 環境變量從 ConfigMap 中注入到容器:
apiVersion: apps/v1
kind: Deployment
metadata:name: app-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: app-containerimage: myapp:v1ports:- containerPort: 8080env:# 從 ConfigMap 中注入單一環境變量- name: APP_ENVvalueFrom:configMapKeyRef:name: app-configkey: APP_ENV  # 僅注入 APP_ENV 變量

2. 只掛載 Secret 中的某個變量

示例:只將 DB_USERDB_PASSWORD 從 Secret 中注入到容器:
apiVersion: apps/v1
kind: Deployment
metadata:name: app-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: app-containerimage: myapp:v1ports:- containerPort: 8080env:# 從 Secret 中注入數據庫用戶名和密碼- name: DB_USERvalueFrom:secretKeyRef:name: db-credentialskey: DB_USER  # 僅注入 DB_USER- name: DB_PASSWORDvalueFrom:secretKeyRef:name: db-credentialskey: DB_PASSWORD  # 僅注入 DB_PASSWORD

五、部署和管理

  1. 應用資源
    使用 kubectl 部署 ConfigMap、Secret 和 Deployment:

    kubectl apply -f config/
    kubectl apply -f secrets/
    kubectl apply -f deployments/
    
  2. 查看資源狀態
    檢查部署狀態:

    kubectl get deployments
    kubectl get pods
    kubectl get configmaps
    kubectl get secrets
    
  3. 更新 ConfigMap 和 Secret

    • 編輯 config/app-config.yamlsecrets/db-credentials.yaml

    • 使用 kubectl apply -f 更新資源。

    • 對于以環境變量形式注入的配置,更新后需要重啟 Pod:

      kubectl rollout restart deployment app-deployment
      

六、安全性和最佳實踐

  • 加密存儲:啟用 Kubernetes 的靜態加密功能,確保 Secret 在 etcd 中以加密形式存儲。
  • 訪問控制:使用 RBAC 控制對 ConfigMap 和 Secret 的訪問權限,確保只有授權的用戶和服務可以訪問。
  • 版本管理:為 ConfigMap 和 Secret 添加版本信息,便于追蹤和回滾。
  • 外部 Secret 管理:對于敏感信息,建議使用外部 Secret 管理工具(如 HashiCorp Vault)進行管理,并通過 Kubernetes 的 External Secrets Operator 實現同步。

七、總結

通過上述示例,我們展示了如何在 Kubernetes 中使用 YAML 文件創建和管理 ConfigMap 和 Secret,實現應用配置的集中管理和動態更新。在實際操作中,建議將非敏感的配置存儲在 ConfigMap 中,將敏感信息存儲在 Secret 中,并通過環境變量或卷的方式將其注入到 Pod 中。這樣可以有效地解耦應用和配置,提高系統的靈活性和安全性。


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

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

相關文章

數據庫之mysql優化

1.引擎: 1.1查看引擎: mysql> show engines; mysql> SHOW VARIABLES LIKE %storage_engine%; mysql> show create table t1; ---查看建表信息1.2 臨時指定引擎: mysql> create table innodb1(id int)engineinnodb; 1.3修改…

【Yii2】Yii2框架的一次BUG排查

因為項目需要,最近學習了使用Yii2框架的使用。但畢竟剛上手,好多地方都不清楚。所以就有了這個博客。 1、需求 有這么一個需求: 后臺需要訪問用戶的一個界面。為了界面不出問題,需要傳遞一個真實存在的Token。但對這個Token沒有…

卡爾曼濾波解釋及示例

卡爾曼濾波的本質是用數學方法平衡預測與觀測的可信度 ,通過不斷迭代逼近真實狀態。其高效性和魯棒性,通常在導航定位中,需要融合GPS、加速度計、陀螺儀、激光雷達或攝像頭數據,來提高位置精度。簡單講,卡爾曼濾波就是…

Python 學習路線與筆記跳轉(持續更新筆記鏈接)

這里寫目錄標題 Python 學習路線與筆記Python 簡介學習路線第一階段:Python 基礎第二階段:Python 進階第三階段:實用庫與框架第四階段:DevOps 與 Python第五階段:最佳實踐與高級技巧 學習資源官方資源在線學習平臺書籍…

決策衛生問題:考公考編考研能補救高考選取職業的錯誤嗎

對于決策者來說,“認識你自己”是一個永恒的主題;警惕認知中的缺陷,比什么都重要。在判斷與決策問題上,管理者和專業人士往往都非常自信。人類遠遠不如我們想象的那么理性,人類的判斷也遠遠不如我們想象的那么完美。在…

React19源碼閱讀之commitRoot

commitRoot入口 在finishConcurrentRender函數,commitRootWhenReady函數,commitRoot函數。 commitRoot流程圖 commitRoot函數 commitRoot 函數是 React 渲染流程中用于提交根節點的關鍵函數。它的主要作用是設置相關的優先級和狀態,然后調…

利用Python爬蟲實現百度圖片搜索的PNG圖片下載

在圖像識別、訓練數據集構建等場景中,我們經常需要從互聯網上批量下載圖片素材。百度圖片是中文搜索中最常用的來源之一。本文將介紹如何使用Python構建一個穩定、可擴展的百度圖片爬蟲,專門用于下載并保存高清PNG格式圖片。 一、項目目標 本項目的目標…

Axure復選框組件的深度定制:實現自定義大小、顏色與全選功能

在產品設計中,復選框作為用戶與界面交互的重要元素,其靈活性直接影響到用戶體驗。本文將介紹如何利用Axure RP工具,通過高級技巧實現復選框組件的自定義大小、顏色調整,以及全選功能的集成,為產品原型設計增添更多可能…

深度理解spring——BeanFactory的實現

BeanFactory Spring之BeanFactory什么是BeanFactoryApplicationContext相對BeanFactory實現的功能性擴展1. MessageSource2. ResourcePatternResolver3. ApplicationEventPublisher4. EnvironmentCapable通用ApplicationContext實踐實現BeanFactoryBeanFactory后處理器排序讓誰…

跑MPS產生委外采購申請(成品)

問題:跑MPS產生委外采購申請(成品),更改BOM和跑MRP,但物料需求清單中無新增物料復合膜的需求。截圖如下: 解決方法:更改委外采購申請的批準日期為BOM的生效日和重新展開bom。 重新展開后&#x…

“在中國,為中國” 英飛凌汽車業務正式發布中國本土化戰略

3月28日,以“夯實電動化,推進智能化,實現高質量發展”為主題的2025中國電動汽車百人會論壇在北京舉辦。眾多中外機構與行業上下游嘉賓就全球及中國汽車電動化的發展現狀、面臨的挑戰與機遇,以及在技術創新、市場布局、供應鏈協同等…

優雅實現網頁彈窗提示功能:JavaScript與CSS完美結合

在現代Web開發中,彈窗提示是提升用戶體驗的重要元素之一。本文將深入探討如何實現一個優雅、可復用的彈窗提示系統,避免常見問題如重復觸發、樣式混亂等。 核心代碼解析 // 控制彈窗是否可以顯示的標志 let alertStatus true;// 顯示提示信息 functio…

YOLOv11改進-雙Backbone架構:利用雙backbone提高yolo11目標檢測的精度

一、引言:為什么我們需要雙Backbone? 在目標檢測任務中,YOLO系列模型因其高效的端到端檢測能力而備受青睞。然而,傳統YOLO模型大多采用單一Backbone結構,即利用一個卷積神經網絡(CNN)作為特征提…

用 PyQt5 和 asyncio 打造接口并發測試 GUI 工具

接口并發測試是測試工程師日常工作中的重要一環,而一個直觀的 GUI 工具能有效提升工作效率和體驗。本篇文章將帶你用 PyQt5 和 asyncio 從零實現一個美觀且功能實用的接口并發測試工具。 我們將實現以下功能: 請求方法選擇器 添加了一個下拉框 QComboBo…

理解npm的工作原理:優化你的項目依賴管理流程

目錄 什么是npm npm核心功能 npm 常用指令及其作用 執行npm i 發生了什么? 1. 解析命令與參數 2. 檢查依賴文件 3. 依賴版本解析與樹構建 4. 緩存檢查與包下載 5. 解壓包到 node_modules 6. 更新 package-lock.json 7. 處理特殊依賴類型 8. 執行生命周期腳本 9. …

React Native 安卓端 android Image 播放gif webp 動態圖

React Native 安卓端 android Image 播放gif webp 動態圖 RN項目是0.78.2 React是19.0 基本介紹 Image 是 React Native 中用于顯示各種類型圖片的核心組件,支持顯示網絡圖片、靜態資源、本地圖片以及 base64 編碼的圖片。在 Android 端,Image 組件還可…

實時數字人——DH_LIVE

前兩天親手搭建了實時對話數字人VideoChat,今天來搭建下DH_LIVE。 DH_LIVE一個實時數字人解決方案,從輸入文字到數字人對口型說話用時2-3秒。 今天就來實際操作下dh_live的搭建過程。 首先貼上git地址:https://github.com/kleinlee/DH_liv…

AOSP CachedAppOptimizer 凍結方案

背景 Android 一直面臨一個核心難題:如何優化進程對有限系統資源(如 CPU、電量)的使用,同時保證用戶體驗。 當進程進入后臺后,它們雖不再貢獻用戶體驗,卻仍可能消耗資源。傳統的殺后臺方案雖然節省資源&a…

實體店的小程序轉型之路:擁抱新零售的密碼-中小企實戰運營和營銷工作室博客

實體店的小程序轉型之路:擁抱新零售的密碼-中小企實戰運營和營銷工作室博客 在當今數字化浪潮的沖擊下,實體店面臨著前所未有的挑戰,但小程序的出現為實體店轉型新零售帶來了新的曙光。先來看一組驚人的數據,據相關統計&#xff…

Java求職面試:從Spring Boot到微服務的全面考核

Java求職面試實錄:從Spring Boot到微服務的全面考核 第一輪:基礎技術的考察 場景: 趙大寶走進了一家互聯網大廠的面試間,面試官嚴肅地看著他。 面試官: 趙大寶,你好。我們先從簡單的開始。請你解釋一下J…