这是一篇关于k8s的网络策略配置说明

用户在使用k8s中,有对网络策略的配置需求,有时候希望不同的namespace之间不能互相访问,但是我们知道k8s中所有的pod之间都是可以互相访问的,这个时候就需要网络策略来帮助我们实现这个诉求,网络策略依赖于cni网络插件,不是所有的网络插件都支持网络策略,calico支持网络策略,而flannel不支持。

接下来我以一张图来说明k8s的networkpolicy资源的配置

整个图总接下来如下:

  1. 入口规则:

        仅允许 1.来自(from)命名空间(spec/ingress/from/namespaceSlecetor)下所有pod2. 策略所在命名空间下pod满足(spec/ingress/from/podSelector)3.ip段满足(spec/ingress/from/ipblock)的pod以什么协议访问本命名空间下的满足(spec/podSelector)的pod的某个端口或某个段的端口
    
  2. 出口规则:

     仅允许本命名空间下的满足(spec/podSelector)的pod去访问(to)1.命名空间(spec/ingress/from/namespaceSlecetor)下的所有pod 2.本命名空间满足(spec/ingress/from/podSelector)的pod3. ip段满足(spec/ingress/from/ipblock)的pod的某个端口或某个段的端口
    

下面是官方的一个例子,来帮助大家理解,具体的配置及意义

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-network-policynamespace: default
spec:podSelector:matchLabels:role: dbpolicyTypes:- Ingress- Egressingress:- from:- ipBlock:cidr: 172.17.0.0/16except:- 172.17.1.0/24- namespaceSelector:matchLabels:project: myproject- podSelector:matchLabels:role: frontendports:- protocol: TCPport: 6379egress:- to:- ipBlock:cidr: 10.0.0.0/24ports:- protocol: TCPport: 5978
  • 说明: 除非选择支持网络策略的网络解决方案,否则将上述示例发送到API服务器没有任何效果。

必需字段:与所有其他的 Kubernetes 配置一样,NetworkPolicy 需要 apiVersion、 kind 和 metadata 字段。关于配置文件操作的一般信息,请参考 使用 ConfigMap 配置容器, 和对象管理。

spec:NetworkPolicy 规约 中包含了在一个名字空间中定义特定网络策略所需的所有信息。

podSelector:每个 NetworkPolicy 都包括一个 podSelector,它对该策略所 适用的一组 Pod 进行选择。示例中的策略选择带有 “role=db” 标签的 Pod。 空的 podSelector 选择名字空间下的所有 Pod。

policyTypes: 每个 NetworkPolicy 都包含一个 policyTypes 列表,其中包含 Ingress 或 Egress 或两者兼具。policyTypes 字段表示给定的策略是应用于 进入所选 Pod 的入站流量还是来自所选 Pod 的出站流量,或两者兼有。 如果 NetworkPolicy 未指定 policyTypes 则默认情况下始终设置 Ingress; 如果 NetworkPolicy 有任何出口规则的话则设置 Egress。

ingress: 每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。 每个规则都允许同时匹配 from 和 ports 部分的流量。示例策略中包含一条 简单的规则: 它匹配某个特定端口,来自三个来源中的一个,第一个通过 ipBlock 指定,第二个通过 namespaceSelector 指定,第三个通过 podSelector 指定。

egress: 每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。 每个规则都允许匹配 to 和 port 部分的流量。该示例策略包含一条规则, 该规则将指定端口上的流量匹配到 10.0.0.0/24 中的任何目的地。

所以,该网络策略示例:

  1. 隔离 “default” 名字空间下 “role=db” 的 Pod (如果它们不是已经被隔离的话)。

  2. (Ingress 规则)允许以下 Pod 连接到 “default” 名字空间下的带有 “role=db” 标签的所有 Pod 的 6379 TCP 端口:

    1) "default" 名字空间下带有 "role=frontend" 标签的所有 Pod
    2)带有 "project=myproject" 标签的所有名字空间中的 Pod
    3)IP 地址范围为 172.17.0.0–172.17.0.255 和 172.17.2.0–172.17.255.255 (即,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)
    
  3. (Egress 规则)允许从带有 “role=db” 标签的名字空间下的任何 Pod 到 CIDR 10.0.0.0/24 下 5978 TCP 端口的连接。

参考:
https://kubernetes.io/zh/docs/concepts/services-networking/network-policies/
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/#networkpolicy-v1-networking-k8s-io

k8s network policy配置,看这篇就够了相关推荐

  1. NDK 环境配置看这篇就够了!

    JNI-Android Studio下的 NDK 环境配置 JNI与NDK的理解 JNI 什么是JNI呢? 为什么用JNI呢? 怎么学JNI呢? NDK 什么是NDK呢? 为什么用NDK呢? 怎么学N ...

  2. macOS 上的 Charles 配置看一篇就够了

    2021.11.9 更新,新增 iOS 模拟器抓取 Https 报文的配置方法. 文章目录 1. Charles 简介 2. Charles 工作原理 3. 组件介绍 4. macOS 代理设置 5. ...

  3. Docker入门实战看这篇就够了(最新详细以及踩过的坑)

    Docker入门实战看这篇就够了 前言 初识 是什么 容器与虚拟机 能干什么 去哪玩 安装 先决条件 查看自己的内核 安装所需的软件包(支持devicemapper存储类型) 设置镜像的仓库 设置yu ...

  4. [个人向]超快速了解微信小程序:看这篇就够了!(注册、语言、框架、配额等简要说明)

    [个人向]超快速了解微信小程序看这篇就够了+相关简要说明 本文精炼微信小程序开发文档相关内容,旨在对初次接触并准备开发小程序的童鞋(比如自己)提供一个快速了解攻略.其中包括注册相关.语言.框架模式.相 ...

  5. React入门看这篇就够了

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所 ...

  6. .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新手朋友),但是转念一想不如来点猛的(考虑到急性子的朋友),让你通过本文的学习就能快速的入门ASP.NET Core.既 ...

  7. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    园子里关于ASP.NET Core Web API的教程很多,但大多都是使用EF+Mysql或者EF+MSSQL的文章.甚至关于ASP.NET Core Web API中使用Dapper+Mysql组 ...

  8. ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了

    引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...

  9. Spring Cloud入门,看这篇就够了!

    点击▲关注 "中生代技术"   给公众号标星置顶 更多精彩 第一时间直达 概述 首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟. 什 ...

最新文章

  1. 如何去除 IDEA 中 xml 文件的屎黄色背景
  2. thinkphp5.0 cache数据缓存机制
  3. C#LeetCode刷题-设计
  4. pandas.Series.quantile
  5. python人工智能算法代码_python人工智能,分类例解
  6. python源码剖析_Python源码剖析
  7. lda数学八卦_[ LDA主题模型应用和改进组 ] 招募成员
  8. android 取消选中状态,Android:显示/隐藏偏好检查/取消选中其他CheckBoxPreference
  9. 使用scrcpy投屏——手机投屏到电脑
  10. 在 Excel 中对多行多列进行条件求和
  11. OpenGL法线贴图
  12. QAOA如何在NISQ处理器中展示应用级量子优势?
  13. BROP入门之 KCTF 2022 废土末世
  14. python查阅文献
  15. 深入浅出,一篇超棒的机器学习入门文章
  16. 如何安装svelte_svelte js框架介绍编译器
  17. PageUtils后端常用分页工具类
  18. 红外热成像传感器介绍
  19. Java 面试的“完美圣经”,有了这些还愁面试吗?
  20. 12个月的英语名称来历

热门文章

  1. 51单片机通过串口打印调试信息
  2. HTTPS 工作流程梳理
  3. 如何实现对数据的分类
  4. 现在分词和不定式都是可以做状语的,但二者有区别
  5. POJO,VO,entity,DTO,DAO的区别
  6. Latex希腊字母、特殊符号汇总表
  7. 有哪些项目使用jeecgboot做的_我复试完了:网络复试现场实录!还要做ppt?
  8. XMind for linux
  9. joomla+连接不上mysql_配置joomla数据库mysql
  10. HDFS白名单和黑名单机制