Cilium网络策略配置全解析,彻底搞懂Docker容器安全通信

【GitHub项目推荐--10个最佳开源Docker&Kubernetes安全扫描工具,提升容器安全性!】【转载】 Docker容器的轻量、可移植和可扩展特性为应用程序的开发和交付带来了巨大的便利,特别是在微服务架构应用上,是许多开发者和组织的首选。其中,容器本身的安全往往容易容易被忽略,下面内容主要推荐一些对保护Kubernetes集群和Docker容器有用的开源工具,有助于Docker 镜像的静态扫描、安全审计、加固 Kubernetes 集群和实现运行时安全性。Docker使用的是C/S架构,作为服务端的Docker Daemon会接收客户端通过CLI或者REST API发送的命令,并执行对容器的相应操作。 阅读详情

第一章:Cilium网络策略概述

Cilium 是一个基于 eBPF(extended Berkeley Packet Filter)技术的高性能容器网络和安全解决方案,广泛应用于 Kubernetes 环境中。它通过在内核层面实现细粒度的网络策略控制,提供强大的网络隔离与安全防护能力。Cilium 网络策略(CiliumNetworkPolicy)扩展了 Kubernetes 的原生 NetworkPolicy API,支持更丰富的匹配条件和更灵活的规则定义。

核心特性

  • 基于 eBPF 实现高效的数据路径处理,无需修改应用程序即可实现策略控制
  • 支持 L3/L4 和 L7 层级的策略规则,可精确控制 HTTP、gRPC、Kafka 等协议流量
  • 与 Kubernetes 深度集成,使用 CRD(Custom Resource Definition)定义安全策略

策略示例

以下是一个 CiliumNetworkPolicy 的 YAML 示例,用于允许特定命名空间中的前端服务访问后端服务的 HTTP 接口:
# 定义 CiliumNetworkPolicy,限制对 backend 服务的访问
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-http-to-backend
  namespace: default
spec:
  endpointSelector:
    matchLabels:
      app: backend
  ingress:
    - fromEndpoints:
        - matchLabels:
            app: frontend
      toPorts:
        - ports:
            - port: "80"
              protocol: TCP
          rules:
            http:
              - method: "GET"
                path: "/health"
该策略表示:仅允许带有 app: frontend 标签的 Pod 向 app: backend 的 80 端口发起 GET 请求访问 /health 路径,其他流量将被默认拒绝。
策略执行流程

graph TD
    A[Pod 发起请求] --> B{eBPF 规则匹配}
    B -->|匹配允许规则| C[允许流量通过]
    B -->|无匹配或拒绝规则| D[丢弃数据包]
    C --> E[进入目标 Pod]
    D --> F[记录日志(可选)]
组件作用
eBPF 程序在内核中执行策略决策,实现高性能过滤
Cilium Agent (cilium-agent)负责解析策略并加载 eBPF 字节码到内核

第二章:Cilium核心架构与工作原理

2.1 Cilium底层数据平面解析

Cilium 的数据平面基于 eBPF 技术构建,实现了高性能、可编程的网络与安全功能。其核心在于将策略执行点下沉到内核层,避免用户态与内核态频繁交互。
数据路径机制
网络事件通过挂载在 tc(traffic control)和 XDP(eXpress Data Path)的 eBPF 程序处理。XDP 在网卡接收阶段即进行快速处理,适用于 DDoS 防护与负载均衡。
SEC("xdp") 
int xdp_prog(struct xdp_md *ctx) {
    void *data = (void *)(long)ctx->data;
    void *data_end = (void *)(long)ctx->data_end;
    struct ethhdr *eth = data;
    if (eth + 1 > data_end) return XDP_DROP;
    return XDP_PASS;
}
上述代码定义了一个基础 XDP 程序,验证以太网头完整性。`ctx->data` 指向包数据起始位置,`data_end` 提供边界检查,防止越界访问。
策略执行引擎
Cilium 使用 map 结构在用户空间与内核间共享策略规则,常见类型包括:
  • 哈希表(BPF_MAP_TYPE_HASH):存储端点标识与安全策略
  • 数组(BPF_MAP_TYPE_ARRAY):快速索引接口状态
  • LPM Trie:实现 CIDR 路由匹配

2.2 基于eBPF的流量拦截机制

核心原理与架构设计
eBPF(extended Berkeley Packet Filter)允许在内核中安全执行沙箱程序,无需修改内核代码即可实现网络流量的动态拦截。通过将用户编写的eBPF程序挂载到套接字、TC(Traffic Control)或XDP层级,可在数据包进入协议栈早期阶段进行过滤与重定向。
典型代码实现
SEC("socket1")
int intercept_packet(struct __sk_buff *skb) {
    void *data = (void *)(long)skb->data;
    void *data_end = (void *)(long)skb->data_end;

    struct eth_hdr *eth = data;
    if (data + sizeof(*eth) > data_end)
        return 0;

    if (eth->h_proto == htons(ETH_P_IP)) {
        bpf_printk("IPv4 packet intercepted\n");
        return -1; // 拦截并丢弃
    }
    return 0; // 放行
}
该程序挂载至socket类型钩子,对所有关联套接字的数据包进行检测。当识别为IPv4流量时,通过 bpf_printk输出日志,并返回-1实现丢包操作。
关键优势对比
机制性能开销部署灵活性拦截粒度
iptables中高连接级
eBPF低极高数据包级

2.3 容器网络标识与身份安全模型

在容器化环境中,网络标识与身份安全是保障服务间通信可信的基础。传统IP地址标识方式难以适应动态编排场景,因此现代容器平台采用基于身份的网络模型,将身份与网络策略深度绑定。
身份标识机制
容器身份通常由唯一标识符(如Service Account)、加密证书和命名空间共同构成。Kubernetes通过 CSR机制为Pod签发短期证书,实现双向TLS认证。
网络策略控制示例
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080
该策略仅允许标签为 app: frontend的Pod访问后端服务的8080端口,结合身份标签实现细粒度访问控制。
安全通信流程
  • Pod启动时获取唯一身份凭证
  • 服务发现组件验证调用方身份
  • 网络插件执行基于身份的流量过滤
  • 所有跨节点通信自动加密

2.4 网络策略的加载与执行流程

网络策略的加载始于Kubernetes API Server接收到策略定义后,将其持久化存储于etcd中。控制器通过Informer监听NetworkPolicy资源变更,触发回调逻辑。
策略同步机制
当新策略创建时,CNI插件(如Calico、Cilium)的控制器会收到事件通知,并将策略规则转换为底层可执行的ACL或eBPF程序。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-web
spec:
  podSelector:
    matchLabels:
      app: web
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: trusted
上述策略表示仅允许带有`project: trusted`标签的命名空间访问`app: web`的Pod。控制器解析后生成对应规则集。
执行流程阶段
  1. API变更监听:Informer监听NetworkPolicy资源
  2. 规则翻译:将高层策略转化为底层安全规则
  3. 下发至节点:通过gRPC或文件写入传递至各Node代理
  4. 加载执行:由CNI在iptables或eBPF中加载策略

2.5 Cilium与Kubernetes集成模式

Cilium 深度集成 Kubernetes,利用其 API 监听 Pod、Service 和 NetworkPolicy 等资源变化,实现动态网络策略管理。
数据同步机制
Cilium 通过 Kubernetes 的 Informer 机制监听资源变更,实时同步集群状态至 eBPF 数据结构中。例如:
// 示例:监听 Pod 事件
informerFactory.Core().V1().Pods().Informer().AddEventHandler(&handler{
    OnAdd: func(obj interface{}) {
        pod := obj.(*v1.Pod)
        // 更新 eBPF map 中的端点信息
        bpf.UpdateEndpoint(pod.Status.PodIP, pod.ObjectMeta.Labels)
    },
})
上述代码注册事件处理器,在 Pod 创建时更新 eBPF 映射表,确保网络策略即时生效。
策略执行流程
  • Kubernetes NetworkPolicy 被 Cilium 转换为 eBPF 规则
  • 规则直接加载至 Linux 内核层,实现微秒级包处理
  • 标签选择器(Label Selector)驱动安全身份识别
该集成模式消除了传统桥接或 iptables 性能瓶颈,提供高性能且可观察的容器网络。

第三章:Docker环境下Cilium部署实践

3.1 环境准备与依赖组件安装

在构建稳定的服务运行环境前,需确保操作系统基础组件和开发工具链就位。推荐使用 LTS 版本的 Linux 发行版,如 Ubuntu 20.04 或 CentOS 8。
基础依赖安装
使用包管理器安装必要工具:

# 安装编译工具与网络工具
sudo apt update && sudo apt install -y \
    build-essential \
    curl \
    git \
    wget \
    libssl-dev
上述命令更新软件源并安装编译所需的工具集,其中 build-essential 提供 GCC 编译器, libssl-dev 支持 TLS 加密通信。
运行时环境配置
组件版本要求用途
Docker>=20.10容器化部署运行时
Go>=1.20服务端语言环境

3.2 手动部署Cilium DaemonSet

在某些Kubernetes环境中,自动化安装工具可能受限,需手动部署Cilium DaemonSet以确保精确控制网络配置。
准备Cilium配置清单
首先获取官方提供的Cilium YAML模板,并根据集群环境调整参数。关键配置包括启用eBPF、设置CNI模式及API服务器地址。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: cilium
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: cilium
  template:
    metadata:
      labels:
        name: cilium
    spec:
      containers:
      - name: cilium
        image: docker.io/cilium/cilium:v1.14.3
        securityContext:
          privileged: true
        env:
        - name: K8S_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
该DaemonSet确保每个节点运行一个Cilium实例,privileged权限是加载eBPF程序的必要条件。K8S_NODE_NAME通过Downward API注入,用于节点标识。
部署与验证
使用 kubectl apply -f cilium-ds.yaml应用配置后,通过 kubectl get pods -n kube-system -l name=cilium确认Pod正常运行。

3.3 验证Cilium网络功能就绪状态

检查Cilium组件运行状态
首先确认Cilium DaemonSet在所有节点上正常运行。执行以下命令查看Pod状态:
kubectl get pods -n kube-system -l k8s-app=cilium
预期输出中所有Pod的“STATUS”应为“Running”,且“READY”列显示为1/1,表明核心代理已就绪。
验证网络连通性与策略执行
通过部署测试工作负载检验网络功能是否就绪:
  1. 部署示例应用:运行包含客户端和服务端的Deployment;
  2. 建立通信测试:使用curl或ping验证跨节点Pod通信;
  3. 策略验证:应用NetworkPolicy并确认流量按预期被允许或拒绝。
结合 cilium status命令可进一步确认eBPF程序加载、CNI配置及健康度指标,确保数据面完整启用。

第四章:容器间安全通信策略配置

4.1 允许指定容器组之间通信

在 Kubernetes 中,实现特定容器组(Pod)之间的安全通信是网络策略设计的核心需求。通过 NetworkPolicy 资源对象,可以精确控制 Pod 间的流量。
定义网络策略规则
使用如下 YAML 配置,可允许特定标签的 Pod 接收来自指定来源的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-app-communication
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
该策略选择所有标签为 `app: backend` 的 Pod,仅允许带有 `app: frontend` 标签的 Pod 向其发起入站连接。`podSelector` 定义了目标和来源 Pod 的标签匹配规则,实现细粒度的微服务间访问控制。
策略生效前提
  • 集群必须启用支持 NetworkPolicy 的网络插件(如 Calico、Cilium)
  • 默认情况下,Pod 处于“非隔离”状态,启用策略后进入“白名单”模式

4.2 基于标签的选择器精准控制

在Kubernetes中,标签(Label)是实现资源对象灵活分组与选择的核心机制。通过为Pod、Service等资源附加键值对形式的标签,可使用基于标签的选择器进行精确匹配和操作。
标签选择器语法示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
上述配置中, matchLabels 定义了Deployment将管理所有包含 app: nginx 标签的Pod。该机制实现了工作负载与实例间的松耦合关联。
支持的操作符类型
  • = 或 ==:精确匹配键值
  • !=:排除指定值
  • in, notin:集合匹配
例如,使用 environment in (production, staging) 可同时选中生产与预发环境的资源,提升批量操作效率。

4.3 限制出向流量与外部访问防护

在现代网络安全架构中,限制容器或服务的出向流量是防止数据泄露和横向移动的关键措施。通过策略性地控制对外部服务的访问,可显著降低攻击面。
使用网络策略定义出向规则
Kubernetes NetworkPolicy 支持通过 egress 规则精确控制出向流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-egress
spec:
  podSelector:
    matchLabels:
      app: frontend
  policyTypes:
    - Egress
  egress:
    - to:
        - ipBlock:
            cidr: 10.96.0.0/12
      ports:
        - protocol: TCP
          port: 53
上述策略允许带有 app=frontend 标签的 Pod 仅能访问集群内部 DNS(TCP 53 端口),CIDR 范围覆盖服务网段,阻止所有其他外部通信。
结合外部防火墙实现纵深防御
  • 云平台安全组应与集群网络策略协同,限制节点级出向流量
  • 关键服务应配置代理网关,统一管理对外 HTTP/S 请求
  • 定期审计出向连接日志,识别异常行为模式

4.4 DNS策略与服务发现安全管理

在现代微服务架构中,DNS策略不仅承担服务发现的职责,还需集成安全控制机制。通过精细化的DNS路由策略,可实现基于身份、区域或加密状态的服务访问控制。
安全DNS策略配置示例
{
  "policy": "secure-routing",
  "match": {
    "service": "payment-api",
    "network_zone": "internal",
    "tls_required": true
  },
  "action": "resolve-to-green"
}
上述策略确保仅当请求来自内部网络且使用TLS加密时,才解析到“green”版本的服务实例,防止未授权访问。
服务发现安全机制对比
机制安全性适用场景
DNSSEC高防篡改记录
mTLS验证极高零信任架构
IP白名单中传统内网环境

第五章:总结与进阶学习建议

构建可复用的工具函数库
在实际项目中,将常用逻辑封装成独立模块能显著提升开发效率。例如,在 Go 语言中可以创建通用的错误处理包装器:
// ErrorHandler 包装 HTTP 处理函数,统一返回 JSON 错误
func ErrorHandler(fn http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if err := recover(); err != nil {
                log.Printf("Panic: %v", err)
                http.Error(w, `{"error": "internal error"}`, 500)
            }
        }()
        fn(w, r)
    }
}
持续集成中的自动化测试策略
采用分层测试策略可有效保障代码质量。以下为典型 CI 流程中的测试分布:
测试类型覆盖率目标执行频率示例场景
单元测试>90%每次提交验证单个函数输出
集成测试>70%每日构建API 与数据库交互
E2E 测试>50%发布前用户登录流程模拟
性能调优实战路径
  • 使用 pprof 分析 CPU 与内存瓶颈,定位热点函数
  • 对高频调用接口启用 Redis 缓存,降低数据库负载
  • 通过连接池控制数据库并发访问,避免资源耗尽
  • 利用 CDN 加速静态资源加载,提升前端响应速度
Client Load Balancer App Server Database
【信息科学与工程学】【通信工程】第八十六篇 通信网络设备及通信网络组网的所有学科知识01 编号001类型网络虚拟化与覆盖技术网络领域数据中心网络子领域大二层网络 / 网络虚拟化核心数学方程式/算法模型核心算法:VXLAN封装与解封装。关键在于24位VNI(虚拟网络标识符)到物理网络的三层IP地址的映射。封装:收到原始以太帧后,为其添加 VXLAN 头部(含 VNI)、外层 UDP 头(目的端口 4789)、外层 IP 头(源 IP 为本地 VTEP IP,目的 IP 为对端 VTEP IP)以及外层 MAC 头。解封装:对端 收到报文后,剥离外层头部,根据内层帧的目的 MAC 和 VNI 进行二 阅读详情

相关推荐

【信息科学与工程学】【通信工程】计算机科学与自动化——第二百三十三篇 云NaaS服务 系列二01

国家骨干网(含核心网、IP骨干网、OTN骨干网)/城域网【含3G/4G/5G接入网/PON接入网/OTN接入网+OTN/IP城域网+其他】/中心云(多/双/单Region+多AZ/双AZ/单AZ)+边缘DC+边缘计算节点+端计算节点包括IoT传感器、移动终端、CPE设备。通过5G NR(n78频段,带宽100MHz,子载波间隔30kHz)或GPON(下行2.5Gbps,上行1.25Gbps)接入。本地缓存小于10GB,主要用于临时数据暂存。位于地市级机房,部署MEC服务器(Intel Xeon Platin

weixin_49199313的博客 1338

深入探索 Cilium 的工作机制

这篇之前写记录的内容,隔了几个月终于想起把笔记完成,作为探索 Cilium 工作原理的入门,也还是 Cilium 冰山一角,像是高级的网络策略、网络加密、BGP 网络、服务网格等方面并没有深入。如果阅读过程中有发现任何问题,也烦请纠正。本文基于 Cilium v1.12 及 Kubernetes v1.25。

hanfengzxh的博客 789

【信息科学与工程学】计算机科学与技术——第二百二十五篇 架构设计 03 云原生架构02

启用HPA Controller Partial Cache(只缓存必要字段)、调整Informer Resync Period减少内存、启用Controller Memory Limit、监控Informer Cache内存。: 设置HPA stabilizationWindowSeconds大于CA扩容时间、启用CA scale-down-delay-after-add、使用PriorityBased策略优先保留Pod、监控HPA-CA震荡频率。模型并行allreduce需5TB/s→满足;

weixin_49199313的博客 352

CNI 网络流量 5.1 Cilium 介绍和原理

cilium 介绍使用

mr1jie的博客 1914

【信息科学与工程学】【安全领域】第二百零五篇 漏洞治理 01

形式:RabbitMQ管理插件SSRF CVE-2026-57211(CVSSv4 8.3,Windows多插件可诱发SMB NTLM泄露)、管理API资源无限CWE-770 CVSSv4 5.3、管理UI存储XSS CVE-2026-57214/其他;用法:GET /cgi-bin/.%2e/%2e%2e/etc/passwd→读密文/源码→RCE。定量:CVSS 9.0;例:Spectre CVE-2017-5753、Meltdown CVE-2017-5754(CPU越界/未授权内核读);

weixin_49199313的博客 106

【信息科学与工程学】计算机科学与自动化——第三百零五篇 数据中心 Scale-Up、Scale-Out、Scale-Across 100

密码法》《商用密码管理条例》《网络安全法》《数据安全法》《国家政务信息化项目建设管理办法》;《网络安全法》《数据安全法》《个人信息保护法》《反恐怖主义法》《反有组织犯罪法》;反洗钱可疑交易规则判定。《个人信息保护法》《网络安全法》《数据安全法》《反不正当竞争法》《生成式人工智能服务管理暂行办法》;《中国共产党纪律处分条例》《党内监督条例》《巡视工作条例》《审计法》《公职人员政务处分法》《反腐败/反有组织犯罪相关》《档案法》《电子签名法》《会计法》(原始凭证数字化要求)、《网络安全法》;

weixin_49199313的博客 487

cilium插件测试_Cilium Network Policy

一、第三层配置示例1. 基于Label的策略使用busybox启动三个pod:box-a,box-b,box-c,测试a->b,c->b联通性入口策略配置基于label的策略:只允许a->bapiVersion: "cilium.io/v2"kind: CiliumNetworkPolicymetadata:name: "a-to-b-allow"spec:endpointSel...

weixin_29455479的博客 1011

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03

需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。

weixin_49199313的博客 289

Cilium系列-14-Cilium NetworkPolicy 简介

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

east4ming的博客 730

企业微信消息推送(一)接收消息服务器URL

企业微信限制过多,公司域名所有权检验不通过。采用接收消息服务器URL的方式。使用vscode,将UTF-8 BOM文本编码改为UTF-8。配置接收消息服务器URL。

Xiaoweidumpb 1万+

Outlook总是提示登录微软,怎么办?

Outlook 2021反复弹出Microsoft登录窗口,可能是由于Modern Authentication身份验证机制或凭据问题导致。解决方案包括:1)通过注册表关闭Modern Authentication(适用于本地Exchange);2)清理Windows凭据管理器中的旧认证信息;3)手动配置Exchange服务器地址;4)通过注册表阻止Microsoft登录窗口弹出(适用于非M365环境)。建议按顺序尝试,尤其前两步通常能解决问题。经测试,步骤1和2已有效解决该问题。

剪刀石头布 4672

使用 Cilium 增强 Kubernetes 网络安全

TL;DR 在本篇,我们分别使用了 Kubernetes 原生的网络策略和 Cilium 的网络策略实现了 Pod 网络层面的隔离。不同的是,前者只提供了基于 L3/4 的网络策略;后者支持 L3/4、L7 的网络策略。 通过网络策略来提升网络安全,可以极大降低了实现和维护的成本,同时对系统几乎没有影响。 尤其是基于 eBPF 技术的 Cilium,解决了内核扩展性不足的问题,从内核层面为工作负载提供安全可靠、可观测的网络连接。 背景 为什么说 Kubernetes 网络存在安全隐患?集群中的 Pod 默.

hanfengzxh的博客 3935

CST新手必看:共面波导色散曲线绘制全流程(附参数设置避坑指南)

本文详细介绍了CST Microwave Studio中绘制共面波导色散曲线的全流程操作,特别针对新手常见的边界条件设置错误、参数扫描失效等问题提供解决方案。通过模型建立、边界条件设置、本征模求解器配置等步骤,帮助工程师快速掌握CPW色散特性分析方法,并附有参数设置避坑指南,提升高频电路设计效率。

tomato的博客 989

揭秘Cilium在Docker中的安全机制:如何构建零信任网络(附配置模板)

深入解析Docker Cilium容器网络安全机制,教你基于eBPF构建零信任网络。适用于多租户、微服务场景,实现细粒度流量控制与实时策略防护。配置模板免费提供,值得收藏。

ByteChat的博客 1085

轻量级NAS的隐秘战场:比特米盒CumeBox2与CasaOS的生态融合实践

本文探讨了比特米盒CumeBox2轻量级NAS设备与CasaOS操作系统的生态融合实践。通过硬件选型、系统部署、性能优化和应用场景分析,展示了如何将CumeBox2与CasaOS深度整合,打造经济实用的家庭数据管理中心,特别适合入门级用户和小型办公环境。

rl6adventurer的博客 895

告别玄学:用Multisim或LTspice仿真带你直观理解PFC的三种工作模式(CCM/DCM/CrM)

本文通过Multisim和LTspice仿真工具,详细解析了PFC(功率因数校正)的三种工作模式(CCM、DCM、CrM)的本质差异。从波形捕捉到参数优化,提供了实用的仿真技巧和工程实践策略,帮助工程师直观理解并优化PFC电路设计,提升THD和功率因数。

weixin_30363285的博客 396

容器网络混乱?4种隔离技术让你彻底掌控Docker网络边界

掌握Docker容器网络隔离技巧,轻松解决容器网络混乱问题。通过桥接网络、Macvlan、IPvlan和自定义网络实现精准隔离,适用于多租户部署与微服务架构,提升安全性和性能。方法实用高效,值得收藏。

CompiGap的博客 736

【理解机器学习算法】之岭回归Ridge - L2 Rgularization

本人就职海外从事人工智能领域开发设计。 希望花时间总结下流行的机器学习算法,希望大家一起学习,欢迎指正!

Hyman Qiu 2317

揭秘Docker网络隔离机制:如何实现高效安全的容器通信?

掌握Docker容器网络隔离原理,轻松实现安全高效的容器通信。详解bridge、host和overlay网络模式的应用场景与配置方法,提升容器间通信安全性与灵活性。运维开发必备技能,值得收藏。

FuncLens的博客 1059

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【限时揭秘】头部企业都在用的Cilium高级网络配置方案(Docker环境专属)

掌握Docker环境下Cilium网络配置的高级技巧,解决容器通信与安全策略难题。适用于微服务架构与云原生场景,支持eBPF高效数据处理,提升网络性能与可观测性。头部企业实战方案揭秘,值得收藏。

GatherLume的博客 368

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【前沿技术突破】:量子计算中Docker容器网络隔离的5种高阶实现方式

深入解析量子计算 Docker 的网络隔离实现方案,提升系统安全与稳定性。涵盖自定义桥接网络、Macvlan、IPvlan、Sidecar模式及Service Mesh集成5种高阶方法,适用于多节点量子协同计算场景。有效隔离计算资源,降低通信干扰,保障数据完整性。值得收藏

LearnFlow的博客 985

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

等保测评前72小时紧急加固,Docker 27金融容器合规检查清单来了,覆盖等保2.0“安全计算环境”全部21项要求

等保测评前72小时紧急加固必备!提供Docker 27金融容器等保适配检查清单,覆盖等保2.0“安全计算环境”全部21项要求,含镜像扫描、权限控制、日志审计等实操方法,助力金融机构高效过检。值得收藏

VarLens的博客 390

Cloudreve 自建私有云盘指南:从部署到进阶的完整路径

Cloudreve 是一个用 Go 编写的自建文件管理与分享系统,它把"存文件、发链接、在线看文件"这些网盘核心能力搬到自己的服务器上。它解决的典型问题是:文件不想依赖第三方网盘的容量与规则,同时又希望免运维成本地接入云存储。个人用户、小团队,以及需要给外部人员安全传文件的工程师,都适合把它跑在 VPS 或家里的一台机器上。 ## 它和直接用网盘或裸 FTP 有什么不同 用现成网盘,文件在别人

gitblog_01108的博客 189

Kubernetes从入门到精通(安装篇)01

Calico 是 Kubernetes 生态中主流的 CNI 网络插件,核心作用是为容器提供高性能网络连接与精细化安全策略,采用纯三层网络架构,通过 BGP 协议实现路由分发,无需 Overlay 隧道封装,性能接近物理网络。核心功能:解决k8s网络两大核心问题实现 Pod 间网络通信(核心)提供强大的网络安全策略CoreDNS是一个用Go语言编写的开源DNS服务器,专注于灵活性、可扩展性和易用性。它采用模块化设计,通过插件机制实现功能扩展,适用于服务发现、Kubernetes集群DNS解析等场景。

Mrguo007的博客 606
上一篇: 【Docker安全防护终极指南】:eBPF如何重塑容器安全边界?
下一篇: 为什么你的 Docker 日志总是丢?深入剖析日志驱动配置陷阱
CompiGap
博客等级 码龄1年 147粉丝 1970原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值