Operator SDK v1.39.0 升级指南:Kubernetes 1.31 与 Kubebuilder NetworkPolicy 脚手架迁移实战

发布时间:2026/9/30 17:02:26

Operator SDK v1.39.0 升级指南:Kubernetes 1.31 与 Kubebuilder NetworkPolicy 脚手架迁移实战 云原生后端开发工具微服务【免费下载链接】operator-sdkSDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.项目地址https://gitcode.com/gh_mirrors/op/operator-sdk点击查看免费下载导读本指南基于 Operator SDK 官方升级文档 v1.39.0.md系统梳理从 v1.38.0 升级到 v1.39.0 的全部迁移步骤。该版本的核心变化是将项目依赖推进到 Kubernetes 1.31 API并引入 Kubebuilder v4.2.0 脚手架中的 NetworkPolicy网络策略安全加固能力。读完本文后你将能够独立完成 Gogo/v4、Helmhelm/v1、Ansibleansible/v1三类 Operator 工程的依赖升级、Makefile 与工具链更新以及/metrics端点与 Webhook Server 的 NetworkPolicy 安全防护配置。一、版本升级总览改了什么动了哪些文件与 v1.38.0 相比v1.39.0 的迁移量明显更小主要围绕以下文件展开受影响文件涉及的插件类型变更内容Makefilehelm/v1、ansible/v1kustomize 下载版本 v5.3.2 → v5.4.3go.modgo/v4ginkgo、gomega、k8s.io/*、controller-runtime 全面升级到 K8s 1.31 / controller-runtime v0.19.0Makefilego/v4ENVTEST_K8S_VERSION1.31.0、KUSTOMIZE_VERSIONv5.4.3、CONTROLLER_TOOLS_VERSIONv0.16.1、ENVTEST_VERSIONrelease-0.19cmd/main.gogo/v4更新 metrics server 相关注释中的 controller-runtime 版本链接config/default/kustomization.yamlgo/v4、helm/v1、ansible/v1新增[NETWORK POLICY]注释块默认注释按需启用config/network-policy/allow-metrics-traffic.yamlgo/v4、helm/v1、ansible/v1新增保护 /metrics 端点config/network-policy/allow-webhook-traffic.yamlgo/v4新增保护 Webhook Serverconfig/network-policy/kustomization.yamlgo/v4、helm/v1、ansible/v1新增聚合上述策略资源仓库 changelog 对本次发布的官方描述为Go、Helm、Ansible 三类 Operator 均迁移到 Kubernetes 1.31 API 与 Kubebuilder v4 脚手架v4.2.0并新增网络策略保护能力见 changelog/generated/v1.39.0.md。二、第一步helm/v1、ansible/v1更新 Makefile 中的 kustomize 版本Helm 与 Ansible 类 Operator 的脚手架通过 curl 直接下载 kustomize 二进制升级时需要同步替换下载地址中的版本号- curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v5.3.2/kustomize_v5.3.0_$(OS)_$(ARCH).tar.gz | \ curl -sSLo - https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v5.4.3/kustomize_v5.4.2_$(OS)_$(ARCH).tar.gz | \注意这里的两处细节URL 路径中的目录名是kustomize/v5.4.3而压缩包文件名是kustomize_v5.4.2_$(OS)_$(ARCH).tar.gz两者版本号不一致是正常的请按原文档 diff 精确替换不要顺手统一。升级后建议执行make kustomize重新拉取本地二进制确认bin/kustomize已指向新版本。作为对照仓库当前示例工程 testdata/helm/memcached-operator/Makefile 中 kustomize 的下载逻辑已经进一步演进下载kustomize/v5.6.0/kustomize_v5.6.0_$(OS)_$(ARCH).tar.gz说明该逻辑自 v1.39.0 之后持续由脚手架版本驱动升级时以你实际工程中的脚手架子版本为准。三、第二步go/v4升级 go.mod 依赖并执行 go mod tidyGo 类 Operator 需要将核心依赖整体升级到 Kubernetes 1.31 对应的版本线- github.com/onsi/ginkgo/v2 v2.17.1 - github.com/onsi/gomega v1.32.0 - k8s.io/api v0.30.1 - k8s.io/apimachinery v0.30.1 - k8s.io/client-go v0.30.1 - sigs.k8s.io/controller-runtime v0.18.4 github.com/onsi/ginkgo/v2 v2.19.0 github.com/onsi/gomega v1.33.1 k8s.io/api v0.31.0 k8s.io/apimachinery v0.31.0 k8s.io/client-go v0.31.0 sigs.k8s.io/controller-runtime v0.19.0修改完成后必须运行go mod tidygo mod tidy会根据升级后的依赖图重新解析并补全go.sum同时清理不再需要的间接依赖。如果项目后续还要生成 bundle建议一并重新生成相关清单文件避免旧版本依赖残留在产物中。四、第三步go/v4同步 Makefile 中的工具链版本Go 类工程的 Makefile 中有四处版本变量需要同步更新- ENVTEST_K8S_VERSION 1.30.0 ENVTEST_K8S_VERSION 1.31.0- KUSTOMIZE_VERSION ? v5.4.2 - CONTROLLER_TOOLS_VERSION ? v0.15.0 - ENVTEST_VERSION ? release-0.18 KUSTOMIZE_VERSION ? v5.4.3 CONTROLLER_TOOLS_VERSION ? v0.16.1 ENVTEST_VERSION ? release-0.19各变量的作用与配套关系如下ENVTEST_K8S_VERSIONsetup-envtest拉取的 etcd / kube-apiserver 二进制对应 Kubernetes 版本必须与k8s.io/api升级后的版本一致1.31否则make test时KUBEBUILDER_ASSETS指向的二进制版本可能与 API 版本不匹配。KUSTOMIZE_VERSIONkustomize 工具版本需与config/default/kustomization.yaml中的网络策略等新语法兼容。CONTROLLER_TOOLS_VERSIONcontroller-gen 版本升级到 v0.16.1 以正确解析 controller-runtime v0.19.0 新增的 API。ENVTEST_VERSIONsetup-envtest自身的 release 分支版本release-0.18→release-0.19与 controller-runtime 主版本线对齐。从仓库 testdata/go/v4/memcached-operator/Makefile 可以看到较新的脚手架子版本已把ENVTEST_VERSION与ENVTEST_K8S_VERSION改为从go.mod中 controller-runtime / k8s.io/api 版本自动推导未来升级时这类手工同步的成本会进一步降低。五、第四步go/v4更新 main.go 中的 controller-runtime 文档链接注释脚手架生成的cmd/main.go中metrics server 配置处有两条指向 controller-runtime 文档的注释需要把版本号从 v0.18.4 更新到 v0.19.0- // - https://pkg.go.dev/sigs.k8s.io/controller-runtimev0.18.4/pkg/metrics/server // - https://pkg.go.dev/sigs.k8s.io/controller-runtimev0.19.0/pkg/metrics/server - // https://pkg.go.dev/sigs.k8s.io/controller-runtimev0.18.4/pkg/metrics/filters#WithAuthenticationAndAuthorization // https://pkg.go.dev/sigs.k8s.io/controller-runtimev0.19.0/pkg/metrics/filters#WithAuthenticationAndAuthorization这两条注释分别指向 metrics server 的配置选项文档与filters.WithAuthenticationAndAuthorization指标端点的认证/授权过滤器文档。仓库中的 testdata/go/v4/memcached-operator/cmd/main.go 展示了这条调用链的实际形态metricsserver.Options的SecureServing开启时FilterProvider被设置为filters.WithAuthenticationAndAuthorization从而确保只有通过 RBAC 授权的用户与服务账户能访问指标端点。六、第五步所有插件类型在 config/default/kustomization.yaml 中登记 NetworkPolicy对 go/v4、helm/v1、ansible/v1 三类工程都需要在config/default/kustomization.yaml的resources区新增如下注释块默认保持注释状态按需启用 # [NETWORK POLICY] Protect the /metrics endpoint and Webhook Server with NetworkPolicy. # Only Pod(s) running a namespace labeled with metrics: enabled will be able to gather the metrics. # Only CR(s) which requires webhooks and are applied on namespaces labeled with webhooks: enabled will # be able to communicate with the Webhook Server. #- ../network-policy仓库中的实际示例 testdata/go/v4/memcached-operator/config/default/kustomization.yaml 与该 diff 完全一致且该文件同时保留了[WEBHOOK]、[CERTMANAGER]、[PROMETHEUS]、[METRICS]等既有注释块体现了 Kubebuilder 脚手架注释即开关的约定需要启用某项能力时取消对应行的注释即可。七、第六步所有插件类型添加 allow-metrics-traffic.yaml 保护 /metrics 端点在config/network-policy/目录下新建allow-metrics-traffic.yaml # This NetworkPolicy allows ingress traffic # with Pods running on namespaces labeled with metrics: enabled. Only Pods on those # namespaces are able to gathering data from the metrics endpoint. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: labels: app.kubernetes.io/name: operator-name app.kubernetes.io/managed-by: kustomize name: allow-metrics-traffic namespace: system spec: podSelector: matchLabels: control-plane: controller-manager policyTypes: - Ingress ingress: # This allows ingress traffic from any namespace with the label metrics: enabled - from: - namespaceSelector: matchLabels: metrics: enabled # Only from namespaces with this label ports: - port: 8443 protocol: TCP要点解读namespace: system策略部署在 operator 自身所在的system命名空间与config/manager中的 Namespace 命名约定一致。podSelector.matchLabels.control-plane: controller-manager选中运行中的 controller-manager Pod。从仓库 testdata/go/v4/memcached-operator/config/manager/manager.yaml 可见脚手架生成的 Namespace 与 Deployment 模板均带control-plane: controller-manager与app.kubernetes.io/name: memcached-operator标签实际工程中app.kubernetes.io/name会替换为你的 operator 名。policyTypes: [Ingress] 端口 8443metrics 端点默认通过 HTTPS 暴露在 8443 端口对应 Makefile 中manager_metrics_patch.yaml的约定。只有位于带metrics: enabled标签命名空间中的 Pod 才被允许抓取指标。仓库示例 testdata/go/v4/memcached-operator/config/network-policy/allow-metrics-traffic.yaml 与 testdata/helm/memcached-operator/config/network-policy/allow-metrics-traffic.yaml 中的实际内容与此一致差别仅在于app.kubernetes.io/name的具体取值。八、第七步helm/v1、ansible/v1添加 network-policy 的 kustomization.yamlHelm 与 Ansible 工程只需要一条 metrics 策略因此config/network-policy/kustomization.yaml内容为 resources: - allow-metrics-traffic.yaml仓库中的真实文件 testdata/helm/memcached-operator/config/network-policy/kustomization.yaml 与之完全一致。九、第八步go/v4添加 allow-webhook-traffic.yaml 保护 Webhook ServerGo 工程额外需要一条 Webhook 流量策略新建config/network-policy/allow-webhook-traffic.yaml # This NetworkPolicy allows ingress traffic to your webhook server running # as part of the controller-manager from specific namespaces and pods. CR(s) which uses webhooks # will only work when applied in namespaces labeled with webhook: enabled apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: labels: app.kubernetes.io/name: operator-name app.kubernetes.io/managed-by: kustomize name: allow-webhook-traffic namespace: system spec: podSelector: matchLabels: control-plane: controller-manager policyTypes: - Ingress ingress: # This allows ingress traffic from any namespace with the label webhook: enabled - from: - namespaceSelector: matchLabels: webhook: enabled # Only from namespaces with this label ports: - port: 443 protocol: TCP要点解读端口 443Webhook Server 通过 443 端口提供 HTTPS 服务对应manager_webhook_patch.yaml与 webhook service 的端口约定。命名空间标签webhook: enabled使用了 Webhook 的 CR 只有在带此标签的命名空间中应用才会生效这从网络层限制了哪些命名空间能与 Webhook Server 通信。仓库真实示例见 testdata/go/v4/memcached-operator/config/network-policy/allow-webhook-traffic.yaml。十、第九步go/v4聚合两条策略的 kustomization.yamlGo 工程的config/network-policy/kustomization.yaml需要同时包含两条策略 resources: - allow-webhook-traffic.yaml - allow-metrics-traffic.yaml仓库中的实际文件 testdata/go/v4/memcached-operator/config/network-policy/kustomization.yaml 与此完全一致。十一、启用与验证 NetworkPolicy完成上述文件添加后若希望真正启用网络策略保护还需两步取消config/default/kustomization.yaml中#- ../network-policy的注释让 kustomize 把config/network-policy下的策略合并进config/default的渲染结果。为相关命名空间打标签给需要抓取指标或使用 Webhook 的命名空间分别打上metrics: enabled与webhook: enabled标签否则流量会被策略默认拒绝。验证方式# 渲染完整清单确认 NetworkPolicy 资源已包含在内 kustomize build config/default | grep -A 20 kind: NetworkPolicy # 部署后确认策略生效 kubectl get networkpolicies -n operator-system由于 Go 工程实际部署时会先执行cd config/manager $(KUSTOMIZE) edit set image controller${IMG}再kustomize build config/default见 testdata/go/v4/memcached-operator/Makefilemake deploy或make build-installer后策略即随整体清单一起下发。十二、常见问题与注意事项URL 与文件名版本不一致kustomize 下载 URL 的目录版本v5.4.3与压缩包文件名版本v5.4.2不同是官方发布命名的正常现象严格照 diff 执行即可。ENVTEST_K8S_VERSION 与 API 版本必须对齐1.31.0 是make test能否通过的关键升级k8s.io/api后务必同步该变量。NetworkPolicy 默认关闭脚手架将其作为可选加固项未启用../network-policy前不影响原有功能启用后必须保证监控组件所在命名空间带metrics: enabled标签否则指标抓取会失败。app.kubernetes.io/name占位符策略清单中的operator-name需要替换为你的实际 operator 名与config/manager/manager.yaml中的 Deployment 标签保持一致否则podSelector无法命中 Pod。后续版本参考本升级与 Kubebuilder 上游 PRprotect project with network policies一脉相承更多演进细节可对照仓库更新至 v1.39.1、v1.39.2 及 v1.40.0 的升级文档见 website/content/en/docs/upgrading-sdk-version 目录下的对应文件。结语v1.39.0 的升级核心是依赖版本线整体跃迁到 Kubernetes 1.31 controller-runtime v0.19.0以及引入 NetworkPolicy 脚手架为 /metrics 与 Webhook 端点提供命名空间级的网络隔离。按照本文九个步骤依次执行即可完成 go/v4、helm/v1、ansible/v1 三类工程的安全平滑升级。赞分享云原生后端开发工具微服务【免费下载链接】operator-sdkSDK for building Kubernetes applications. Provides high level APIs, useful abstractions, and project scaffolding.项目地址https://gitcode.com/gh_mirrors/op/operator-sdk点击查看免费下载相关推荐operator-sdk v1.39.0 升级指南Kubernetes 1.31 API 迁移与 Kubebuilder v4 NetworkPolicy 脚手架operator sdk v1.39.0 升级指南Kubernetes 1.31 API 迁移与 Kubebuilder v4 NetworkPolicy 脚云原生后端开发工具微服务Operator SDK v1.38.0 升级指南迁移 Kubernetes 1.30 与 Kubebuilder v4重构 Metrics 端点安全Operator SDK v1.38.0 升级指南迁移 Kubernetes 1.30 与 Kubebuilder v4重构 Metrics 端点安全 Op云原生后端开发工具微服务operator-sdk alpha generate 详解使用 Kubebuilder 重新脚手架已有 Operator 项目operator sdk alpha generate 详解使用 Kubebuilder 重新脚手架已有 Operator 项目 本文是 operator s云原生后端开发工具微服务上一篇Pixelorama终极指南从零开始掌握开源像素艺术创作神器下一篇3分钟免费激活Windows和OfficeKMS智能激活脚本终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/29 14:34:58

Codex、Claude Code、OpenCode 统一接入火山方舟配置指南

这一两周,我身边至少有三拨人在折腾同一件事:把 Codex、Claude Code 和 OpenCode 这三款终端里的 AI 编程工具,全部切到火山方舟的模型 API 上。折腾完之后大家发现,其实思路是通的,真正卡人的是几个细节——配置文件长…

2026/9/29 14:34:58

Claude Code与Codex双AI协作工作流:提交前验证清单实践

最近我的开发环境里同时挂了两个AI编程工具:Claude Code 和 Codex。不少朋友问我,这东西装两个是不是浪费,到底哪个好用。这问题我一开始也答不上来,直到某天让 Codex 改完一个函数,它给出了“任务完成”的提示&#x…

2026/9/29 14:34:58

基于Dify搭建“hindsight”复盘助手:从工作流到知识库的完整实践

1. 需求与场景拆解:为什么是“hindsight”先说结论:“hindsight”这个词,直译是“后见之明”,但放在今天的AI应用语境里,它代表的是一类特别有实用价值的产品——“回溯复盘助手”。不管你是个人开发者、产品经理、内容…

2026/9/30 16:59:36

第310篇_漫展排期信息聚合

【Python爬虫实战】第310篇:全国漫展排期抓取:一站式聚合你所在城市的漫展日历——实战项目 所属专栏:【Python爬虫实战】从零到企业级爬虫工程师(CSDN 付费专栏) 本篇篇目:第 310 篇(垂直行业爬虫 漫展活动聚合专题) 难度等级:入门级,零基础可跟 阅读时长:约 25 分…

2026/9/30 16:59:36

很多老板误解的财税规划,不只是简单节税

在日常服务企业的过程中,我们发现很多中小企业老板,对财税规划存在一个普遍误区:认为财税规划,就等于想方设法少交税,核心目标只是实现节税。不少人会到处打听各类所谓 “降税妙招”,把全部注意力放在税负数…

2026/9/30 16:59:36

第308篇_高考志愿数据抓取

【Python爬虫实战】第308篇:阳光高考院校与专业数据抓取:搭建你的高考志愿参考库——实战项目 所属专栏:【Python爬虫实战】从零到企业级爬虫工程师(CSDN 付费专栏) 本篇篇目:第 308 篇(垂直行业爬虫 高考志愿专题) 难度等级:进阶,需一定工程经验 阅读时长:约 25 分…

2026/9/30 16:54:36

HarmonyOS 7 + Form Kit + UIAbility 实战:运营看板卡片的刷新策略、状态同步与点击回流【鸿蒙心迹】

这一篇我想聊的是看起来很轻、做起来却很容易失衡的一类功能:桌面卡片。很多人第一次做运营看板卡片,最先关注的是“怎么把一块卡片显示出来”。但真正把它做成一个能用、可信、可跳转、可同步的业务入口以后,你会发现难点根本不在“显示”&a…

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 0:01:22

MATLAB+Yalmip+CPLEX实战:综合能源系统优化调度全流程解析

做综合能源系统优化调度这活儿,最痛苦的不是建模本身,而是模型写完之后不知道该怎么求解。看论文里轻飘飘一句“采用Yalmip调用CPLEX求解”,自己上手时却往往卡在环境配置、变量声明、约束写法和求解状态判读上,一耗就是两三天。这…

2026/9/30 0:01:22

I3C比I2C快10倍?RK3576实战:速率、DTS配置与混合总线避坑指南

I3C 比 I2C 快 10 倍?这句话在嵌入式群里传了很久,每次都能吵出一堆截图。前段时间我正好在 RK3576 上调板级 I3C 接口,从控制器寄存器一路摸到 Linux DTS 配置,踩了不少坑,也把这笔速度账彻底算明白了。本文就用 RK35…

2026/9/30 0:01:22

字符串转对象:JSON.parse、new Function与URLSearchParams

“字符串转对象”这几个字,我在技术群里见过的问法至少有十几种:有人拿着一串{a:1,b:2}说 JSON.parse 直接报错,有人要从 URL 里抠出参数,还有人只是想把abc变成能挂属性的东西。js 这门语言里,字符串和对象之间的转换…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/30 10:28:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑