Cilium系列-14-Cilium NetworkPolicy 简介

系列文章

  • Cilium 系列文章

前言

今天我们进入 Cilium 安全相关主题, 介绍 Kubernetes 网络策略以及 CiliumNetworkPolicies 额外支持的内容。

网络策略(NetworkPolicy)的类型

默认情况下,Kubernetes 集群中的所有 pod 都可被其他 pod 和网络端点访问。

网络策略允许用户定义 Kubernetes 集群允许哪些流量, 禁止哪些流量。传统的防火墙是根据源或目标 IP 地址和端口来配置允许或拒绝流量的(五元组),而 Cilium 则使用 Kubernetes 的身份信息(如标签选择器、命名空间名称,甚至是完全限定的域名)来定义允许和不允许的流量规则。这样,网络策略就能在 Kubernetes 这样的动态环境中运行,因为在这种环境中,IP 地址会随着不同 pod 的创建和销毁而不断被使用和重复使用。

在 Kubernetes 上运行 Cilium 时,可以使用 Kubernetes 资源定义网络策略(networking.k8s.io/v1 NetworkPolicy)。Cilium Agent 将观察 Kubernetes API 服务器是否有网络策略更新,并加载必要的 eBPF 程序和 map,以确保实施所需的网络策略。启用 Cilium 的 Kubernetes 提供三种网络策略格式:

  • 支持第 3 层和第 4 层策略的标准 Kubernetes NetworkPolicy 资源(标准的 Kubernetes NetworkPolicy, Kubernetes 开箱自带, 其他 CNI 如 Calico 也支持)
  • 支持第 3、4 和 7 层(应用层)策略的 CiliumNetworkPolicy 资源(Cilium 专有的 CRD: CiliumNetworkPolicy)
  • CiliumClusterwideNetworkPolicy 资源,用于指定适用于整个集群而非指定命名空间的策略(Cilium 专有的 CRD: CiliumClusterwideNetworkPolicy, 字面意思, 集群范围的网络策略, 甚至可以进行 Node 级别的网络策略限制.)

Cilium 支持同时使用所有这些策略类型。不过,在使用多种策略类型时应小心谨慎,因为在多种策略类型中理解所允许流量的完整集合可能会造成混乱。如果不密切注意,可能会导致意外的策略行为。因此, 推荐在 Cilium 中, 使用后两种资源.

这次我们主要关注 CiliumNetworkPolicy 资源,因为它代表了标准 Kubernetes NetworkPolicy 功能的超集。

NetworkPolicy 资源

NetworkPolicy 资源是 Kubernetes 的标准资源(networking.k8s.io/v1 NetworkPolicy),可让您在 IP 地址或端口级别(OSI模型第 3 层或第 4 层)控制流量。NetworkPolicy 的功能包括:

  • 使用标签(label)匹配的 L3/L4 Ingress 和 Egress 策略
  • 集群外部端点使用 IP/CIDR 的 L3 IP/CIDR Ingress 和 Egress 策略
  • L4 TCP 和 ICMP 端口 Ingress 和 Egress 策略

🐾Warning

NetworkPolicy 不适用于主机网络命名空间。启用主机网络的 Pod 不受网络策略规则的影响。

网络策略无法阻止来自 localhost 或来自其驻留的节点的流量。

CiliumNetWorkPolicy 资源

CiliumNetworkPolicy 是标准 NetworkPolicy 的扩展。CiliumNetworkPolicy 扩展了标准 Kubernetes NetworkPolicy 资源的 L3/L4 功能,并增加了多项功能:

  • L7 HTTP 协议策略规则,将 Ingress 和 Egress 限制为特定的 HTTP 路径
  • 支持 DNS、Kafka 和 gRPC 等其他 L7 协议
  • 基于服务名称的内部集群通信 Egress 策略
  • 针对特殊实体使用实体匹配的 L3/L4 Ingress 和 Egress 策略
  • 使用 DNS FQDN 匹配的 L3 Ingress 和 Egress 策略

您可以在 Cilium 项目文档中找到针对几种常见用例的 CiliumNetworkPolicy YAML 清单的具体示例。

要读取网络策略的 YAML 定义并预测它将允许和拒绝哪些流量可能比较困难,而且要使策略精确地达到你想要的效果也并非易事。幸运的是,networkpolicy.io 上的可视化策略编辑器能让这一切变得更容易。

Networkpolicy.io 可视化策略编辑器

NetworkPolicy.io 策略编辑器为您提供了探索和制定 L3 和 L4 网络策略的绝佳方式,它以图形方式描述了一个群集,并让您为所需的网络策略类型选择正确的策略元素。策略编辑器支持标准的 Kubernetes NetworkPolicy 和 CiliumNetworkPolicy 资源。

截图如下:

Networkpolicy.io

在顶部,有一个交互式服务地图可视化,您可以用它来创建新策略。绿线表示当前策略定义允许的流量,红线表示拒绝的流量。您可以使用交互式服务地图用户界面配置针对群集内部端点或群集外部端点的入口和出口策略。

左下方是与上述服务地图描述相匹配的网络策略只读 YAML 描述。你可以选择查看标准的 Kubernetes NetworkPolicy 规范或 CiliumNetworkPolicy 规范。你还可以从这里下载策略,用 kubectl 将其应用到你的群集。你还可以上传两种格式的现有策略定义,策略编辑器会更新可视化服务地图表示法,以显示其工作原理。在服务地图用户界面中可视化策略的作用有助于确保策略规则按预期运行。您将有机会在本节后面的实验室中亲自试用 NetworkPolicy 编辑器。

在右下角,编辑器提供了一个教程界面,其中包含了一些常见的情况,可以帮助你思考如何制定策略。您还可以使用该区域上传 Hubble 流量,并根据 Hubble 观察到的情况生成网络策略。

实战

假设这样一个场景:

Kubernetes 集群有多个 NameSpace, 每一个 NameSpace 代表一个租户, 这些租户需要实现租户隔离, 即: 相互之间不可访问. 但是每个租户都允许:

  1. 来自 Ingress 的流量
  2. 来自互联网的流量
  3. 来自监控的抓取

那么策略应该如何设置?

允许来自 Ingress 的流量

NetWorkPolicy: allow-from-ingress

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-ingress
spec:ingress:- from:- namespaceSelector:matchLabels:policy-group: ingresspodSelector: {}policyTypes:- Ingress

说明如下:

  • 通过 labels 匹配的 Ingress 所在的 NameSpace, 所以需要确保 Ingress 所在的 NameSpace 打上了 policy-group: ingress 的标签.

策略可视化效果如下:

allow-from-ingress

允许来自互联网的流量

🐾Warning

出于安全考虑, 租户 NameSpace 应该只接收来自 Ingress 的业务流量, 而不应该直接允许来自互联网的流量. 本人建议不要启用这条策略.

NetworkPolicy: allow-from-outside

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: untitled-policy
spec:podSelector: {}ingress:- from:- ipBlock:cidr: 0.0.0.0/0

说明如下:

  • cidr 按需调整.

策略可视化效果如下:

allow-from-outside

允许来自监控的流量

NetworkPolicy: allow-from-monitoring

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-from-monitoring
spec:ingress:- from:- namespaceSelector:matchLabels:policy-group: monitoringpodSelector: {}policyTypes:- Ingress

说明如下:

  • 通过 labels 匹配的 Ingress 所在的 NameSpace, 所以需要确保 Ingress 所在的 NameSpace 打上了 policy-group: monitoring 的标签.

策略可视化效果如下:

allow-from-monitoring

允许同一 NameSpace 的流量

NetworkPolicy: allow-same-namespace

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: allow-same-namespace
spec:podSelector:ingress:- from:- podSelector: {}

策略可视化效果如下:

allow-same-namespace

合起来

把上面的都合起来, 具体如下:

NetworkPolicy: tenant-isolation

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: allow-same-namespace
spec:podSelector: {}ingress:- from:- podSelector: {}- from:- namespaceSelector:matchLabels:policy-group: ingress- from:- ipBlock:cidr: 0.0.0.0/0- from:- namespaceSelector:matchLabels:policy-group: monitoring- from:- podSelector: {}policyTypes:- Ingress

转换为 CiliumNetworkPolicy, 内容如下:

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:name: allow-same-namespace
spec:endpointSelector: {}ingress:- fromEndpoints:- {}- fromEndpoints:- matchLabels:io.kubernetes.pod.namespace.labels.policy-group: ingress- fromEndpoints:- matchLabels:io.kubernetes.pod.namespace.labels.policy-group: monitoring- fromEntities:- world

策略可视化效果如下:

tenant-isolation

总结

今天我们进入 Cilium 安全相关主题, 介绍 Kubernetes 网络策略以及 CiliumNetworkPolicies 额外支持的内容。介绍了一款好用的可视化 NetworkPolicy 编辑器: <networkpolicy.io>. 同时通过一个实用的"租户隔离"网络策略需求来进行演示.

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【并发专题】单例模式的线程安全(进阶理解篇)

目录 背景前置知识类加载运行全过程 单例模式的实现方式一、饿汉式基本介绍源码分析 二、懒汉式基本介绍源码分析改进 三、懒汉式单例终极解决方案&#xff08;静态内部类&#xff09;&#xff08;推荐使用方案&#xff09;基本介绍源码分析 感谢 背景 最近学习了JVM之后&…

解决SVN或GIT忽略提交文件的问题

背景 使用IDEA 的SVN插件提交文件是总是会提交一些不需要提交的文件; 我们可以通过一些简单设置忽略这些文件。 git 在项目根目录新建文本文件&#xff0c;修改后缀为.gitignore 文件中添加内容 *.iml .project .gradle/ .idea/ target/ build/ .vscode/ .settings/ .facto…

Python 开发工具 Pycharm —— 使用技巧Lv.2

pydoc是python自带的一个文档生成工具&#xff0c;使用pydoc可以很方便的查看类和方法结构 本文主要介绍&#xff1a;1.查看文档的方法、2.html文档说明、3.注释方法、 一、查看文档的方法 **方法1&#xff1a;**启动本地服务&#xff0c;在web上查看文档 命令【python3 -m…

Mac系统下使用远程桌面连接Windows系统

一、远程桌面工具 Microsoft Remote Desktop 二、下载地址 https://go.microsoft.com/fwlink/?linkid868963 三、下载并安装 四、添加远程PC PC name:云服务器IP。 User account: 添加系统用户 PC name&#xff1a;远程桌面 IP 地址User account&#xff1a;可以选择是…

【iOS】多线程 锁问题总结

文章目录 前言1. 你理解的多线程优点缺点 2. atomic 和 nonatomic 的区别及其作用3. GCD的队列类型 - 三种队列类型4. GCD的死锁问题线程死锁的四个必要条件 5. 多线程之间的区别和联系6. 进程和线程&#xff1f;进程间的通信方式线程间的通信方式 6. iOS的线程安全手段如何保证…

Matlab修改文本编码格式为UTF-8

一、修改文本编码格式 Matlab默认使用GBK编码格式&#xff0c;当代码中有中文注释时&#xff0c;注释显示乱码。 修改配置文件(安装目录下的bin目录有个lcdata.xml)&#xff0c;如下&#xff1a; 1. 删除 2. 修改 < encoding name”UTF-8”> < encoding_alias nam…

postgresql 使用之 存储架构 触摸真实数据的存储结构以及组织形式,存入数据库的数据原来在这里

存储架构 ​专栏内容&#xff1a; postgresql内核源码分析 手写数据库toadb 并发编程 个人主页&#xff1a;我的主页 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 概述 postgresql 数据库服务运行时&#xff0c;数据在磁…

kafka-保证数据不重复-生产者开启幂等性和事务的作用?

1. 生产者开启幂等性为什么能去重&#xff1f; 1.1 场景 适用于消息在写入到服务器日志后&#xff0c;由于网络故障&#xff0c;生产者没有及时收到服务端的ACK消息&#xff0c;生产者误以为消息没有持久化到服务端&#xff0c;导致生产者重复发送该消息&#xff0c;造成了消…

常见监控网络链路和网络设备的方法

网络监控主要包括网络链路监控和网络设备监控&#xff0c;通常系统运维人员会比较关注。 一、网络链路监控 网络链路监控主要包含三个部分&#xff0c;网络连通性、网络质量、网络流量。 连通性和质量的监控手段非常简单&#xff0c;就是在链路一侧部署探针&#xff0c;去探…

二、点亮LED灯

1. 原理 想要让一个LED灯亮&#xff0c;那么就要给其供电&#xff0c;使得有电流通过 与小时候玩的一节7号电池和普通小灯泡是一个道理 2. 查看ESP32开发板电路图 通过查看电路图&#xff0c;来确定开发板上的LED等的与MCU的引脚链接方式 查看上图我们知道&#xff0c;GPIO2这…

Mac应用程序无法打开或文件损坏的处理方法

1. 打开系统偏好设置界面&#xff0c;进入安全性与隐私&#xff0c;如下图所示&#xff1a; 2. 点按左下角的锁头图标&#xff0c;解锁更改权限 3. 将允许从以下位置下载的应用&#xff0c;更改为 “ 任何来源 ” &#xff0c;然后再打开应用即可 有朋友就说了&#xff0c;我这…

Ubuntu 23.04 作为系统盘的体验和使用感受

1.为啥主系统装了Ubuntu 由于公司发电脑了&#xff0c;我自己也有一台台式电脑&#xff0c;然后也想去折腾一下Ubuntu&#xff0c;就把自己的笔记本装成Ubuntu系统了&#xff0c; 我使用的是23.04的桌面版&#xff0c;带图形化界面的。我准备换回Windows 11了&#xff08;因为…

06 Ubuntu22.04上的miniconda3安装、深度学习常用环境配置

下载脚本 我依然是在清华镜像当中寻找的脚本。这里找脚本真的十分方便&#xff0c;我十分推荐。 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh 下载十分快速&#xff0c;10秒解决问题 运行miniconda3安装脚本 赋予执…

Java循环:探索迭代的世界

文章目录 1. for循环2. while循环3. do-while循环总结 循环是编程中的重要概念&#xff0c;它允许我们重复执行特定的代码块&#xff0c;帮助我们简化复杂的任务和提高代码的效率。在Java中&#xff0c;循环有多种形式&#xff0c;包括for循环、while循环和do-while循环。本篇博…

PHP-简单项目引起的大麻烦--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页小插曲小插曲完了么&#xff1f;必要的项目知识PHPThinkPHPThinkPHP的MVCThinkTemplateThinkPHP 6和ThinkPHP 5 phpStudy 设置导数据库展示页面数据库表结构项目目录如图…

Java on Azure Tooling 6月更新|标准消费和专用计划及本地存储账户(Azurite)支持

作者&#xff1a;Jialuo Gan - Program Manager, Developer Division at Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎阅读 Java on Azure 工具的六月更新。在本次更新中&#xff0c;我们将介绍 Azure Spring Apps 标准消费和专用计划支持以及本地存储账户&…

后端进阶之路——万字总结Spring Security与数据库集成实践(五)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

【Excel】记录Match和Index函数的用法

最近一直用到的两个处理EXCEL表格数据的函数向大家介绍一下&#xff0c;写这篇博文的目的也是为了记录免得自己忘记了&#xff0c;嘻嘻。 先上百度的链接 Match函数的用法介绍&#xff1a;https://jingyan.baidu.com/article/2fb0ba40b4933941f3ec5f71.html 小结&#xff1a;…

Sql server 2005 卸载之后重新安装

Sql server 2005 卸载之后重新安装 Sql sercer 2005在重新安装之前先要进行卸载操作&#xff0c;由于Sql sercer 2005组件都是分散的&#xff0c;所以卸载时要找到对应的位置一个一个卸载&#xff0c;不卸载干净的情况下再次安装时会出现很多问题&#xff0c;导致安装失败。这…

【前瞻】视频技术的发展趋势讨论以及应用场景

视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期&#xff0c;电视技术的发明和普及促进了视频技术的进一步发展。 1&#xff09;数字化&#xff1a;数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽&#xff0c;可以更快地…