掌握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-all
  namespace: 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-namespace
  namespace: 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-frontend
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - 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-monitoring
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - 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-access
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - ipBlock:
        cidr: 192.168.1.0/24
        except:
        - 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-port
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 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,我们可以构建出满足各种安全需求的容器网络,保障应用的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/983037.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

清华北大推出的 DeepSeek 教程(附 PDF 下载链接)

清华和北大分别都有关于DeepSeek的分享文档&#xff0c;内容非常全面&#xff0c;从原理和具体的应用&#xff0c;大家可以认真看看。 北大 DeepSeek 系列 1&#xff1a;提示词工程和落地场景.pdf  北大 DeepSeek 系列 2&#xff1a;DeepSeek 与 AIGC 应用.pdf  清华 Deep…

【GoTeams】-4:为项目引入etcd

本文目录 1. 书接上回2. 引入etcddiscoverystruct{}{} resolverserver 3. 将服务注册到etcd中4. 梳理下etcd调用逻辑 1. 书接上回 本节是为项目引入etcd这个环节&#xff0c;然后我们来看看具体该怎么实现。 首先来谈谈为什么要引入服务发现&#xff1f; 动态服务注册与发现…

ReferenceError: assignment to undeclared variable xxx

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 &#x1f35a; 蓝桥云课签约作者、…

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

目录 第一步&#xff1a;下载并安装OfficeAI助手 第二步&#xff1a;申请API Key 第三步:两种方式导入WPS 第一种:本地大模型Ollama 第二种APIKey接入 第四步&#xff1a;探索OfficeAI的创作功能 工作进展汇报 PPT大纲设计 第五步&#xff1a;我的使用体验(体验建议) …

fiddler everywhere 绿色永久版

目录&#xff1a; 1. 下载并安装 FiddlerEverywhere v5.16.02. 下载并安装 FiddlerEverywherePatcher 补丁3. 修改 FiddlerEverywhere 版本号4. 再打开 FiddlerEverywhere 即可正常使用 亲测有效&#xff01;&#xff01;&#xff01;以 Windows 10 FiddlerEverywhere v5.16.0 …

100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)

文章目录 一、curl是什么&#xff1f;二、爬虫在线小工具&#xff08;牛逼puls&#xff09;三、实战操作 一、curl是什么&#xff1f; 基本概念&#xff1a;curl 支持多种协议&#xff0c;如 HTTP、HTTPS、FTP、SFTP 等&#xff0c;可用于从服务器获取数据或向服务器发送数据&a…

如何使用MyBatis进行多表查询

前言 在实际开发中&#xff0c;对数据库的操作通常会涉及多张表&#xff0c;MyBatis提供了关联映射&#xff0c;这些关联映射可以很好地处理表与表&#xff0c;对象与对象之间的的关联关系。 一对一查询 步骤&#xff1a; 先确定表的一对一关系确定好实体类&#xff0c;添加关…

【数据分析】转录组基因表达的KEGG通路富集分析教程

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍差异分析(limma)KEGG富集分析(enrichKEGG)可视化加载R包数据下载导入数据基因差异分析火山图KEGG通路富集分析可视化通路结果另一个案例总结系统信息参考介绍 KEGG富集分析,可…

实现Django和Transformers 构建智能客服大模型(模拟订单系统)

一、环境安装准备 #git拉取 bert-base-chinese 文件#创建 虚拟运行环境python -m venv myicrplatenv#刷新source myicrplatenv/bin/activate#python Django 集成nacospip install nacos-sdk-python#安装 Djangopip3 install Django5.1#安装 pymysql settings.py 里面需要 # 强制…

实战案例分享:Android WLAN Hal层移植(MTK+QCA6696)

本文将详细介绍基于MTK平台&#xff0c;适配高通&#xff08;Qualcomm&#xff09;QCA6696芯片的Android WLAN HAL层的移植过程&#xff0c;包括HIDL接口定义、Wi-Fi驱动移植以及wpa_supplicant适配过程&#xff0c;涵盖STA与AP模式的常见问题与解决方法。 1. HIDL接口简介 HID…

ubuntu22.04机器人开发环境配置

1. ros2环境配置&#xff08;humble&#xff09; #配置源 # https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update && sudo apt install curl -y# …

1. 树莓派上配置机器人环境(具身智能机器人套件)

1. 安装树莓派系统 镜像下载地址&#xff08;windows/Mac/Ubuntu)&#xff0c;安装Pi5. 2. 环境配置&#xff08;登录Pi系统&#xff09; 2.1 启用 SSH From the Preferences menu, launch Raspberry Pi Configuration. Navigate to the Interfaces tab. Select Enable…

【从零开始学习计算机科学】数字逻辑(九)有限状态机

【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…

springboot-bug

spring boot :3.2.6该版本不与mybatis框架兼容&#xff0c;所以使用该版本时&#xff0c;请注意JDBC框架&#xff0c;要不然你会疑问&#xff0c;明明自己映射是对的&#xff0c;实体类是对的&#xff0c;各种东西都配好了&#xff0c;但就是报错&#xff0c;这是因为SpringBoo…

MySQL 数据库优化与定期数据处理策略

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

使用服务器搭建一个专属的密码管理工具Vaultwarden

一、服务器配置与Docker环境 ‌实例选型与系统准备‌ ‌推荐配置‌&#xff1a;‌1核2GB内存‌&#xff08;莱卡云L1型实例&#xff09;&#xff0c;Vaultwarden资源占用低&#xff0c;适合轻量级部署‌34。‌操作系统‌&#xff1a;选择 ‌Ubuntu 22.04 LTS‌&#xff0c;兼容…

Vue23Web 基礎性拉滿的面試題(2025版)還沒更新完...

Vue2&3 基礎性1. 關於Vue2和Vue3生命週期的差別2. Vue2&3組件之間傳參不同點Vue2 傳遞與接收Vue3 傳遞與接收 (使用script setup語法糖)Vue3 傳遞與接收 (不使用script setup語法糖) 3. Vue2&3 keep-alive 組件Vue2 keep-aliveVue3 keep-alive 進階性爲什麽POST請求…

SSM架构 +java后台 实现rtsp流转hls流,在前端html上实现视频播放

序言&#xff1a;书接上文&#xff0c;我们继续 SSM架构 NginxFFmpeg实现rtsp流转hls流&#xff0c;在前端html上实现视频播放 步骤一&#xff1a;把rtsp流转化为hls流&#xff0c;用Java代码进行转换 package com.tools;import java.io.BufferedReader; import java.io.IOExc…

测试用大模型组词

已经把hanzi-writer的js的调用、hanzi-writer调用的数千个汉字的json文件&#xff0c;全都放在本地了。虽然用的办法还是比较笨的。我注意到 大模型也可以部署本地&#xff0c;虽然使用频率低的情况下不划算。 尝试直接通过html的javascript通过api key调用大语言模型&#x…

AI革命先锋:DeepSeek与蓝耘通义万相2.1的无缝融合引领行业智能化变革

云边有个稻草人-CSDN博客 目录 引言 一、什么是DeepSeek&#xff1f; 1.1 DeepSeek平台概述 1.2 DeepSeek的核心功能与技术 二、蓝耘通义万相2.1概述 2.1 蓝耘科技简介 2.2 蓝耘通义万相2.1的功能与优势 1. 全链条智能化解决方案 2. 强大的数据处理能力 3. 高效的模型…