十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ingress-nginx controller v1.10.5 版本发布解读:镜像构建、多租户警告与关键指标修复全解析

ingress-nginx controller v1.10.5 版本发布解读:镜像构建、多租户警告与关键指标修复全解析 ingress-nginx controller v1.10.5 版本发布解读镜像构建、多租户警告与关键指标修复全解析【免费下载链接】ingress-nginxIngress NGINX Controller for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/in/ingress-nginx导读本文基于 ingress-nginx 官方仓库的 controller-v1.10.5 变更日志系统解读该补丁版本的核心变更包括多架构镜像构建策略含 s390x 支持、Go 与 NGINX 基础镜像版本升级、多租户安全警告、--watch-namespace使用说明以及nginx_ingress_controller_ssl_expire_time_seconds指标的 namespace 修复。文章同时结合仓库源码如 指标收集器实现、启动参数解析、Helm 模板逐一印证各项变更的底层实现帮助读者理解该版本在工程构建、测试与安全方面做了什么、为什么这么做。说明文中涉及的镜像 Digest、依赖版本均为 v1.10.5 发布时的快照当前仓库已演进到更高版本如NGINX_BASE已是 v2.2.8、Go 已是 1.26.1引用当前源码仅用于印证 v1.10.5 所引入的机制与修复仍然存在且可验证。一、版本定位与镜像产物controller-v1.10.5 是 ingress-nginx v1.10.x 系列的一个补丁版本patch release发布于 Go 1.22 时代该版本将 Go 升级到v1.22.8PR #12093。变更日志给出的官方镜像为registry.k8s.io/ingress-nginx/controller:v1.10.5sha256:c84d11b1f7bd14ebbf49918a7f0dc01b31c0c6e757e0129520ea93453096315c registry.k8s.io/ingress-nginx/controller-chroot:v1.10.5sha256:030a43bdd5f0212a7e135cc4da76b15a6706ef65a6824eb4cc401f87a81c2987其中controller-chroot是 chroot 变体镜像对应仓库根目录下的 rootfs/Dockerfile-chroot 与 chroot.sh。镜像的运行时版本信息由 version/version.go 中的RELEASE、COMMIT、REPO三个变量在构建期注入控制器启动日志会输出形如NGINX Ingress controller / Release: v1.10.5 / Build: commit的信息可通过kubectl logs快速核对部署的实际版本。镜像的命名与归档规则由 magefiles/steps/release.go 中的发布流程生成变更日志中的Images: Trigger ...条目即来自发布流水线中对各子镜像的构建触发。二、多架构构建s390x 的加入与回退v1.10.5 的镜像构建变更记录了 s390xIBM LinuxONE / Z 系列架构的支持过程Images: Build s390x controller.(#12128)为 controller 镜像新增 s390x 架构构建Images: Drop s390x.(#12139)随后又移除了 s390x。这一加入又移除的过程表明 s390x 支持在 CI 构建链中cloudbuild.yaml 及子镜像目录中的构建配置存在可用性问题而被回退。结合镜像定义可知仓库通过 images/nginx/TAG 等 TAG 文件管理镜像版本子镜像e2e-test-echo、test-runner、custom-error-pages等各自拥有独立的构建触发条目如Images: Trigger e2e-test-echo build.#12142。对使用 s390x 架构集群的读者这一点意味着v1.10.5 最终发布产物不含 s390x 的 controller 镜像部署前应通过docker manifest inspect registry.k8s.io/ingress-nginx/controller:v1.10.5确认目标架构的 manifest 是否可用。三、版本升级Go、NGINX 基础镜像与依赖3.1 Go 工具链与 NGINX 基础镜像Go: Bump to v1.22.8.(#12093)将编译 Go 工具链升级到 1.22.8同时Go: Bump to v1.22.7.(#11969) 是更早的一次升级。注意当前仓库根目录的 GOLANG_VERSION 已为 1.26.1这是仓库演进后的状态v1.10.5 时代的工具链以 changelog 为准。Images: Bump NGINX_BASE to v0.1.0.(#12079) 与Images: Remove NGINX v1.21.(#12057)NGINX_BASE指向 ingress-nginx 定制的 NGINX 基础镜像仓库根目录的 NGINX_BASE 当前为 v2.2.8对应 controller-v1.15.x 时代。v1.10.5 将 NGINX 基础镜像升级到 v0.1.0 并移除 NGINX 1.21 分支意味着 1.21 不再获得构建与测试覆盖相关*.patch补丁从 images/nginx/rootfs/patches 体系中被淘汰。Images: Use latest Alpine 3.20 everywhere.(#11945)各镜像的 rootfs 统一基于 Alpine 3.20可从 rootfs/Dockerfile 及各子镜像 Dockerfile 验证。3.2 主要依赖升级清单节选依赖版本变化PRgolang.org/x/crypto0.27.0 → 0.28.0#12108sigs.k8s.io/mdtoc1.1.0 → 1.4.0#12088github.com/prometheus/common0.59.1 → 0.60.0#12086google.golang.org/grpc1.67.0 → 1.67.1#12084k8s.io/cli-runtime0.30.0 → 0.31.1#12082github.com/prometheus/client_golang1.20.3 → 1.20.4#12011github.com/opencontainers/runc1.1.13 → 1.1.14#11929sigs.k8s.io/controller-runtime0.18.4 → 0.19.0#11847k8s.io/component-base0.30.3 → 0.31.0#11841github.com/onsi/ginkgo/v22.20.1 → 2.20.2#11912此外还包括 kube-webhook-certgenimages/kube-webhook-certgen的 Helm Chart 依赖升级#12122以及 OpenTelemetry C Contrib 的升级#11950与 docs/user-guide/third-party-addons/opentelemetry.md 描述的可观测性链路相关。Dependabot 分组机制actions group、go group、all group的引入#12037使这类批量升级成为常规操作。四、多租户安全警告官方明确的使用边界Docs: Add a multi-tenant warning.(#12098) 是本版本值得重点关注的文档变更。该警告的完整内容在 docs/deploy/hardening-guide.md 和 docs/faq.md 中均可找到原文Do not use in multi-tenant Kubernetes production installations. This project assumes that users that can create Ingress objects are administrators of the cluster.其核心含义是ingress-nginx 假设能创建 Ingress 对象的用户等同于集群管理员因此不应在多租户生产集群中使用。理由在于控制面存在全局级与单 Ingress 级的配置项一旦开启就可能跨租户越权。最典型的例子是 docs/user-guide/nginx-configuration/annotations.md 中关于nginx.ingress.kubernetes.io/auth-tls-secret类注解的说明在多租户集群中它可能让权限受限的用户读取集群内所有 Secret参见 CVE-2021-25742。对运维者的实践指导若集群存在多个互不信任的租户应评估其他隔离方案如每租户独立 Ingress Controller 独立命名空间配合 RBAC 限制 Ingress 创建权限对server-snippet、configuration-snippet、auth-tls-secret等高危注解应通过 controller-configmap 中的allow-snippet-annotations: false等开关收紧。五、--watch-namespace使用说明与参数互斥Docs: Add note about --watch-namespace.(#11948) 补充了单命名空间监听模式的说明。该参数在源码 pkg/flags/flags.go 中定义watchNamespace flags.String(watch-namespace, apiv1.NamespaceAll,默认值为apiv1.NamespaceAll即空字符串监听全部命名空间。与它配套的还有--watch-namespace-selectorpkg/flags/flags.go按标签选择器监听命名空间。关键约束在 pkg/flags/flags.go 中强制校验if *watchNamespace ! *watchNamespaceSelector ! { return false, nil, fmt.Errorf(flags --watch-namespace and --watch-namespace-selector are mutually exclusive) } if *watchNamespaceSelector ! { namespaceSelector, err labels.Parse(*watchNamespaceSelector) ... }即--watch-namespace与--watch-namespace-selector互斥二者同时指定会直接报错退出。使用建议只想监听单个命名空间--watch-namespacemy-app想按标签过滤多个命名空间--watch-namespace-selectorenvironmentprod需要注意监听范围缩小后控制器不再处理范围外的 Ingress、Service 与 Secret默认后端default backend等全局资源若位于范围外可能影响其更新同步。六、关键指标修复ssl_expire_time_seconds的 namespace 修正Metrics: Fix namespace in nginx_ingress_controller_ssl_expire_time_seconds.(#11985) 是本版本唯一直接的指标代码修复。该指标用于暴露证书过期时间Unix 时间戳秒其定义位于 internal/ingress/metric/collectors/controller.gosslExpireTime: prometheus.NewGaugeVec( prometheus.GaugeOpts{ Namespace: PrometheusNamespace, Name: ssl_expire_time_seconds, Help: Number of seconds since 1970 to the SSL Certificate expire. An example to check if this certificate will expire in 10 days is: nginx_ingress_controller_ssl_expire_time_seconds (time() (10 * 24 * 3600)), }, sslLabelHost, ),该指标带class、host、identifier、namespace、secret_name等标签sslLabelHost标签集合修复点在于标签中的namespace字段此前可能取错值v1.10.5 将其修正为证书 Secret 所在的真实命名空间。测试用例 internal/ingress/metric/collectors/controller_test.go 中对该指标的期望输出为nginx_ingress_controller_ssl_expire_time_seconds{classnginx,hostdemo,identifierabcd1234-100,namespacesecret-namespace,secret_namesecret-name} 1.351807721e09运维告警示例证书 10 天内过期告警nginx_ingress_controller_ssl_expire_time_seconds (time() (10 * 24 * 3600))使用该指标前请确认已通过 controller-configmap 开启证书指标采集enable-ssl-chain-completion与 SSL 相关监听配置并保证 Prometheus 拉取地址为控制器 metrics 端口默认 10254见 charts/ingress-nginx/README.md 的controller.metrics.service.servicePort。七、Helm Chart 改进与准入 Webhook 端口可配置本版本 Chart 侧对应 Helm Chart 3.26.0见 charts/ingress-nginx/changelog/helm-chart-3.26.0.md包含多项可验证的模板与测试改进7.1 新增controller.admissionWebhooks.service.servicePortChart: Implement controller.admissionWebhooks.service.servicePort.(#11933) 为准入 Webhook 的 Service 引入了可配置端口模板实现在 charts/ingress-nginx/templates/admission-webhooks/validating-webhook.yamlport: {{ .Values.controller.admissionWebhooks.service.servicePort }}该参数默认值为443见 charts/ingress-nginx/README.md。它解决了 Webhook Service 端口被写死为 443、导致在已占用 443 端口的环境无法安装的问题——现在可以在values.yaml中按需调整。7.2 可用性测试与资源配置对齐Chart: Test controller.minAvailable controller.maxUnavailable.(#12001)为 controller-poddisruptionbudget.yaml 新增了针对 PDB 两个关键字段的单元测试Chart: Align default backend PodDisruptionBudget.(#11998)对齐默认后端default-backend-deployment.yaml的 PDB 行为Chart: Improve default backend service account.(#11973)完善默认后端 ServiceAccount 的模板与测试default-backend-serviceaccount_test.yamlChart: Add tests for PrometheusRule ServiceMonitor.(#11888)为 controller-prometheusrule.yaml 和 controller-servicemonitor.yaml 补齐测试Chart: Extend image tests.(#12026) 与Chart: Improve CI.(#12029)扩展镜像相关渲染测试并改进 Chart CI。这些 Chart 测试均基于 Helm Chart 测试框架charts/ingress-nginx/tests 下的*_test.yaml渲染templates/*.yaml并对结果做断言。八、注解解析与其余杂项修复Annotations: Allow commas in URLs.(#11886)修复注解 URL 值中包含逗号时被错误拆分的问题。注解解析框架位于 internal/ingress/annotations/parser所有注解如auth-url、proxy-next-upstream等经统一的Parser注册表处理本修复保证带逗号参数的 URL 在进入 NGINX 配置模板前不被误截断。Docs: Add health check annotations for AWS.(#12021)在 deploy/static/provider/aws 相关文档中补充 AWS 健康检查注解说明。Docs: Convert opentelemetry.md from CRLF to LF.(#12007)修正 docs/user-guide/third-party-addons/opentelemetry.md 的行尾格式。Go: Sync go.work.sum.(#11876) 与Replace deprecated queue method.(#11858)分别同步 Go workspace 校验和、替换已废弃的队列方法internal/task/queue.go。Auto-generate annotation docs.(#11835)注解文档改为自动生成对应 hack/update-annotation-doc.sh 与 hack/verify-annotation-docs.sh 的流水线保证 docs/user-guide/nginx-configuration/annotations.md 与源码中的注解定义始终同步。Update maxmind post link about geolite2 license changes.(#11880)更新 MaxMind GeoLite2 许可变更的参考链接涉及 internal/nginx/maxmind.go 使用的 GeoIP 数据库说明。CI: Grant checks write permissions to E2E Test Report.(#11884)、GitHub: Improve Dependabot.(#12037)均为 CI/GitHub Actions 层面的工程化改进。九、测试与构建基线的整体升级v1.10.5 同步升级了 e2e 测试工具链镜像镜像版本PRe2e-test-echov1.0.1#12146、#12142e2e-test-runnerv20241004-114a6abb#12104、#12101test-runner同步触发构建#12101gcb-docker-gcloudCloud Buildv20240718-5ef92b5c36#12116其中 e2e-test-echo 用于 e2e 测试中的回显服务test/e2e 下大量用例依赖它验证请求头、路径重写等行为test-runner 对应 images/test-runner其 TAG 文件记录了当前版本。e2e 测试的完整入口可见 test/e2e/e2e_test.go 与 test/e2e/run-e2e-suite.sh。十、升级建议与总结controller-v1.10.5 是一个以构建与工程化为主的补丁版本无破坏性 API 变更升级风险低。升级时建议使用日志给出的固定 Digest 拉取镜像保证供应链可复现registry.k8s.io/ingress-nginx/controller:v1.10.5sha256:c84d...升级前确认集群 CPU 架构x86_64 / arm64在发布 manifest 覆盖范围内s390x 已回退若部署环境 443 端口被占用可利用本次新增的controller.admissionWebhooks.service.servicePort调整 Webhook 端口升级后检查nginx_ingress_controller_ssl_expire_time_seconds的namespace标签是否符合预期并核对 Prometheus 告警表达式多租户集群务必阅读 docs/deploy/hardening-guide.md 的警告并评估隔离方案。完整变更对比可见 changelog 中给出的 controller-v1.10.4 → controller-v1.10.5 的提交范围以及本仓库根目录的 Changelog.md 与其他历史版本记录changelog 目录。对于希望跟进每个版本镜像、参数与修复细节的读者changelog/controller.md.gotmpl 展示了该系列变更日志的生成模板magefiles/utils/releasenote.go 则实现了自动化的发布说明组装逻辑。【免费下载链接】ingress-nginxIngress NGINX Controller for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/in/ingress-nginx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表