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/16 14:51:08

安卓证书在线生成_免费一键制作apk打包 Android一键制作工具

作为一个纯纯的编程小白,之前为了弄安卓证书愁得头都大了!看教程要敲代码、配环境,步骤复杂到想哭,试了好几次都失败,差点以为要放弃做安卓应用了… 直到发现了咕噜分发的在线安卓证书生成工具,简直打开了新…

作者头像 李华
网站建设 2026/4/13 15:06:42

深入理解 Python 中的 yield 关键字

在 Python 编程中,yield 是一个关键而强大的语言特性,它使得函数能够以“惰性求值”和“状态保持”的方式逐步返回多个值。与普通函数通过 return 一次性返回结果不同,包含 yield 的函数被称为生成器函数,其调用结果是一个生成器对象。本文将系统地介绍 yield 的工作原理、…

作者头像 李华
网站建设 2026/4/1 23:03:09

科研效率拉满!2026 优质 AI 写论文软件精选(实测推荐)

核心推荐(按优先级排序)1. PaperRed(首推⭐⭐⭐⭐⭐)定位:国内学生专属全流程论文神器,毕业之家联动工具核心功能:一键生成论文初稿、智能查重降重、文献引用自动标注、格式自动排版、开题报告 …

作者头像 李华
网站建设 2026/4/15 16:43:44

毕业论文无忧:11个AI辅助写作网站精选

人工智能语言模型的快速发展显著改变了学术研究方式,特别是ChatGPT等工具自2022年推出后,AI在学术写作、数据分析、模式识别及决策辅助等领域广泛应用,帮助研究者提升效率。目前已有多种AI工具可支持毕业论文写作全流程,涵盖不同学…

作者头像 李华
网站建设 2026/4/16 16:10:32

11个AI工具助力毕业论文写作,覆盖多学科需求

人工智能语言模型的快速发展显著改变了学术研究方式,特别是自2022年11月ChatGPT发布后,AI工具在学术界的应用迅速普及,帮助研究人员提升效率、节省时间。这些工具能分析数据、识别模式、生成内容并辅助决策,覆盖写作、编辑和研究支…

作者头像 李华