KubernetesClient-C

news/2025/11/3 17:49:47/文章来源:https://www.cnblogs.com/loca1h0st/p/19187782

KubernetesC-SDK

告诉编译器:

“这些函数是 C 写的,别给它们加花哨的 C++ 名字修饰,用纯 C 风格导出。”

extern "C" {
#include <kubernetes/config/kube_config.h>
#include <kubernetes/api/CoreV1API.h>
}

结构体之间的关系

image-20251014213300727

这套结构的目的是:
让不同类型的 Kubernetes 对象(Pod、Service、Namespace等)都能用统一的链表容器 list_t 来保存,从而方便解析与遍历。

  • v1_pod_list_t 只是“某一类对象”的容器(这里是 Pod)

  • list_t通用链表容器

  • listEntry_t 是链表节点结构


​ 1️⃣ v1_pod_list_t

typedef struct v1_pod_list_t {char *api_version;          // 版本,如 "v1"list_t *items;              // 这里是一个链表,存放多个 v1_pod_t 对象char *kind;                 // 类型,如 "PodList"struct v1_list_meta_t *metadata; // 元数据,如继续分页的 tokenint _library_owned;         // 标记内存是否由库管理
} v1_pod_list_t;

​ 2️⃣ list_t(链表头)

typedef struct list_t {listEntry_t *firstEntry;  // 第一个节点listEntry_t *lastEntry;   // 最后一个节点long count;               // 节点数量
} list_t;

​ 3️⃣ listEntry_t(链表节点)

typedef struct listEntry_t {listEntry_t *nextListEntry;  // 指向下一个节点listEntry_t *prevListEntry;  // 指向上一个节点void *data;                  // 指向实际数据(这里是 v1_pod_t*)
} listEntry_t;

遍历宏的设计

#define list_ForEach(element, list) \for (element = (list != NULL) ? (list)->firstEntry : NULL; \element != NULL; \element = element->nextListEntry)

等价写法:

listEntry_t *element = list->firstEntry;
while (element != NULL) {...element = element->nextListEntry;
}

Creating API Clients

常见的连接方式有两种

  1. 从kubeconfig 文件和使用集群内置配置,这是在 Kubernetes 集群之外运行应用程序时最常见的方法:

image-20251015085656866

// Initialize variables
char *basePath = NULL;
sslConfig_t *sslConfig = NULL;
list_t *apiKeys = NULL;
apiClient_t *apiClient = NULL;// Load configuration from kubeconfig file (typically ~/.kube/config)
int rc = load_kube_config(&basePath, &sslConfig, &apiKeys, NULL);
if (rc != 0) {// Handle errorreturn -1;
}// Create API client with loaded configuration
apiClient = apiClient_create_with_base_path(basePath, sslConfig, apiKeys);
if (!apiClient) {// Handle errorreturn -1;
}// Use the API client...// Clean up resources
apiClient_free(apiClient);
free_client_config(basePath, sslConfig, apiKeys);
apiClient_unsetupGlobalEnv();
  1. 使用集群内配置,在 Kubernetes Pod 中运行时,可以使用集群内配置,该配置会自动检测和使用服务帐户令牌

image-20251015085825038

// Initialize variables
char *basePath = NULL;
sslConfig_t *sslConfig = NULL;
list_t *apiKeys = NULL;
apiClient_t *apiClient = NULL;// Load in-cluster configuration
int rc = load_incluster_config(&basePath, &sslConfig, &apiKeys);
if (rc != 0) {// Handle errorreturn -1;
}// Create API client with loaded configuration
apiClient = apiClient_create_with_base_path(basePath, sslConfig, apiKeys);
if (!apiClient) {// Handle errorreturn -1;
}// Use the API client...// Clean up resources
apiClient_free(apiClient);
free_client_config(basePath, sslConfig, apiKeys);
apiClient_unsetupGlobalEnv();
  • basePath: The base URL of the Kubernetes API server
    basePath:Kubernetes API 服务器的基本 URL
  • sslConfig: SSL/TLS configuration for secure connections
    sslConfig:用于安全连接的 SSL/TLS 配置
  • dataReceived: Buffer containing the response data
    dataReceived:包含响应数据的缓冲区
  • dataReceivedLen: Length of the received data
    dataReceivedLen:接收数据的长度
  • response_code: HTTP response code from the last request
    response_code:上次请求的 HTTP 响应代码
  • apiKeys_BearerToken: Authentication tokens for the API server
    apiKeys_BearerToken:API 服务器的身份验证令牌

面向对象设计

#include <iostream>
#include <string>extern "C"
{
#include <kubernetes/config/kube_config.h>
#include <kubernetes/api/CoreV1API.h>
}using namespace std;struct kube_params_t
{char *_basePath;sslConfig_t *_sslConfig;list_t *_apiKeys;kube_params_t() : _basePath(nullptr), _sslConfig(nullptr), _apiKeys(nullptr) {}~kube_params_t(){if (_basePath || _sslConfig || _apiKeys){free_client_config(_basePath, _sslConfig, _apiKeys);_basePath = nullptr;_sslConfig = nullptr;_apiKeys = nullptr;}}
};class K8sCluster
{
private:kube_params_t *_params;apiClient_t *_apiClient;bool _connected;void initClient(){int rc = load_kube_config(&_params->_basePath, &_params->_sslConfig, &_params->_apiKeys, nullptr);if (rc != 0){cerr << "Cannot to connected k8s" << endl;return;}_apiClient = apiClient_create_with_base_path(_params->_basePath, _params->_sslConfig, _params->_apiKeys);if (!_apiClient){cerr << "Create apiclient Failed" << endl;return;}_connected = true;}public:K8sCluster() : _params(new kube_params_t), _apiClient(nullptr), _connected(false) { initClient(); }K8sCluster(kube_params_t *params) : _params(params), _apiClient(nullptr), _connected(false){if (_params){initClient();}}~K8sCluster(){apiClient_free(_apiClient);delete _params;}void list_pod(const char *);bool isConnected() const { return _connected; }
};void K8sCluster::list_pod(const char *ns)
{if (!_apiClient){printf("[-] apiClient is null, cannot list pods.\n");return;}v1_pod_list_t *pod_list = CoreV1API_listNamespacedPod(_apiClient, (char *)ns, nullptr, nullptr, nullptr,nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,nullptr, nullptr);printf("HTTP response code = %ld\n", _apiClient->response_code);if (!pod_list){printf("Cannot get any pod.\n");return;}listEntry_t *listEntry = nullptr;v1_pod_t *pod = nullptr;list_ForEach(listEntry, pod_list->items){pod = static_cast<v1_pod_t *>(listEntry->data);if (pod && pod->metadata && pod->metadata->name)printf("  Pod: %s Namespace: %s\n", pod->metadata->name, pod->metadata->_namespace);}v1_pod_list_free(pod_list);
}int main()
{kube_params_t *params = new kube_params_t;K8sCluster info(params);const char *ns = "kube-system";info.list_pod(ns);apiClient_unsetupGlobalEnv();return 0;
}

CMake 编译文件配置

cmake_minimum_required(VERSION 3.16.3)
project(k8scon)
set(CXX_STANDARD 11)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
# 如果 include 不在默认路径,还要加上
include_directories(/usr/local/include)
link_directories(/usr/local/lib)
add_executable(case case1.cc)
# 如果库在 /usr/local/lib 下
target_link_libraries(casekubernetes           # <-- 核心 SDKcurl                 # SDK 使用 libcurlssl                  # OpenSSLcrypto               # OpenSSLpthread              # 网络请求线程安全
)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/954751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年微型减速机工厂权威推荐榜单:蜗轮蜗杆减速机/小齿减速机/谐波减速机源头厂家精选

在工业自动化与精密传动领域,微型减速机作为动力传输的核心部件,其传动精度与运行可靠性直接关系到整个设备系统的性能表现。高品质微型减速机能够实现精准传动,将传动效率提升至85%-95%,同时将噪音控制在45分贝以…

2025 年同步时钟厂家最新推荐榜,聚焦技术实力与市场口碑深度解析,涵盖卫星北斗 GPS 授时安全领域授时安全/授时防护/信号安全/时空安全同步时钟公司推荐

引言 近日,行业权威协会发布 2025 年同步时钟产品测评报告,本次测评历时 3 个月,覆盖全行业主流品牌,从技术实力、产品性能、市场口碑、服务体系四大维度设置 28 项细分指标。其中技术实力权重占比 35%,重点考核核…

关于combinational and sequential parts of an fsm described in same always block ,spyglass警告

关于combinational and sequential parts of an fsm described in same always block ,spyglass警告combinational and sequential parts of an fsm described in same always block ,这个莫名其妙的警告。 主要原因…

2025年云南好的旅行社公司权威推荐榜单:云南青年旅行社/云南正规的旅行社/云南省十大旅行社源头公司精选

据2025年云南省旅游服务质量测评数据显示,云南旅行社市场年服务游客量超百万人次,其中高品质定制游需求同比增长25.8%,游客满意度成为衡量服务商的核心指标。 在云南旅游市场持续升温的背景下,专业、规范、注重体验…

记录一次数据恢复,mysql8 - 义美

SHOW VARIABLES LIKE log_bin_basename; Variable_name Valuelog_bin_basename E:\environment\mysql-8.0.41-winx64\data\binlog SHOW MASTER STATUS; File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Se…

2025年新能源水冷电机壳铝合金浇铸机批发厂家权威推荐榜单:户外围墙配件铝合金浇铸机/厨具锅铝合金浇铸机/手套模具铝合金浇铸机源头厂家精选

在新能源汽车产业快速发展的推动下,新能源水冷电机壳铝合金浇铸机以其高达95%的成品合格率和每分钟300mm的浇铸速度,正成为电机壳制造领域的核心设备。 新能源水冷电机壳作为电动汽车驱动系统的关键部件,其制造工艺…

2025年耐高温的轴承制造商权威推荐榜单:轴承耐高温源头/高速耐高温轴承/耐高温高速轴承源头厂家精选

在冶金、航空航天、化工等高端制造领域,耐高温轴承作为关键基础零部件,其热稳定性和可靠性直接关系到整套设备在极端环境下的运行效能。高性能耐高温轴承能够在1500℃的极端环境下保持稳定工作,将设备维护周期延长2…

Chef:开源 AI 全栈应用构建工具实践

Chef 是 Convex 推出的开源 AI 应用构建工具,能根据自然语言生成包含数据库、认证和实时功能的完整全栈应用。通过类型安全开发循环实现自动错误修复,解决传统 AI 工具只能生成前端代码的问题,适合快速原型开发。一…

2025年哈尔滨发动机维修保养权威推荐榜单:汽车维修/汽车保养/变速箱维修保养服务商精选

在哈尔滨汽车后服务市场,发动机作为车辆的“心脏”,其维修保养质量直接关系到车辆的使用寿命、性能表现及燃油经济性。行业数据显示,定期进行专业发动机保养可提升5%-10% 的燃油经济性,并显著降低故障发生率。本文…

2025 年 11 月阻燃石墨,膨胀石墨,导热石墨母粒厂家最新推荐,产能、专利、环保三维数据透视!

引言 随着新能源、电子信息等领域对阻燃石墨,膨胀石墨,导热石墨母粒需求的持续增长,市场对优质石墨产品的筛选标准愈发严格。本次推荐榜单依托行业协会最新测评数据,从产能规模、专利技术、环保合规三大核心维度展…

2025 年 11 月石墨烯,可膨胀石墨,导热石墨母粒厂家最新推荐,产能、专利、环保三维数据透视!

引言 近期,行业协会针对石墨烯、可膨胀石墨、导热石墨母粒领域开展专项测评,通过产能规模、专利技术、环保合规三大核心维度,对近百家企业进行数据核验与实地考察,最终筛选出综合实力突出的优质厂家。本次测评采用…

[CSP-S 2025] 社团招新 / club题解

题目(仅针对luogu上传的题) P14361 [CSP-S 2025] 社团招新 / club(民间数据) 题目背景 民间数据测试强度可能偏弱。 题目描述 小 L 是学校算法协会的成员。在今年的学校社团招新中,小 L 一共招收了 \(n\) 个新成员…

La Suite Docs:开源协作文档平台,可私有部署的 Notion 替代方案

法国政府开源的企业级协作文档平台,GitHub 14.3k star。基于 Django+React 开发,支持实时协作、离线编辑、AI 辅助写作,可私有部署,是 Notion 的开源替代方案。💡 从一个真实需求说起 团队想搭建知识库,Notion …

Cisco Jabber 15.1 (Andriod, iOS, macOS, Windows) - 面向企业的多合一通信工具

Cisco Jabber 15.1 (Andriod, iOS, macOS, Windows) - 面向企业的多合一通信工具Cisco Jabber 15.1 (Andriod, iOS, macOS, Windows) - 面向企业的多合一通信工具 即时消息、语音和视频通话、语音邮件、桌面共享、会议…

Shotcut 25.10 (Linux, macOS, Windows) - 免费开源视频编辑器

Shotcut 25.10 (Linux, macOS, Windows) - 免费开源视频编辑器Shotcut 25.10 (Linux, macOS, Windows) - 免费开源视频编辑器 free, open source, cross-platform video editor 请访问原文链接:https://sysin.org/blo…

Cisco Packet Tracer 9.0 新增功能简介

Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具Cisco Packet Tracer 9.0 (macOS, Linux, Windows) - 思科网络模拟工具 Cisco network simulation tool 请访问原文链接:https://sysin.org/blog…

划分型dp

参考下面题单里面 五、划分型 DP https://leetcode.cn/discuss/post/3581838/fen-xiang-gun-ti-dan-dong-tai-gui-hua-ru-007o/

2025年青石栏杆制造厂权威推荐榜单:别墅石栏杆/石栏杆/河道石栏杆源头厂家精选

在传统建筑复兴与现代景观建设融合的背景下,青石栏杆以其古朴的质感、出色的耐久性和浓郁的文化气息,持续受到市政工程、园林景观及仿古建筑项目的青睐。 青石栏杆作为建筑领域的关键构件,兼具安全防护与艺术装饰双…

2025年高分子聚乙烯衬板生产商权威推荐榜单:高分子聚乙烯耐磨板/聚乙烯耐磨衬板/超高分子聚乙烯衬板源头厂家精选

在工业耐磨材料领域,一场由高分子聚乙烯衬板引领的技术变革正悄然发生,其耐磨性能是碳钢的7倍以上,为工业设备寿命延长提供了全新解决方案。 据塑料加工工业协会2024年度测评数据显示,中国高分子聚乙烯衬板市场规模…