当前位置: 首页 > news >正文

eks节点的网络策略配置机制解析

参考链接

  • vpc-cni网络策略最佳实践,https://aws.github.io/aws-eks-best-practices/security/docs/network/#additional-resources
  • vpc cni网络策略faq,https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/network-policy-faq.md

aws-cni插件pod的容器目录如下

在这里插入图片描述

aws-vpc-cni-init

首先通过aws-vpc-cni-init容器进行初始化,该容器是个一次性任务,具体的行为如下

  • 通过IMDS获取到MAC地址,然后用MAC地址查询到主网卡
  • 配置主网卡的参数
  • 配置ipv6相关设置

aws-node

而aws-node容器的启动脚本为aws-vpc-cni,由于当cni二进制文件安装到/opt/cni/bin并且配置文件就绪后kubelet会认为cni插件就绪,对于vpc-cni来说则包括如下两部分:

  • cni二进制文件和配置文件
  • aws-k8s-agent守护进程(ipam控制器)

vpc-cni会确保aws-k8s-agent守护进程(ipam控制器)启动后再拷贝cni二进制文件,在aws-vpc-cni的启动脚本中会启动并等待ipamd启动,此时进程阻塞因此aws-node容器会继续保持运行,而ipamd则被当作ds进程在每个节点上运行。

在aws-node容器中始终会通过grpc-health-probe进行健康和就绪检查

exec [/app/grpc-health-probe -addr=:50051 -connect-timeout=5s -rpc-timeout=5s]

此外ipamd会在61678端口暴露/metrics路径指标,可以通过安装cni-metrics-helper将这部分指标发布到cloudwatch中

# 192.168.2.119为aws-node的pod地址
$ curl 192.168.2.119:61678/metrics

通过ipamd暴露的路径还可以获取当前分配ip的情况

// get enis info
# curl http://localhost:61679/v1/enis | python -m json.tool
// get IP assignment info
# curl http://localhost:61679/v1/pods | python -m json.tool

其他的introspect路径包括

func (c *IPAMContext) setupIntrospectionServer() *http.Server {serverFunctions := map[string]func(w http.ResponseWriter, r *http.Request){"/v1/enis":                      eniV1RequestHandler(c),"/v1/eni-configs":               eniConfigRequestHandler(c),"/v1/networkutils-env-settings": networkEnvV1RequestHandler(),"/v1/ipamd-env-settings":        ipamdEnvV1RequestHandler(),}

routed-eni-cni-plugin

在这里插入图片描述

真正被kubelet调用进行pod网络环境初始化时,执行的cni二进制文件为routed-eni-cni-plugin,会分别和ipamd和networkpolicy-agent通过rpc通信方式交互,对应的日志为/var/log/aws-routed-eni/plugin.log

ipamdAddress = "127.0.0.1:50051"
npAgentAddress = "127.0.0.1:50052"

cni二进制文件主要通过两个方法和ipamd交互,https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/cni-proposal.md

// amazon-vpc-cni-k8s/amazon-vpc-cni-k8s-master/cmd/routed-eni-cni-plugin/cni.go
type CNIBackendClient interface {AddNetwork(ctx context.Context, in *AddNetworkRequest, opts ...grpc.CallOption) (*AddNetworkReply, error)DelNetwork(ctx context.Context, in *DelNetworkRequest, opts ...grpc.CallOption) (*DelNetworkReply, error)
}// 例如,如下分配ip地址的主要逻辑
conn, err := grpcClient.Dial(ipamdAddress, grpc.WithTransportCredentials(insecure.NewCredentials()))
c := rpcClient.NewCNIBackendClient(conn)
r, err := c.AddNetwork(context.Background(),...)

如果是严格网络策略模式,则cni二进制文件会和np-node-agent通信,为新的pod强制添加网络策略

if utils.IsStrictMode(r.NetworkPolicyMode) {// Set up a connection to the network policy agentnpConn, err := grpcClient.Dial(npAgentAddress, grpc.WithTransportCredentials(insecure.NewCredentials()))npc := rpcClient.NewNPBackendClient(npConn)npr, err := npc.EnforceNpToPod(context.Background(),

np-node-agent

网络策略涉及到的组件包括如下

  • Network Policy Controller控制器会自动安装在 EKS Control Plane 上,监视 NetworkPolicy 对象并发送指令到 Node Agent

    When you create a new Amazon EKS cluster, the network policy controller is automatically installed on the EKS control plane. It actively monitors the creation of network policies within your cluster and reconciles policy endpoints. Subsequently, the controller instructs the node agent to create or update eBPF programs on the node by publishing pod information through the policy endpoints

  • Network Policy Node Agent,通过创建 eBPF 程序在节点上实现网络策略

  • AWS eBPF SDK for Go,提供了一个接口,用于与节点上的 eBPF 程序进行交互

  • VPC Resource Controller,管理Kubernetes Pods的分支和中继网络接口

当需要涉及到网络策略相关操作时(例如创建netpl资源),np-controller会解析配置的网络策略,并通过自定义 CRD (PolicyEndpoints在np-controller安装的时候自动安装) 资源发布解析的endpoints。np-node-agent获取PolicyEndpoint资源,并通过附加到pod主Veth 接口的 eBPF 探针来执行策略。对应的日志为/var/log/aws-routed-eninetwork-policy-agent.log

np-node-agent会将主机的/sys/fs/bpf文件系统挂载在卷bpf-pin-path

/sys/fs/bpf from bpf-pin-path (rw)

np-node-agent默认的启动参数为

Args:                                                        --enable-ipv6=false                                        --enable-network-policy=false                               --enable-cloudwatch-logs=false                             --enable-policy-event-logs=false                           --log-file=/var/log/aws-routed-eni/network-policy-agent.log--metrics-bind-addr=:8162                                  --health-probe-bind-addr=:8163                             --conntrack-cache-cleanup-period=300                       

np-node-agent启动日志中的主要逻辑如下

  • 等待controller就绪

  • 设置ConntrackTTL清理时间cleanupPeriod为300

  • 校验并安装bpf程序到/opt/cni/bin/

    $ ls -al /opt/cni/bin| grep bpf
    -rw-r--r-- 1 root root    27136 Oct 23 10:51 tc.v4egress.bpf.o
    -rw-r--r-- 1 root root    27360 Oct 23 10:51 tc.v4ingress.bpf.o
    -rw-r--r-- 1 root root     3384 Oct 23 10:51 v4events.bpf.o
    
  • 安装aws-eks-na-cli命令到/opt/cni/bin/

  • 设置全局默认maps和加载probe

  • 初始化Conntrack client

  • 开启rpc server监听127.0.0.1:50052

  • 启动metrics server

如果收到了来自np-controller的指令,则np-node-agent会开始为pod创建网络策略,

  • 如果没开np直接返回success

    // EnforceNpToPod processes CNI Enforce NP network request
    func (s *server) EnforceNpToPod(ctx context.Context, in *rpc.EnforceNpRequest) (*rpc.EnforceNpReply, error) {if s.policyReconciler.GeteBPFClient() == nil {s.log.Info("Network policy is disabled, returning success")
    
  • 同一个节点上的pod副本会使用同样的eBPF firewall maps

    if s.policyReconciler.ArePoliciesAvailableInLocalCache(podIdentifier) && isMapUpdateRequired {//Derive Ingress and Egress Firewall Rules and Update the relevant eBPF mapsingressRules, egressRules, _ :=s.policyReconciler.DeriveFireWallRulesPerPodIdentifier(podIdentifier, in.K8S_POD_NAMESPACE)err = s.policyReconciler.GeteBPFClient().UpdateEbpfMaps(podIdentifier, ingressRules, egressRules)
    

由于vpc-cni插件会在节点上安装eBPF SDK集合,因此可以使用 eBPF SDK 工具(aws-eks-na-cli)来识别网络策略的问题

  • aws-eks-na-cli命令只有在开启--enable-network-policy=true后才会安装到节点
$ sudo  /opt/cni/bin/aws-eks-na-cli ebpf -h
Dump all ebpf related dataUsage:aws-eks-na-cli ebpf [flags]aws-eks-na-cli ebpf [command]Aliases:ebpf, ebpfAvailable Commands:dump-maps       Dump all ebpf maps related dataloaded-ebpfdata Dump all ebpf related datamaps            Dump all ebpf maps related dataprogs           Dump all ebpf program related data

具体的用法涉及到ebpf sdk的组件和api调用,需要进一步学习

相关文章:

eks节点的网络策略配置机制解析

参考链接 vpc-cni网络策略最佳实践,https://aws.github.io/aws-eks-best-practices/security/docs/network/#additional-resourcesvpc cni网络策略faq,https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/…...

【C】用c写贪吃蛇

1.输入正确的账号密码及其用户名,登录成功进入贪吃蛇游戏界面, 2.随机生成蛇头★、食物▲的位置(x,y),并使用□打印地图 3.使用w s a d按键,完成蛇头的上下左右移动 4.蛇头碰撞到食物后,吃下食物变成蛇身的一部分●…...

qt QLineEdit详解

一、概述 QLineEdit 是 Qt 框架中用于创建单行文本输入框的类。它非常适合用于接收用户输入,例如用户名、密码或其他简单的文本信息。它提供了许多有用的编辑功能,支持多种输入模式和文本限制,并支持撤销、重做、剪切、粘贴以及拖放等功能。…...

DevEco Studio的使用 习题答案<HarmonyOS第一课>

一、判断题 1. 如果代码中涉及到一些网络、数据库、传感器等功能的开发,均可使用预览器进行预览。 正确(True)错误(False) 错误(False)回答正确 2. module.json5文件中的deviceTypes字段中,配置了phone,tablet,2in1等多种设备类型,才能进行多设备预览。 正确(True)…...

鸿蒙网络编程系列36-固定包头可变包体解决TCP粘包问题

1. TCP数据传输粘包简介 在本系列的第6篇文章《鸿蒙网络编程系列6-TCP数据粘包表现及原因分析》中,我们演示了TCP数据粘包的表现,如图所示: 随后解释了粘包背后的可能原因,并给出了解决TCP传输粘包问题的两种思路,第一…...

【华为路由】OSPF多区域配置

网络拓扑 设备接口地址 设备 端口 IP地址 RTA Loopback 0 1.1.1.1/32 G0/0/0 10.1.1.1/24 RTB Loopback 0 2.2.2.2/32 G0/0/0 10.1.1.2/24 G0/0/1 10.1.2.1/24 RTC Loopback 0 3.3.3.3/32 G0/0/0 10.1.2.2/24 G0/0/1 10.1.3.1/24 RTD Loopback 0 4.4.4…...

【C++初阶】一文讲通C++内存管理

文章目录 1. C/C内存分布2. C语言中动态内存管理方式3. C内存管理方式3. 1 new/delete操作内置类型3. 2 new和delete操作自定义类型 4. new与delete的原理4. 1 operator new与operator delete函数4. 2 内置类型4. 3 自定义类型 5. 定位new表达式(placement-new)6. malloc/free和…...

Vue学习笔记(九、简易计算器)

在这个案例中,我们使用v-model分别双向绑定了n1、n2操作数,op操作选项和result计算结果,同时用绑定了等号按钮事件。 由于是双向绑定,当input和select通过外部输入内容时,vm内部的数值也会改变,所以calcula…...

Maven 不同环境灵活构建

需求: 使用 Maven根据不同的构建环境(如开发、测试、生产)来定义不同的配置,实现灵活的构建管理。 需要Demo项目的可以参考:我的demo项目 一、项目分层 一般的初创项目不会有特别多的配置文件,所以使用 spring.profile…...

第三十篇:TCP连接断开过程,从底层说明白,TCP系列五

上一篇《第二十九篇:图解TCP三次握手,看过不会忘,从底层说清楚,TCP系列四》说了TCP的三次握手,接下来我将讲解TCP四次挥手。 既然有连接就有断开,谈到这里,有的同学可能会想,不就是…...

代码随想录算法训练营第七天| 哈希表理论基础 454.四数相加II 383.赎金信 15.三数之和 18.四数之和

454. 四数相加 II 题目 给定四个包含整数的数组 A, B, C, D,计算有多少个元组 (i, j, k, l) 使得 A[i] B[j] C[k] D[l] 0。 解题思路 先计算数组 A 和 B 的所有组合和,并存入哈希表 map 中,键为组合和,值为该和出现的次数…...

搜维尔科技:Manus新品发布Metagloves Pro专业版,专为高精度需求的客户打造,尤其是人形机器人产业与人机工效研究使用

manus新品发布Metagloves Pro专业版,专为高精度需求的客户打造,尤其是人形机器人产业与人机工效研究使用 搜维尔科技:manus新品发布Metagloves Pro专业版,专为高精度需求的客户打造,尤其是人形机器人产业与人机工效研究…...

Spring Boot实现的动态化酒店住宿管理系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理酒店客房管理系统的相关信息成为必然。开发…...

数字IC后端实现Innovus |给各种IP子模块添加port buffer和antenna diode万能脚本

我们之前分享过在hierarchical flow后端实现中为了确保顶层flatten时timing signoff和physical signoff看到的情况和模块级看到的情况一致,我们会在模块io port添加io port buffer(主要是timing,antenna一致性)。实际上在芯片级我…...

反向代理服务器---NGINX

1.NGINX NGINX(发音为“engine-x”)是一个开源的高性能HTTP服务器和反向代理服务器。它被广泛用于互联网应用程序的加速、负载均衡和高可用性的配置。NGINX具有低内存消耗、高并发能力和卓越的性能,能够处理大量并发连接和高流量的网络流量。…...

unity3d————场景管理类SceneManager

常用API SceneManager.LoadScene(string sceneName) 加载名为 sceneName 的场景。SceneManager.LoadScene(int sceneBuildIndex) 根据场景在Build设置中的索引加载场景。SceneManager.GetActiveScene() 获取当前活动的场景。SceneManager.GetSceneByName(string name) 根据名称…...

鹅厂面试官:Transformer 为何需要位置编码?

最近这一两周看到不少互联网公司都已经开始秋招发放Offer。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球…...

MySQL数据库学习指南

一、数据库的库操作 1、创建数据库 2、删除数据库 3、查看数据库 4、选择数据库 5、修改数据库 6、数据库备份与恢复 7、数据库的权限管理 二、数据库的表操作 1、创建表 2、删除表 3、修改表 4、查看表的结构 5、查看表的数据 6、创建索引 7、删除索引 8、约束…...

算法刷题-小猫爬山

本题来源165. 小猫爬山 - AcWing题库 翰翰和达达饲养了 NN 只小猫&#xff0c;这天&#xff0c;小猫们要去爬山。 经历了千辛万苦&#xff0c;小猫们终于爬上了山顶&#xff0c;但是疲倦的它们再也不想徒步走下山了&#xff08;呜咕>_<&#xff09;。 翰翰和达达只好花…...

Maven项目管理工具-初始+环境配置

1. Maven的概念 1.1. 什么是Maven Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。 理想的项目构建&#xff1a;高度自动化&#xff0c;跨平台&#xff0c;可重用的组件&#xff0c;标准化的流程 maven能够自动下载依…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...