news 2026/4/3 6:18:12

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/3/27 4:39:57

【计算机毕业设计案例】基于springboot+小程序的社区GO团购活动小程序的设计与实现商品发布、拼团下单、统一配送、社区自提(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/22 20:35:56

迅风DNS Pro二级域名分发全新V3.1.2系统源码带搭建教程

迅风DNS Pro二级域名分发全新V3.1.2系统源码带搭建教程 域名分发管理系统,连上各家服务商,一个后台搞定解析、订单、工单和日志。 源码下载: https://download.csdn.net/download/m0_61505785/92643314?spm1001.2014.3001.5503 更多同类…

作者头像 李华
网站建设 2026/3/27 23:59:12

Flutter for OpenHarmony 动效实战:打造一个会“跳”的幸运骰子应用

Flutter for OpenHarmony 动效实战:打造一个会“跳”的幸运骰子应用 在游戏、决策辅助甚至冥想练习中,掷骰子这一古老行为因其随机性与仪式感而历久弥新。而在移动应用时代,如何将物理世界的“摇、掷、滚、停”转化为数字屏幕上的沉浸式体验…

作者头像 李华
网站建设 2026/3/20 1:24:20

人工智能驱动的科研新范式及学科应用研究

以下文章来源于“中国科学院院刊”,仅做学术分享 原文链接:https://mp.weixin.qq.com/s/_f1XvDtoE-ZHgSwuIRwWUw 本文刊载于《中国科学院院刊》2025年第2期"学科发展” 余江1,2 张越1,2* 周易1,3 1 中国科学院科技战略咨询研究院 2 中国科学…

作者头像 李华
网站建设 2026/3/23 13:06:08

小程序毕设选题推荐:基于微信小程序的博物馆文创系统的设计与实现基于springboot+小程序的温州博物馆小程序的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华