news 2026/4/16 16:14:08

Calico API:Kubernetes容器网络与安全的核心API定义库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Calico API:Kubernetes容器网络与安全的核心API定义库

🐾 Calico API

Calico API是Project Calico项目的权威源代码,包含了该项目的API定义。它为Kubernetes容器网络和安全策略提供了一套标准化的类型定义和客户端工具,使开发者能够方便地构建、管理和自动化Calico网络和安全策略。

🌟 功能特性

  • 丰富的API类型:包含BGPConfigurationBGPFilterBGPPeerGlobalNetworkPolicyNetworkPolicyIPPoolIPReservationTier等核心资源类型,覆盖网络配置、安全策略、IP地址管理等各个方面。
  • 自动生成的客户端:提供自动生成的Go语言客户端(clientset)、listersinformers,支持Kubernetes风格的资源操作(Create、Update、Delete、Get、List、Watch、Patch)和事件监听。
  • 多架构支持:构建系统支持跨平台编译(如amd64, arm64, s390x等),可生成针对不同CPU架构的二进制文件和Docker镜像。
  • 开发者友好:包含完整的开发者指南,详细说明了如何设置开发环境、构建代码、运行测试以及贡献代码的流程。
  • 安全策略支持:定义了精细的网络策略规则(Rule),支持基于标签选择器、命名空间、服务账户、CIDR、端口和协议等多维度的流量控制。
  • BGP网络集成:提供了完整的BGP配置API,支持节点对等、路由过滤和BGP策略管理,便于集成到现有网络基础设施中。
  • 分阶段策略(Staged Policy):支持StagedGlobalNetworkPolicyStagedNetworkPolicy等资源,允许策略分阶段部署和验证,提高变更安全性。
  • 分层安全模型(Tier):通过Tier资源实现安全策略的分层管理,允许管理员定义策略的应用顺序和默认行为。

🛠️ 安装指南

前提条件

  • Linux构建环境
  • Docker
  • Git
  • Make

构建Calico API

  1. 克隆仓库

    gitclone https://github.com/projectcalico/api.gitcdapi
  2. 构建所有组件

    makeimage

    此命令将生成多个容器镜像。要进行干净的构建,可使用:

    makeclean image
  3. 为特定架构构建

    makeimageARCH=arm64
  4. 更新生成的代码(在添加新的API类型后)

    makebuild

    此命令会重新生成客户端、listersinformers等代码。

📖 使用说明

导入客户端

你可以直接导入生成的客户端库来操作Calico API资源。

import("context""fmt"calicoclientset"github.com/projectcalico/api/pkg/client/clientset_generated/clientset"metav1"k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/client-go/tools/clientcmd")funcmain(){// 加载kubeconfigconfig,err:=clientcmd.BuildConfigFromFlags("","/path/to/kubeconfig")iferr!=nil{panic(err)}// 创建Calico客户端clientset,err:=calicoclientset.NewForConfig(config)iferr!=nil{panic(err)}// 示例:列出所有GlobalNetworkPolicypolicies,err:=clientset.ProjectcalicoV3().GlobalNetworkPolicies().List(context.TODO(),metav1.ListOptions{})iferr!=nil{panic(err)}for_,policy:=rangepolicies.Items{fmt.Printf("Policy: %s\n",policy.Name)}}

定义自定义资源示例

以下是一个GlobalNetworkPolicy的YAML示例,展示了如何定义一条允许特定命名空间内Pod间通信的入口规则。

apiVersion:projectcalico.org/v3kind:GlobalNetworkPolicymetadata:name:allow-frontend-to-backendspec:tier:"default"order:100selector:app == 'backend'ingress:-action:Allowsource:selector:app == 'frontend'namespaceSelector:name == 'production'protocol:TCPdestination:ports:[6379]egress:-action:Allow

使用Informers监听资源变化

import(informers"github.com/projectcalico/api/pkg/client/informers_generated/externalversions""k8s.io/apimachinery/pkg/util/wait""k8s.io/client-go/tools/cache")// 创建SharedInformerFactoryfactory:=informers.NewSharedInformerFactory(clientset,time.Minute*5)// 获取特定资源的InformerpolicyInformer:=factory.Projectcalico().V3().GlobalNetworkPolicies().Informer()// 添加事件处理函数policyInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{AddFunc:func(objinterface{}){fmt.Printf("Policy added: %s\n",obj.(*v3.GlobalNetworkPolicy).Name)},UpdateFunc:func(oldObj,newObjinterface{}){fmt.Printf("Policy updated: %s\n",newObj.(*v3.GlobalNetworkPolicy).Name)},DeleteFunc:func(objinterface{}){fmt.Printf("Policy deleted: %s\n",obj.(*v3.GlobalNetworkPolicy).Name)},})// 启动Informerfactory.Start(wait.NeverStop)factory.WaitForCacheSync(wait.NeverStop)// 保持程序运行select{}

💻 核心代码

1. BGPConfiguration API 定义 (pkg/apis/projectcalico/v3/bgpconfiguration.go)

此文件定义了BGP配置资源,用于全局BGP设置。

// Copyright (c) 2020-2021 Tigera, Inc. All rights reserved.// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0packagev3import("github.com/projectcalico/api/pkg/lib/numorstring"metav1"k8s.io/apimachinery/pkg/apis/meta/v1")const(KindBGPConfiguration="BGPConfiguration"KindBGPConfigurationList="BGPConfigurationList")typeBindModestringconst(BindModeNone BindMode="None"BindModeNodeIP BindMode="NodeIP")// +genclient:nonNamespaced// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// BGPConfigurationList是BGPConfiguration资源的列表。typeBGPConfigurationListstruct{metav1.TypeMeta`json:",inline"`metav1.ListMeta`json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`Items[]BGPConfiguration`json:"items" protobuf:"bytes,2,rep,name=items"`}// +genclient// +genclient:nonNamespaced// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// BGPConfiguration定义了BGP的全局配置。typeBGPConfigurationstruct{metav1.TypeMeta`json:",inline"`metav1.ObjectMeta`json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`Spec BGPConfigurationSpec`json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`}// BGPConfigurationSpec包含了BGP配置的值。typeBGPConfigurationSpecstruct{// LogSeverityScreen是发送到stdout的日志严重级别。[默认: INFO]LogSeverityScreenstring`json:"logSeverityScreen,omitempty" validate:"omitempty,logLevel"`// 其他字段...}

2. NetworkPolicy API 定义 (pkg/apis/projectcalico/v3/networkpolicy.go)

此文件定义了命名空间作用域的网络策略资源。

// Copyright (c) 2017-2024 Tigera, Inc. All rights reserved.// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// http://www.apache.org/licenses/LICENSE-2.0packagev3import(metav1"k8s.io/apimachinery/pkg/apis/meta/v1")const(KindNetworkPolicy="NetworkPolicy"KindNetworkPolicyList="NetworkPolicyList")// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// NetworkPolicyList是Policy对象的列表。typeNetworkPolicyListstruct{metav1.TypeMeta`json:",inline"`metav1.ListMeta`json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`Items[]NetworkPolicy`json:"items" protobuf:"bytes,2,rep,name=items"`}// +genclient// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object// NetworkPolicy定义了命名空间级别的网络安全策略。typeNetworkPolicystruct{metav1.TypeMeta`json:",inline"`metav1.ObjectMeta`json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`Spec NetworkPolicySpec`json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`}// NetworkPolicySpec包含了网络策略的规范。typeNetworkPolicySpecstruct{// Tier指定此策略所属的层级名称。如果省略,则假定为默认层级(名称为"default")。Tierstring`json:"tier,omitempty" validate:"omitempty,name"`// Order是可选的字段,指定同一层级内策略的应用顺序。Order*float64`json:"order,omitempty"`// Selector选择此策略应用的工作负载端点。Selectorstring`json:"selector" validate:"selector"`// Ingress定义入站流量规则的有序集合。Ingress[]Rule`json:"ingress,omitempty" validate:"omitempty,dive"`// Egress定义出站流量规则的有序集合。Egress[]Rule`json:"egress,omitempty" validate:"omitempty,dive"`// Types指定此策略适用的流量方向(Ingress, Egress, 或两者)。Types[]PolicyType`json:"types,omitempty" validate:"omitempty,dive,policyType"`}

3. 客户端生成脚本 (hack/update-codegen.sh)

此脚本用于生成客户端、listersinformers代码。

#!/bin/bash# Copyright 2015 The Kubernetes Authors.# Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0set-o errexitset-o nounsetset-o pipefailREPO_ROOT=$(realpath$(dirname"${BASH_SOURCE}")/..)BINDIR=${REPO_ROOT}/bin# 生成版本化客户端 (pkg/client/clientset_generated/clientset)client-gen"$@"\--go-header-file"${REPO_ROOT}/hack/boilerplate/boilerplate.go.txt"\--input-base"github.com/projectcalico/api/pkg/apis/"\--input"projectcalico/v3"\--output-dir"${REPO_ROOT}/pkg/client/clientset_generated"\--clientset-path"github.com/projectcalico/api/pkg/client/clientset_generated/"\--clientset-name"clientset"# 生成listerlister-gen"$@"\--go-header-file"${REPO_ROOT}/hack/boilerplate/boilerplate.go.txt"\--output-dir"${REPO_ROOT}/pkg/client/listers_generated"\--output-pkg"github.com/projectcalico/api/pkg/client/listers_generated"\"github.com/projectcalico/api/pkg/apis/projectcalico/v3"# 生成informerinformer-gen"$@"\--go-header-file"${REPO_ROOT}/hack/boilerplate/boilerplate.go.txt"\--versioned-clientset-package"github.com/projectcalico/api/pkg/client/clientset_generated/clientset"\--listers-package"github.com/projectcalico/api/pkg/client/listers_generated"\--output-dir"${REPO_ROOT}/pkg/client/informers_generated"\--output-pkg"github.com/projectcalico/api/pkg/client/informers_generated"\"github.com/projectcalico/api/pkg/apis/projectcalico/v3"

这些核心代码展示了Calico API库的主要结构和功能,包括API类型定义、客户端代码生成以及构建系统的关键组成部分。通过使用这些API,开发者可以构建强大的网络和安全自动化工具,充分利用Calico在Kubernetes环境中的高级网络功能。FINISHED
QEHhY4oFma5gLUWjolaPoJ798aL6NOEUm82cMVLULfA=
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 14:21:28

Python Pydantic库深度解析

Pydantic是一个在Python生态中广泛使用的库,特别在Flask开发中,它帮助处理数据验证和配置管理。下面从五个方面详细讲解Pydantic。1. 它是什么Pydantic是一个基于Python类型注解的库,用于数据验证和设置管理。它允许你通过定义类来描述数据的…

作者头像 李华
网站建设 2026/4/6 23:02:53

实测才敢推!专科生专属降AIGC网站 —— 千笔

在AI技术深度渗透学术写作的当下,越来越多的学生开始依赖AI工具辅助完成论文、报告等学术内容。然而,随着查重系统对AI生成内容的识别能力不断提升,如何有效降低AI率和重复率成为摆在学生面前的难题。面对市场上琳琅满目的降AI率与降重复率工…

作者头像 李华
网站建设 2026/4/14 0:36:15

python python-jose库,深度解析

1. 它是什么 python-jose 是一个用于处理 JWT(JSON Web Token)的 Python 库。JWT 可以理解为一种数字“通行证”,它允许在不同系统之间安全地传递信息,就像现实生活中的证件(如身份证)包含了你的基本信息且…

作者头像 李华
网站建设 2026/4/17 4:45:28

python python-multipart库,深度解析

处理 Web 表单和文件上传时,服务器需要解析一种特殊的“包裹格式”,这就是 multipart/form-data。python-multipart 就是一个专门高效拆解这种“数据包裹”的 Python 工具。 用一个生活中的场景来类比:你通过邮局寄一个包裹,里面…

作者头像 李华
网站建设 2026/4/11 3:26:13

FastAPI 概述

FastAPI 是一个用于构建网络 API 的现代 Python 框架。它基于标准 Python 类型提示,可以高效地创建高性能、易于维护的接口。你可以把它想象成一个专门为构建 API 而设计的“智能助手”,它理解你定义的数据格式,并自动处理很多常规任务。 主…

作者头像 李华
网站建设 2026/4/17 0:39:30

无锡黑锋 HF6015C 7.0V/1.5A同步降压转换器技术解析

在需要更高输入电压和更大输出电流的便携式设备与嵌入式系统中,高效率、高集成度的同步降压解决方案至关重要。HF6015C 作为HF6012C系列的增强版本,将输入电压上限扩展至7.0V,输出电流提升至1.5A,并保持了COT模式架构带来的优异瞬…

作者头像 李华