当前位置: 首页 > news >正文

kubernetes 开发进阶 看懂/client-go/kubernetes/clientset.go

第一部分调用/opt/go/client-go/kubernetes/typed/admissionregistration/v1详

解释

/opt/go/client-go/kubernetes/typed/admissionregistration/v1/admissionregistration_client.go

文件主要目的创建admissionregistration

1什么是admissionregistration(入场注册)

类似于k8s的总统定义规则以及拥有使用别的getter的权利

文件本体

1作用:导入所需要的包

import (
http "net/http" //k8s 就是相当于一个http服务

admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
scheme "k8s.io/client-go/kubernetes/scheme"
rest "k8s.io/client-go/rest" //功能大户
)

type AdmissionregistrationV1Interface interface {
RESTClient() rest.Interface

//功能大户相当于司令有很多兵,admissionregistertion可以直接通过它调用任意一个兵注意rest.Interface只是拥有功能不能直接使用rest.client可以直接用
MutatingAdmissionPoliciesGetter

//功能的封装相当于旅长常被调用的兵直接通过rest.Interface调用功能会有很多问题例如但用起来极度繁琐、易出错、无类型安全这个封装的作用是制定 “自动修正的规则模板”

列如定义规则:“所有新建 Pod 必须自动加上env=test标签”“所有 Pod 的镜像必须从公司私有仓库拉取”
MutatingAdmissionPolicyBindingsGetter

把上面的规则模板绑定到具体范围(比如 “只对技术部生效”)

列子把 “自动加 env 标签” 的规则,绑定到test命名空间(只改这个命名空间的 Pod),其他命名空间不受影响
MutatingWebhookConfigurationsGetter

如果规则需要调用外部系统(比如 HR 系统)来修正,这里配置 “怎么调用”

列子配置:调用你自己写的服务(http://my-webhook:8080/mutate-pod)来修改 Pod,设置超时时间 10 秒、重试 2 次
ValidatingAdmissionPoliciesGetter

制定 “合规检查的规则模板”

列子:定义规则:“Pod 的 CPU 请求不能超过 2 核”“禁止创建特权容器”“Deployment 必须设置副本数≥2”
ValidatingAdmissionPolicyBindingsGetter

把校验规则绑定到具体范围

把 “CPU 不能超 2 核” 的规则,绑定到prod命名空间(只查生产环境的 Pod),测试环境不检查
ValidatingWebhookConfigurationsGetter

如果校验需要调用外部系统

列子:配置:调用公司的合规校验服务(http://compliance-service:8080/validate-pod),设置 “校验不通过就拒绝创建 Pod”
}

让每个方法都接入admissionregistration,让开发人员可以直接通过admissionregistration拥有所有方法
type AdmissionregistrationV1Client struct {
restClient rest.Interface
}

func (c *AdmissionregistrationV1Client) MutatingAdmissionPolicies() MutatingAdmissionPolicyInterface {
return newMutatingAdmissionPolicies(c)
}

func (c *AdmissionregistrationV1Client) MutatingAdmissionPolicyBindings() MutatingAdmissionPolicyBindingInterface {
return newMutatingAdmissionPolicyBindings(c)
}

func (c *AdmissionregistrationV1Client) MutatingWebhookConfigurations() MutatingWebhookConfigurationInterface {
return newMutatingWebhookConfigurations(c)
}

func (c *AdmissionregistrationV1Client) ValidatingAdmissionPolicies() ValidatingAdmissionPolicyInterface {
return newValidatingAdmissionPolicies(c)
}

func (c *AdmissionregistrationV1Client) ValidatingAdmissionPolicyBindings() ValidatingAdmissionPolicyBindingInterface {
return newValidatingAdmissionPolicyBindings(c)
}

func (c *AdmissionregistrationV1Client) ValidatingWebhookConfigurations() ValidatingWebhookConfigurationInterface {
return newValidatingWebhookConfigurations(c)
}

定义证书写入(让开发者有使用admissionregistration的权限)
func NewForConfig(c *rest.Config) (*AdmissionregistrationV1Client, error) { //config通常为~/.kube/config
config := *c
setConfigDefaults(&config) //client添加默认配置应为~/.kube/config只有集群的默认配置所以需要setConfigDefaults为client添加基础配置 下文有定义
httpClient, err := rest.HTTPClientFor(&config) 创建可以和k8s链接的http(有权限和符合规则)
if err != nil { // 处理报错
return nil, err
}

return NewForConfigAndClient(&config, httpClient) //调用newforconfigandClient
}
func NewForConfigAndClient(c *rest.Config, h *http.Client) (*AdmissionregistrationV1Client, error) {
config := *c
setConfigDefaults(&config)
client, err := rest.RESTClientForConfigAndClient(&config, h) //创建client
if err != nil {
return nil, err
}
return &AdmissionregistrationV1Client{client}, nil //返回接入AdmissionregistrationV1Client的client(拥有AdmissionregistrationV1Client权限)
}

第二种创建client配置
func NewForConfigOrDie(c *rest.Config) *AdmissionregistrationV1Client { //定义如果newforconfig没能获取配置文件就panic
client, err := NewForConfig(c)
if err != nil {
panic(err)
}
return client
}

第三种创建client配置 不使用default配置可以有更多的配置选项。

func New(c rest.Interface) *AdmissionregistrationV1Client {
return &AdmissionregistrationV1Client{c}
//让我们自己创建的Admissionregistration能和k8s通信(rest.interface能和k8s同行把它加入到Admissionregistration让Admissionregistration能和k8s通信
}

给配置补全准入规则

client添加默认配置应为~/.kube/config只有集群的默认配置所以需要setConfigDefaults为client添加基础配置

func setConfigDefaults(config *rest.Config) {

作用:告诉K8s集群“我要用v1版本的准入规则API和你说话”,集群只认这个版本的语法
gv := admissionregistrationv1.SchemeGroupVersion
config.GroupVersion = &gv

K8s集群的API服务器是个“大办公楼”,/apis 是“扩展API模块”的入口(准入规则属于扩展模块), // 不设这个路径,客户端会走错门(比如走到核心模块的 /api 路径),找不到准入规则模块。
config.APIPath = "/apis"

规定客户端和集群之间传数据用“准入规则专属的序列化格式”(JSON/Protobuf); // - `WithoutConversion()` 表示“不自动转换版本”,比如客户端传v1版本的配置,集群就按v1解析,避免版本转换导致的字段丢失; // - 没有这个配置,客户端传的数据会是“乱码”,集群根本解析不了。
config.NegotiatedSerializer = rest.CodecFactoryForGeneratedClient(scheme.Scheme, scheme.Codecs).WithoutConversion()

作用没有给http请求写Useragent就是官方默认值(

User-Agent(用户代理)是 HTTP 请求头里的一个字段,用来告诉服务端「发起请求的客户端是什么」。比如:

  • 浏览器的 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36(告诉服务端是 Safari 浏览器);
  • K8s 客户端的默认 User-Agent:kubernetes/go-client/v0.28.0 (darwin/amd64)(告诉集群是 go-client,版本 v0.28.0,运行在 macOS 系统)

if config.UserAgent == "" {
config.UserAgent = rest.DefaultKubernetesUserAgent()
}

}

作用,处理错误如果创建AdmissionregistrationV1Client失败就老实使用rest.client(

直接用restClient:通用但极度繁琐、易出错

restClient只提供最底层的Get()/Post()/Delete()方法,你需要手动搞定所有业务细节,比如创建一个 MutatingAdmissionPolic

)
func (c *AdmissionregistrationV1Client) RESTClient() rest.Interface {
if c == nil {
return nil
}
return c.restClient
}

http://www.jsqmd.com/news/528721/

相关文章:

  • 突破性人脸检测技术方案:YOLOv8-face解决复杂场景识别挑战
  • 开源物联网平台
  • 2026年集装箱翻转设备厂家推荐:山东金贯通用机械有限公司全系产品解析,覆盖多场景需求 - 品牌推荐官
  • Android 10.0 SystemUI中通过属性控制振动图标在状态栏显示
  • 推荐一款国产好用的Agent(智能体)构建平台:深度拆解主流国产Agent的技术架构与落地路径
  • UndertaleModTool技术解密:开源工具实现游戏深度定制的创新方法指南
  • 2026年湖南1688代运营公司推荐:湖南思洋集团控股有限公司,1688店铺代运营公司精选 - 品牌推荐官
  • 小米智能家居终极指南:如何用Xiaomi Miot插件统一管理你的全屋设备
  • 2026气流粉碎机厂家推荐:潍坊市友信粉体设备有限公司,超微/食品/石墨/扁平式粉碎机全系供应 - 品牌推荐官
  • 2026年空调品牌优选推荐:美的空调无风感FA2/柜机/可爱多系列,高敏感人群与母婴适用之选 - 品牌推荐官
  • 3分钟掌握Zotero PDF预览:告别文献管理中的窗口切换烦恼
  • 1.系统瘦身指南:用WindowsCleaner解决C盘空间告急难题
  • 2026年总氮去除剂厂家推荐:苏州润杰尔环保新材料,工业/食品/屠宰/城镇污水全场景适用 - 品牌推荐官
  • Python闭包:函数嵌套的魔力
  • 2026年聊聊大阪新房选购要点,这些品牌值得关注 - 工业设备
  • PeanutKing Soccer机器人控制库:分层架构与P5轻量协议解析
  • SpringBoot服务管理避坑指南:BAT脚本中那些你可能忽略的细节(含内存配置优化)
  • OpenRGB:解放你的RGB设备,突破品牌壁垒的一站式控制中心
  • BetterNCM-Installer:网易云音乐插件自动化部署的一站式解决方案——提升安装效率与兼容性的技术实践
  • npm install 会更新package-lock吗
  • 2026年焊接辅助设备厂家推荐:深圳凯德盛机械设备有限公司,全系坡口机解决方案 - 品牌推荐官
  • 设计稿智能转换的颠覆性突破:从像素还原到跨平台代码生成的效能革命
  • 智能家居集成新标杆:HomeAssistant与小米设备的颠覆式体验
  • GME多模态向量模型效果实测:动态分辨率图片搜索展示
  • 日本高度人才签证代理怎么选,侨领靠谱不 - 工业品网
  • EmuDeck:Linux掌机模拟器的自动化配置解决方案
  • 2026年抽沙船厂家推荐:青州科大环保机械,绞吸/射吸/大型/小型抽沙船全系供应 - 品牌推荐官
  • Pixel Mind Decoder 开源生态集成:在LangChain中构建情绪分析链
  • servlet基础
  • Elden Ring FPS Unlock And More:内存补丁技术深度解析与实战指南