• 1 前置条件
  • 2 控制范围
  • 3 隔离类型
  • 4 如何识别
  • 5 主要字段
  • 6 案例演示

前置条件

网络策略通过网络插件来实现。 要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。 创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的。那么如何查看我们的集群中是否有这个资源呢?如果你使用的CNI网络查件是Flannel, 是不支持的, Calico是支持的.

检查API版本兼容性
]# kubectl api-versions | grep networking.k8s.io
networking.k8s.io/v1
]# kubectl api-resources | grep -i networkpolicy
globalnetworkpolicies                          crd.projectcalico.org/v1               false        GlobalNetworkPolicy
networkpolicies                                crd.projectcalico.org/v1               true         NetworkPolicy
networkpolicies                   netpol       networking.k8s.io/v1                   true         NetworkPolicy

在这里插入图片描述
下面我们简单创建一个networkpolicy资源来检查下是否能正常使用.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-policy
spec:podSelector: {}policyTypes:- Ingress]# kubectl apply -f networkpolicy_functest.yaml
]# kubectl get networkpolicy   #可以看到创建成功了

在这里插入图片描述

控制范围

OSI 第 3 层或第 4 层. 如果你想在7层控制流量,可以考虑使用istio,后面我会专门演示istio的使用案例

隔离类型

  1. 出口的隔离 policyTypes: “Egress”
  2. 入口的隔离 policyTypes: “Ingress”

如何识别

   Pod 可以与之通信的实体是通过如下三个标识符的组合来辩识的:

  • 其他被允许的 Pod(例外:Pod 无法阻塞对自身的访问)
  • 被允许的名字空间
  • IP 组块(例外:与 Pod 运行所在的节点的通信总是被允许的, 无论 Pod 或节点的 IP 地址)

主要字段

apiVersion : 必须字段,不同版本可能group和version有所差别,通过explain命令可以查看当前k8s版本支持的apiVersion,如下图所示,我的k8s版本是1.28,所以他的networkpolicy 接口的apiVersion应该是 networking.k8s.io/v1
在这里插入图片描述

kind : 必须字段, 填NetworkPolicy
metadata : 必须字段,需要指定一些元数据,例如name
spec : 包含了在一个名字空间中定义特定网络策略所需的所有信息
podSelector : 对该策略所适用的一组 Pod 进行选择。示例中的策略选择带有 “role=db” 标签的 Pod。 空的 podSelector 选择名字空间下的所有 Pod。
policyTypes : 包含 Ingress 或 Egress 或两者兼具。policyTypes 字段表示给定的策略是应用于进入所选 Pod 的入站流量还是来自所选 Pod 的出站流量,或两者兼有。 如果 NetworkPolicy 未指定 policyTypes 则默认情况下始终设置 Ingress; 如果 NetworkPolicy 有任何出口规则的话则设置 Egress。
ingress : 每个 NetworkPolicy 可包含一个 ingress 规则的白名单列表。 每个规则都允许同时匹配 from 和 ports 部分的流量。
egress : 每个 NetworkPolicy 可包含一个 egress 规则的白名单列表。 每个规则都允许匹配 to 和 ports 部分的流量。

下面我们来分析一个示例:

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该示例表达的是:1. 隔离 default 名字空间下 role=db 的 Pod 2. Ingress 规则)允许以下 Pod 连接到 default 名字空间下的带有 role=db 标签的所有 Pod 的 6379 TCP 端口:- default 名字空间下带有 role=frontend 标签的所有 Pod- 带有 project=myproject 标签的所有名字空间中的 Pod- 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 规则)允许 default 名字空间中任何带有标签 role=db 的 Pod 到 CIDR 10.0.0.0/24 下 5978 TCP 端口的连接。

## 案例演示
下面我来演示一个案例. 我已经安装好了一个k8s集群 版本是1.28的, 而且部署好了monitoring. 我们就简单的拿grafana来举个例子, grafana我开放了两种访问方式,
一种是4层,通过NodePort方式,
一种是创建了Ingress七层访问,不过他们的最终链路都是一样的

在这里插入图片描述

可以看到不管是浏览器还是curl,都正常跳转和返回数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

可以看到目前我访问grafana页面正常,下面是我的ing和svc资源

在这里插入图片描述
在这里插入图片描述
下面我创建networkpolicy资源,yaml如下

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: grafana-network-policynamespace: monitoring
spec:podSelector:matchLabels:app.kubernetes.io/name: grafana policyTypes:- Ingressingress:- from:- ipBlock:cidr: 10.233.58.225/32ports:- protocol: TCPport: 80 
我来apply 一下

在这里插入图片描述

ok. 已经生效. 我们再次访问grafana测试下

在这里插入图片描述
在这里插入图片描述

为了验证下这个networkpolicy确实只作用于monitoring命名空间下的grafana这个pod上,我们进入Alert
Pod去nc 探测grafana svc的端口是否被阻断。

在这里插入图片描述

那我们进入Grafana的pod上去反向探测下alert端口。

在这里插入图片描述

可以看到,符合预期. 下面我们删除networkpolicy.在测试下

在这里插入图片描述

再次从alert pod内部去nc grafana的Svc:80端口。

在这里插入图片描述在这里插入图片描述

网页也恢复正常. 后面我会测试7层 service mesh相关的Istio案例.

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

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

相关文章

Linux:TCP协议

TCP是一个面向连接的、可靠的、基于字节流的传输层协议。文次我们会通过介绍TCP的报头并通过分析各字段的用途来进一步解释其核心特性:可靠传输: 有确认应答、超时重传、确保有序。流量控制和拥塞控制: 动态调节发送速率,防止丢包与拥塞。面向…

uniapp使用map打包app后自定义气泡不显示解决方法customCallout

前言:使用uniapp开发后在小程序可以正常显示,但是运行打包成App后就不显示了,其实这一块对于uniapp框架开发来说,是有系统性的bug,如果你再开发时使用的是vue文件进行,就会出现这个问题。解决方法&#xff…

【typenum】 22 类型级别二进制对数运算(Logarithm2)

一、源码 这段代码实现了一个类型级别的二进制对数运算系统 定义(type_operators.rs) /// A **type operator** for taking the integer binary logarithm of Self. /// /// The integer binary logarighm of n is the largest integer m such /// that …

golang 非error错误分类

1.应用级别,可recover这些 panic 一般是 逻辑或使用不当导致的运行时错误,Go 程序可以用 recover 捕获并继续运行:类型示例描述类型不一致atomic.Value 存不同类型 v.Store(100); v.Store("abc")panic: store of inconsistently ty…

【Ansible】变量与敏感数据管理:Vault加密与Facts采集详解

1. 变量Ansible利用变量存储可重复使用的值,可以简化项目的创建和维护,减少错误数量。1.1 变量名称由字符串组成,必须以字母开头,并且只能含有字母、数字和下划线,和其它编程语言很类似。1.2 常见变量要创建的用户要安…

ROS2下YOLO+Moveit+PCL机械臂自主避障抓取方案

整体运行架构 1.运行相机取像节点 . ./install/setup.bash ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:true 2.运行根据图像x,y获取z的service 基本操作记录: 创建python包,在src目录下 ros2 pkg create test_python_topic --bu…

快速入门Vue3——初体验

目录 前言 一、搭建环境 1.1、安装Node.js 1.2、安装Vite 二、项目创建 三、运行项目 四、集成Pinia 4.1、Pinia介绍 4.2、Pinia安装 五、集成VueUse 5.1、vueuse简介 5.2、vueuse安装 六、集成Vant 6.1、Vant简介 6.2、Vant安装 前言 本专栏主要介绍如何使用…

深入理解Kubernetes核心:标签与标签选择器实战解析

在管理 Kubernetes 集群时,随着 Pods、Services 等资源数量的增长,如何有效地组织和筛选它们,成为了一个核心问题。Kubernetes 为此提供了一个简单却极其强大的机制:标签(Labels)和标签选择器(L…

哈希和字符串哈希

哈希(Hash) Hash 表 Hash 表又称为散列表,一般由 Hash 函数(散列函数)与链表结构共同实现。与离散化思想类似,当我们要对若干复杂信息进行统计时,可以用 Hash 函数把这些复杂信息映射到一个容…

【Docker基础】Docker-Compose核心配置文件深度解析:从YAML语法到高级配置

目录 前言 1 YAML基础语法解析 1.1 YAML格式简介 1.2 Docker-compose中的YAML语法规则 1.3 YAML数据类型在Compose中的应用 2 docker-compose.yml文件结构剖析 2.1 基本文件结构 2.2 版本声明详解 3 services配置深度解析 3.1 服务定义基础 3.2 镜像与构建配置 3.3…

如何判断是否应该为了一个小功能而引入一个大体积的库

在软件开发中,判断是否应该为了一个看似微小的功能,而引入一个大体积的第三方库,是一项极其重要的、需要进行审慎的“投入产出比”分析的技术决策。这个决策,绝不能,仅仅基于“实现功能的便利性”,而必须&a…

相机定屏问题分析五:【跳帧异常】照片模式1x以上的焦段拍照之后定屏

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 相机定屏问题分析五:【跳帧异常】照片模式1x以上的焦段拍照之后定屏9573412 目录 一、问题背景 二…

Non-stationary Diffusion For Probabilistic Time Series Forecasting论文阅读笔记

Non-stationary Diffusion For Probabilistic Time Series Forecasting 摘要 时间序列数据受到潜在的物理动力学和外部影响,其不确定性通常随时间而变化。现有的去噪扩散概率模型(DDPMs)受到加性噪声模型(ANM)的恒定方…

解决Docker 无法连接到官方镜像仓库

这个错误: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)表示 Docker 无法连接到官方镜像仓库 registry-1.docker…

解决RAGFlow启动时Elasticsearch容器权限错误的技术指南

文章目录 问题现象 根本原因分析 解决方案步骤 1. 定位宿主机数据目录 2. 修复目录权限 3. 验证权限状态 4. 重启服务 5. 检查启动状态 永久解决方案:优化Docker Compose配置 高级故障排除 技术原理 问题现象 在启动RAGFlow项目时,执行 docker logs ragflow-es-01 发现Elast…

【C++高阶六】哈希与哈希表

【C高阶六】哈希与哈希表1.什么是哈希?2.unordered系列容器3.哈希表3.1将key与存储位置建立映射关系3.1.1直接定址法3.1.2除留余数法(产生哈希冲突)3.2解决哈希冲突的方法3.2.1闭散列(开放定址法)3.3.2开散列&#xff…

Vue 3 +Ant Design Vue 父容器样式不影响子级,隔离

公共样式文件 common.scss.zz-ant-status-bar {div {font-size: 12px;padding: 0 8px;} }页面代码<div class"zz-ant-status-bar"><a-row><a-col :span"6" ><a-progress :percent"progress.percent" size"small"…

k8s 简介及部署方法以及各方面应用

Kubernetes 简介及部署方法Kubernetes&#xff08;简称 K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、扩展、管理和运维。它由 Google 基于内部的 Borg 系统经验开发&#xff0c;2014 年开源后由云原生计算基金会&#xff08;CNCF&#xf…

Class A 包含字段 x Class B 也包含字段 x,如果判断List<A> lista 和 List<B> listb 有相同的 x?

要判断两个不同类型的对象列表 List<A> 和 List<B> 是否包含相同的 x字段值&#xff08;即两个列表中至少有一个 x是相同的&#xff09;&#xff0c;你可以使用 Java 8 的 Stream API 来实现。import java.util.List; import java.util.Set; import java.util.stre…

SpringBoot整合Camunda工作流

什么是工作流&#xff1f;概述 工作流是将一组任务组织起来以完成某个经营过程&#xff1a;定义了任务的触发顺序和触发条件&#xff0c;每个任务可以由一个或多个软件系统完成&#xff0c;也可以由一个或一组人完成&#xff0c;还可以由一个或多个人与软件系统协作完成&#x…