掌握Kubernetes Network Policy,構建安全的容器網絡

在 Kubernetes 集群中,默認情況下,所有 Pod 之間都是可以相互通信的,這在某些場景下可能會帶來安全隱患。為了實現更精細的網絡訪問控制,Kubernetes 提供了 Network Policy 機制。Network Policy 允許我們定義一組規則,來控制 Pod 之間的網絡流量,從而實現網絡隔離和安全加固。

本文將通過豐富的示例,詳細講解 Network Policy 的概念、語法、使用場景以及配置實踐,幫助大家快速掌握 Network Policy,構建安全的容器網絡。
在這里插入圖片描述

Network Policy 的核心概念

Network Policy 是一種基于 Pod 標簽(Label)的網絡訪問控制策略。它通過定義一系列規則,來允許或拒絕 Pod 之間的網絡流量。Network Policy 的核心概念包括:

  • Policy 對象:Network Policy 是 Kubernetes 中的一種資源對象,我們可以通過 YAML 文件來定義和管理。
  • Pod 選擇器(Pod Selector):Network Policy 通過 Pod 選擇器來指定哪些 Pod 需要應用該策略。
  • Ingress 規則:定義允許進入被選定 Pod 的流量規則。
  • Egress 規則:定義允許從被選定 Pod 發出的流量規則。
  • 規則類型
    • IPBlock:基于 IP 地址段進行流量控制。
    • PodSelector:基于 Pod 標簽進行流量控制。
    • NamespaceSelector:基于 Namespace 標簽進行流量控制。

Network Policy 示例詳解

下面通過幾個示例來詳細講解 Network Policy 的用法。

示例 1:拒絕所有流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-allnamespace: default
spec:podSelector: {}policyTypes:- Ingress- Egress

這個 Network Policy 選擇了 default 命名空間下的所有 Pod(podSelector: {}),并定義了空的 IngressEgress 規則。這意味著拒絕所有進入和離開這些 Pod 的流量。

示例 2:允許同一 Namespace 下的 Pod 之間互訪
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-same-namespacenamespace: default
spec:podSelector: {}ingress:- from:- podSelector: {}

這個 Network Policy 選擇了 default 命名空間下的所有 Pod,并定義了一個 Ingress 規則,允許來自同一命名空間下所有 Pod(podSelector: {})的流量。

示例 3:允許特定標簽的 Pod 訪問
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-frontendnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- podSelector:matchLabels:app: frontend

這個 Network Policy 選擇了 default 命名空間下標簽為 app: backend 的 Pod,并定義了一個 Ingress 規則,允許來自同一命名空間下標簽為 app: frontend 的 Pod 的流量。

示例 4:允許來自特定 Namespace 的 Pod 訪問
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-monitoringnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- namespaceSelector:matchLabels:name: monitoring

這個 Network Policy 選擇了 default 命名空間下標簽為 app: backend 的 Pod,并定義了一個 Ingress 規則,允許來自標簽為 name: monitoring 的 Namespace 下的所有 Pod 的流量。

示例 5:允許特定 IP 段的訪問
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-external-accessnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- ipBlock:cidr: 192.168.1.0/24except:- 192.168.1.10/32

這個 Network Policy 選擇了 default 命名空間下標簽為 app: backend 的 Pod,并定義了一個 Ingress 規則,允許來自 IP 地址段 192.168.1.0/24 但排除 192.168.1.10/32 的流量。

示例 6:允許特定端口的訪問
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-specific-portnamespace: default
spec:podSelector:matchLabels:app: backendingress:- from:- podSelector:matchLabels:app: frontendports:- protocol: TCPport: 80

這個 Network Policy 選擇了 default 命名空間下標簽為 app: backend 的 Pod,并定義了一個 Ingress 規則,允許來自同一命名空間下標簽為 app: frontend 的 Pod 的流量,但僅限于 TCP 協議的 80 端口。

Network Policy 的注意事項

  • Network Policy 僅適用于支持它的網絡插件:如 Calico、Cilium 等。
  • Network Policy 是累加的:如果多個 Network Policy 選擇了同一個 Pod,那么這些策略的規則會合并生效。
  • Network Policy 的默認行為:如果沒有 Network Policy 選擇某個 Pod,那么該 Pod 的所有流量都是允許的。
  • Network Policy 的調試:可以使用 kubectl describe networkpolicy <policy-name> 命令查看 Network Policy 的詳細信息,以及使用網絡插件提供的工具進行調試。

總結

Network Policy 是 Kubernetes 中實現網絡隔離和訪問控制的重要工具。通過靈活運用 Network Policy,我們可以構建出滿足各種安全需求的容器網絡,保障應用的安全性。

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

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

相關文章

Flask 小冊子簡介

這是一個Flask restful講解的小冊子&#xff0c;涵蓋了 RESTful API 的概念、選擇 Flask 的原因以及小冊子的目標和結構。我會盡量寫得詳細&#xff0c;幫助你更好地理解。 1. 簡介 1.1 什么是 RESTful API&#xff1f; 1.1.1 REST 的概念 REST&#xff08;Representational…

ElementUI 級聯選擇器el-cascader啟用選擇任意一級選項,選中后關閉下拉框

1、啟用選擇任意一級選項 在 el-cascader 標簽上加上配置項&#xff1a; :props"{ checkStrictly: true }"例如&#xff1a; <el-cascaderref"selectedArrRef"v-model"selectedArr":options"optionsList":props"{ checkStri…

typedef 和 using 有什么區別?

在 C 編程中&#xff0c;類型別名&#xff08;Type Aliases&#xff09;是為已有類型定義新名稱的一種機制&#xff0c;能夠顯著提升代碼的可讀性和可維護性。C 提供了兩種工具來實現這一功能&#xff1a;傳統的 typedef 和 C11 引入的 using 關鍵字。 概念 類型別名本質上是為…

VS2022C#windows窗體應用程序調用DeepSeek API

目錄 一、創建DeepSeek API Key 二、創建窗體應用程序 三、設計窗體 1、控件拖放布局?? 2、主窗體【Form1】設計 3、多行文本框【tbContent】 4、提交按鈕【btnSubmit】 5、單行文字框 四、撰寫程序 五、完整代碼 六、運行效果 七、其它 一、創建DeepSeek API Ke…

docker 如何更新容器內的環境變量,并覆蓋創建這個容器的鏡像?

docker 如何更新容器內的環境變量&#xff0c;并覆蓋串講這個容器的鏡像&#xff1f; 之前試過在容器內unset 環境變量&#xff0c;并進行docker commit 保存&#xff0c;發現這樣是不行的&#xff0c;重新啟動容器之后還是會出現之前設置過的環境變量 了解了下&#xff0c;u…

Android Coil總結

文章目錄 Android Coil總結概述添加依賴用法基本用法占位圖變形自定義ImageLoader取消加載協程支持緩存清除緩存監聽 簡單封裝 Android Coil總結 概述 Coil 是一個用于 Android 的 Kotlin 圖像加載庫&#xff0c;旨在簡化圖像加載和顯示的過程。它基于 Kotlin 協程&#xff0…

如何在WPS中接入DeepSeek并使用OfficeAI助手(超細!成功版本)

目錄 第一步&#xff1a;下載并安裝OfficeAI助手 第二步&#xff1a;申請API Key 第三步:兩種方式導入WPS 第一種:本地大模型Ollama 第二種APIKey接入 第四步&#xff1a;探索OfficeAI的創作功能 工作進展匯報 PPT大綱設計 第五步&#xff1a;我的使用體驗(體驗建議) …

Spring Boot集成Minio筆記

一、首先配置MinIO 1、MinIO新建Bucket&#xff0c;訪問控制臺如圖 創建訪問密鑰(就是賬號和密碼) 二、集成mino添加Minio客戶端依賴 1.maven構建方式在pom.xml引入jar <dependency><groupId>io.minio</groupId><artifactId>minio</artifactI…

【開源寶藏】Spring Trace 一種輕量級的日志追蹤新方式

Spring Trace&#xff1a;一種輕量級的日志追蹤新方式 一、前言 在日常開發中&#xff0c;我們常常需要在日志中標記某個請求的唯一標識&#xff08;Trace ID&#xff09;或上下文信息&#xff0c;以便快速定位問題或查看調用鏈路。傳統做法通常會使用 MDC&#xff08;Mapped…

Web網頁開發——水果忍者

1.介紹 復刻經典小游戲——水果忍者 2.預覽 3.代碼 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&…

【Flink銀行反欺詐系統設計方案】6.用戶畫像數據與反欺詐系統的關聯思路

【Flink銀行反欺詐系統設計方案】6.用戶畫像數據與反欺詐系統的關聯思路 概要1. 用戶畫像數據與反欺詐系統的關聯思路1.1 用戶畫像數據內容1.2 數據賦能反欺詐的核心邏輯 2. 用戶畫像賦能反欺詐的3個案例2.1 案例1&#xff1a;消費習慣異常檢測2.2 案例2&#xff1a;設備/地理位…

如何在unity中完整錄制一段動畫

在動畫制作中&#xff0c;需要對接音頻部門進行音效的制作。通常需要完整且無多余幀數的動畫視頻作為時間和幀數對幀參考&#xff0c;這時候手動錄屏就會顯得不夠精確&#xff0c;這里分享一個插件錄制方法&#xff0c;可以自定義錄制起始位置&#xff0c;0幀起手完整錄制。 錄…

Jetson Orin 安裝 onnxruntime

Jetson Orin 安裝 onnxruntime onnxruntime在Jetson上安裝只需注意三件事&#xff1a; 版本&#xff01; 版本&#xff01; 還是TMD版本&#xff01; 本機環境 Jectpack : 5.1.2CUDA : 11.4cuDNN &#xff1a;8.6.0 版本說明 關于onnxruntime的版本適配不同的官方有不同的…

Manus AI : Agent 元年開啟.pdf

Manus AI : Agent 元年開啟.pdf 是由華泰證券出品的一份調研報告&#xff0c;共計23頁。報告詳細介紹了Manus AI 及 Agent&#xff0c;主要包括Manus AI 的功能、優勢、技術能力&#xff0c;Agent 的概念、架構、應用場景&#xff0c;以及 AI Agent 的類型和相關案例&#xff0…

【為什么會有 map、weakmap 類型?】

為什么會有 map、weakmap 類型? 傳統對象的局限性催生 Map?1. 鍵類型單一性?2. 有序性與迭代支持?3. 性能優化場景? 內存管理需求催生 WeakMap?1.弱引用機制?2. 私有數據存儲?3. 規避循環引用問題? 總結 傳統對象的局限性催生 Map? 1. 鍵類型單一性? 傳統對象&…

SpringSecurity認證授權完整流程

SpringSecurity認證流程&#xff1a;loadUserByUsername&#xff08;&#xff09;方法內部實現。 實現步驟&#xff1a; 構建一個自定義的service接口&#xff0c;實現SpringSecurity的UserDetailService接口。建一個service實現類&#xff0c;實現此loadUserByUsername方法。…

本地部署DeepSeek R1大數據模型知識庫

DeepSeek-V3 的綜合能力 DeepSeek-V3 在推理速度上相較歷史模型有了大幅提升。在目前大模型主流榜單中&#xff0c;DeepSeek-V3 在開源模型中位列榜首&#xff0c;與世界上最先進OpenAI 閉源模型不分伯仲。 1、下載Ollama運行大數據庫 Ollama支持 Llama 3.3, DeepSeek-R1, Phi-…

云端秘境:EC2的奇幻之旅

在一個神秘的云端世界里&#xff0c;流傳著一個傳說——只要掌握了 EC2&#xff08;Elastic Compute Cloud&#xff09; 的奧秘&#xff0c;就能召喚出強大的騎士軍團&#xff0c;在云端之上建造屬于自己的帝國。年輕的程序法師 艾倫&#xff08;Allen&#xff09;&#xff0c;…

【javaEE】多線程(基礎)

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

一周學會Flask3 Python Web開發-WTForms表單驗證

鋒哥原創的Flask3 Python Web開發 Flask3視頻教程&#xff1a; 2025版 Flask3 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 我們可以通過WTForms表單類屬性的validators屬性來實現表單驗證。 常用的WTForms驗證器 驗證器說明DataRequired(messageNo…