ingress-nginx v1.8.1 发布解读:Helm loadBalancerClass、KEDA fallback 与镜像变更全解析
2026/9/13 7:57:25 网站建设 项目流程

ingress-nginx v1.8.1 发布解读:Helm loadBalancerClass、KEDA fallback 与镜像变更全解析

【免费下载链接】ingress-nginxIngress NGINX Controller for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/in/ingress-nginx

导读

本篇文章基于 ingress-nginx 官方仓库的 controller-1.8.1 变更日志,对 v1.8.1 这个补丁版本进行深度解读。v1.8.1 是继 v1.8.0 之后的一个小版本迭代,主要包含两个对用户有实际影响的 Helm 功能增强(controller.service.loadBalancerClasscontroller.service.internal.loadBalancerClass支持、KEDA ScaledObject fallback 配置)、一处 gRPC:authority请求头修复、镜像 tag 回退修正以及一批 Go 依赖与 CI 依赖升级。读完本文,你将掌握如何在 v1.8.1 及后续版本中通过 Helm values 为云厂商自定义负载均衡器实现、为 KEDA 弹性伸缩配置降级保护,以及如何理解镜像摘要(digest)与 tag 之间的关系。

v1.8.1 版本概览与镜像清单

v1.8.1 属于补丁版本(Patch Release),对应的 Helm Chart 版本为 4.7.1(可在 helm-chart-4.7.1.md 中核对)。该版本随附两个正式发布的控制器镜像:

镜像完整引用(含 SHA256 摘要)
标准控制器registry.k8s.io/ingress-nginx/controller:v1.8.1@sha256:e5c4824e7375fcf2a393e1c03c293b69759af37a9ca6abdb91b13d78a93da8bd
chroot 控制器registry.k8s.io/ingress-nginx/controller-chroot:v1.8.1@sha256:e0d4121e3c5e39de9122e55e331a32d5ebf8d4d257227cb93ab54a1b912a7627

关于 digest 的使用说明:上述@sha256:...形式的镜像引用将镜像与内容摘要强绑定。只要镜像内容发生变化,即使 tag 仍为v1.8.1,digest 也会改变。在变更日志中同时给出 tag 与 digest,便于复现环境、保证供应链可审计性。仓库根目录下的 TAG 文件记录了当前代码库所对应的发布版本,可作为版本核对依据。

核心功能变更解析

1. Helm:新增 loadBalancerClass 支持(#9562)

v1.8.1 中最值得关注的用户侧功能是feat(helm): Add loadBalancerClass (#9562)。该特性为控制器对外与对内的两类 Service 均新增了loadBalancerClass字段,使控制器 Service 可以使用 Kubernetes 1.24+ 引入的spec.loadBalancerClass机制,选择云厂商默认实现之外的自定义负载均衡器。

该变更在 Helm Chart 中的落地体现在两处模板:

  • controller-service.yaml(对外 Service):
    {{- if .Values.controller.service.loadBalancerClass }} loadBalancerClass: {{ .Values.controller.service.loadBalancerClass }} {{- end }}
  • controller-service-internal.yaml(内部 Service,通过--enable-*-internal-service或对应 values 开启):
    {{- if .Values.controller.service.internal.loadBalancerClass }} loadBalancerClass: {{ .Values.controller.service.internal.loadBalancerClass }} {{- end }}

对应的 values 默认值在 values.yaml(对外)与 values.yaml(对内)中均为空字符串"",即默认不启用,保持与云厂商默认负载均衡行为一致。Helm Chart 的 README 参数表(README.md 与 README.md)对两个参数的定义是:用于让云厂商选择非默认的负载均衡器实现。

典型使用场景:在 AWS 上使用自建或第三方 Load Balancer Controller(如 AWS Load Balancer Controller 的 Gateway/自定义 LB 场景),或在支持loadBalancerClass的多 LB 实现的云环境中,通过以下 values 指定实现类:

controller: service: loadBalancerClass: "example.com/my-lb-class" internal: loadBalancerClass: "example.com/my-internal-lb-class"

关联修复Fix loadBalancerClass value (#10139)与文档修正Update typo in docs for lb scheme (#10117)说明,该特性在上线过程中同步修正了 values 取值与文档拼写问题,使用时应以 Chart 4.7.1 及以后版本的 values.yaml 为准。

2. KEDA 弹性伸缩:新增 fallback 配置支持(#9993)

另一项对弹性伸缩用户有实际意义的新增是add support for keda fallback settings (#9993)。KEDA 的fallback机制用于在指标触发器失效(如指标服务不可达)时,将副本数回退到指定的兜底值,避免缩容到 0 导致服务中断。

该特性落地于 controller-keda.yaml:

{{- with .Values.controller.keda.fallback }} fallback: failureThreshold: {{ .failureThreshold | default 3 }} replicas: {{ .replicas | default $.Values.controller.keda.maxReplicas }} {{- end }}

默认值在 values.yaml 中以注释形式给出示范:

# fallback: # failureThreshold: 3 # replicas: 11

配置要点:

  • failureThreshold:触发器连续失败多少次后触发 fallback,默认 3;
  • replicas:fallback 时的目标副本数,默认取controller.keda.maxReplicas

同时注意模板头部条件(controller-keda.yaml):KEDA ScaledObject 仅在controller.kindDeploymentcontroller.keda.enabled为 true 且未启用controller.autoscaling时渲染,三者互斥,配置时需确保不会同时开启 HPA 与 KEDA。

启用示例:

controller: kind: Deployment keda: enabled: true apiVersion: "keda.sh/v1alpha1" minReplicas: 1 maxReplicas: 11 pollingInterval: 30 cooldownPeriod: 300 fallback: failureThreshold: 3 replicas: 3 triggers: - type: prometheus metadata: serverAddress: http://prometheus:9090 metricName: http_requests_total threshold: "100" query: sum(rate(http_requests_total{deployment="ingress-nginx-controller"}[2m]))

3. gRPC:从请求头设置 :authority(#8912)

变更Set grpc :authority header from request header (#8912)修复了 gRPC 转发时的:authority伪头(pseudo-header)设置问题。在 nginx 中,gRPC 上游转发使用grpc_set_header而非普通的proxy_set_header,二者语法不同。

这一区分在源码中有明确实现:internal/ingress/controller/template/template.go中的proxySetHeader函数(template.go)会根据 location 的BackendProtocol判断协议:

if location.BackendProtocol == grpcProtocol || location.BackendProtocol == grpcsProtocol { return "grpc_set_header" } return "proxy_set_header"

对应的模板测试 template_test.go 也验证了 gRPC 场景下应输出grpc_set_header。该修复确保在backend-protocol: GRPC/GRPCS的 Ingress 上,请求的:authority能正确从原始请求头继承,避免 gRPC 路由或服务端校验失败。使用 gRPC 服务的用户升级到 v1.8.1 后应关注此行为变化,可参考 gRPC 使用示例。

4. 镜像与构建:baseimage 回退、distroless OTEL init

  • changed to updated baseimage and reverted tag (#10143):更新了控制器基础镜像(base image),并将镜像 tag 回退以匹配 baseimage 的版本,保证镜像 digest 与 tag 语义一致。
  • add distroless otel init (#10035):为 distroless(非 chroot)镜像形态补充 OpenTelemetry(OTel)初始化逻辑,配合 opentelemetry 使用指南 使用。

行为修正与其他变更

v1.8.1 还包含若干行为修正,其中有两处涉及 nginx 配置生成,值得说明:

Mirror 注解相关的修复(#9889 与 #10089)

Fix mirror-target values without path separator and port (#9889)修正了nginx.ingress.kubernetes.io/mirror-target注解中「无路径分隔符 + 带端口」组合的解析问题。镜像注解的解析逻辑位于 internal/ingress/annotations/mirror/main.go:当未显式设置mirror-host时,会从mirror-target拆解出主机名作为 Host 头;此次修复保证形如https://mirror.example.com:8443(无路径但有端口)的目标地址能被正确解析。镜像功能涉及mirror-request-bodymirror-targetmirror-host三个注解(main.go),其中mirror-targetmirror-host被标注为高风险(AnnotationRiskHigh,见 main.go),在开启注解风险分级(annotations-risk-level)的环境下需注意。

chore: remove echo from canary tests (#10089)chore: remove echo from snippet tests (#10110)则是测试框架层面的清理,将 canary 与 snippet 的 e2e 测试从临时 echo 容器迁移到httpbun框架(chore: move httpbun to be part of framework (#9955))。

其他功能与文档变更

  • feat: Oracle Cloud Infrastructure Flexible Load Balancer 配置升级 (#9961):针对 Oracle 云部署清单 更新了 Flexible Load Balancer 的创建与健康检查配置。
  • fix: obsolete warnings (#10029)unnecessary use of fmt.Sprint (S1039) (#10049)chore: pkg imported more than once (#10048):代码静态检查与 lint 清理。
  • ensured hpa mem spec before cpu spec (#10043):调整 HPA 模板中内存与 CPU 指标声明顺序。
  • 文档类:docs: add lua testing documentation (#10060)(新增 lua_tests.md 测试文档)、docs: canary weighted deployments example (#10067)(canary 加权部署示例)、Update Internal Load Balancer Docs (#10062)docs: add netlify configuration (#10073)netlify: Only trigger preview when there are changes in docs (#10144)(仅当文档目录变更时才触发 Netlify 预览构建)、fix broken kubernetes.io/user-guide/ docs links (#10055)docs: Updated the content of deploy/rbac.md (#10054)(RBAC 文档)、docs: change Dockerfile url ref main (#10087)
  • 其他:fix: add canary to sidebar in examples (#10068)added note on dns for localtesting (#10021)added helm show values example (#10019)update test runner (#10125)

依赖升级清单

v1.8.1 的 Go 依赖升级重点是 Golang 工具链的两次推进:Upgrade to Golang 1.20.4 (#10016)bump pinned golang to 1.20.5 (#10127)/golang 1.20.5 bump (#10120),最终固定到 Go 1.20.5。仓库根目录的 GOLANG_VERSION 文件记录了构建所用 Go 版本,可用于复现构建环境。

关键依赖升级汇总:

依赖升级内容
google.golang.org/grpc1.55.0 → 1.56.0 → 1.56.1(#10103 / #10134)
github.com/prometheus/client_golang1.15.1 → 1.16.0(#10106)
golang.org/x/crypto0.9.0 → 0.10.0(#10105)
github.com/stretchr/testify1.8.2 → 1.8.3 → 1.8.4(#10005 / #10041)
github.com/emicklei/go-restful/v3升级到 3.10(#10028)
dd-opentracing-cpp(Datadog tracing)升级到 v1.3.7(#10031)

CI 与供应链相关依赖同样有批量升级:ossf/scorecard-action 2.1.3 → 2.2.0(#10133,OpenSSF Scorecard 安全评分)、goreleaser/goreleaser-action 4.2.0 → 4.3.0(#10101)、docker/setup-buildx-action(#10077 / #10102)、docker/setup-qemu-action 2.1.0 → 2.2.0(#10075)、actions/checkout 3.5.2 → 3.5.3(#10076)、aquasecurity/trivy-action 0.10.0 → 0.11.2(#10078,Trivy 镜像漏洞扫描)、actions/dependency-review-action(#10042)。

升级建议与验证方法

  1. 镜像升级:生产环境建议使用带 digest 的完整镜像引用(见上文镜像清单),避免 tag 漂移带来的不可复现问题;chroot 形态使用controller-chroot镜像。
  2. 新功能验证:启用loadBalancerClass后,可通过kubectl get svc -n ingress-nginx -o yaml检查 Service 的spec.loadBalancerClass字段;启用 KEDA fallback 后,检查ScaledObjectspec.fallback字段,并可通过临时停用指标源观察副本数是否回退到兜底值。
  3. gRPC 行为核对:若生产环境存在 gRPC 流量,升级后建议回归验证:authority头的透传,确保后端按 host 路由的服务不受影响;相关 e2e 覆盖可参见 e2e 测试框架。
  4. 依赖与安全:本版本将 Go 固定到 1.20.5,并升级了 Trivy、Scorecard 等安全扫描工具链,配合 SECURITY.md 中的漏洞报告流程,可整体提升镜像供应链的可审计性。

参考资源

  • 版本变更日志原文:controller-1.8.1.md
  • 对应 Helm Chart 变更日志:helm-chart-4.7.1.md
  • Helm 参数总表:values.yaml 与 Chart README
  • 相关源码:controller-keda.yaml、controller-service.yaml、mirror 注解解析、gRPC 头设置实现

【免费下载链接】ingress-nginxIngress NGINX Controller for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/in/ingress-nginx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询