版本发布背景
2026年4月23日,Kubernetes v1.36"春归万物生"正式发布。本版本在功能层面以服务网格深度集成为主旋律,但最紧迫的运维事项是:Ingress-NGINX已于2026年3月24日正式退役。
全球约67%的K8s集群使用Ingress-NGINX(根据CNCF 2026 Survey),这意味着数百万条件群需要进行流量入口层的迁移。
一、Ingress-NGINX退役影响评估
1.1 退役时间线
2025-12-15 SIG Network宣布Ingress-NGINX将在2026年Q1退役2026-01-20 发布最后一个功能版本 ingress-nginx v1.11.52026-03-24 官方宣布退役,停止安全补丁支持2026-06-30 Docker Hub官方镜像归档(不再更新)1.2 不升级的风险
如果继续使用已退役的Ingress-NGINX:
- ❌ 不再收到CVE安全补丁
- ❌ 不支持K8s 1.36新特性(如ServiceCIDR v1 GA)
- ❌ 社区Issue不再响应
- ❌ 依赖的nginx基础镜像将落后于安全更新
1.3 迁移选项对比
| 方案 | 适用场景 | 迁移复杂度 | 额外能力 |
|---|---|---|---|
| Gateway API + Nginx GW Controller | 最小改动 | 低 | Gateway API标准化 |
| Istio + Gateway API | 需要服务网格 | 中 | mTLS、流量治理 |
| Cilium Ingress/Gateway | 高性能需求 | 中 | eBPF加速 |
| Traefik v3 | 简单场景 | 低 | 自动证书管理 |
| Envoy Gateway | 大规模场景 | 高 | 高度可定制 |
二、迁移到Gateway API实战
2.1 安装Gateway API CRDs
# 安装Gateway API v1.2(K8s 1.36配套版本)kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml# 验证安装kubectl get crd | grep gateway.networking.k8s.io# 应显示:# gatewayclasses.gateway.networking.k8s.io# gateways.gateway.networking.k8s.io# httproutes.gateway.networking.k8s.io# grpcroutes.gateway.networking.k8s.io2.2 部署Nginx Gateway Fabric(官方替代方案)
# 安装Nginx Gateway Fabric(原Ingress-NGINX团队维护的Gateway API实现)helm repo add nginx-stable https://helm.nginx.com/stablehelm repo updatehelm install nginx-gateway nginx-stable/nginx-gateway-fabric \ --namespace nginx-gateway \ --create-namespace \ --set service.type=LoadBalancer \ --version 1.4.02.3 迁移示例:Ingress → HTTPRoute
原Ingress配置:
# 旧版 Ingress(即将失效)apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: my-app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/proxy-body-size: "50m" nginx.ingress.kubernetes.io/rate-limit: "100"spec: ingressClassName: nginx tls: - hosts: - api.example.com secretName: api-tls rules: - host: api.example.com http: paths: - path: /api/v1 pathType: Prefix backend: service: name: api-service port: number: 8080新版Gateway API配置:
# Gateway定义(集群级别,运维团队管理)apiVersion: gateway.networking.k8s.io/v1kind: Gatewaymetadata: name: prod-gateway namespace: nginx-gatewayspec: gatewayClassName: nginx listeners: - name: https port: 443 protocol: HTTPS hostname: "*.example.com" tls: mode: Terminate certificateRefs: - kind: Secret name: wildcard-tls namespace: nginx-gateway - name: http port: 80 protocol: HTTP allowedRoutes: namespaces: from: All---# HTTPRoute(应用团队管理,命名空间隔离)apiVersion: gateway.networking.k8s.io/v1kind: HTTPRoutemetadata: name: api-route namespace: productionspec: parentRefs: - name: prod-gateway namespace: nginx-gateway sectionName: https hostnames: - "api.example.com" rules: - matches: - path: type: PathPrefix value: /api/v1 filters: - type: URLRewrite urlRewrite: path: type: ReplacePrefixMatch replacePrefixMatch: / - type: RequestHeaderModifier requestHeaderModifier: add: - name: X-Forwarded-Prefix value: /api/v1 backendRefs: - name: api-service port: 8080 weight: 1002.4 速率限制迁移
# Gateway API 速率限制(使用BackendTLSPolicy)apiVersion: gateway.networking.k8s.io/v1alpha2kind: HTTPRoutemetadata: name: rate-limited-routespec: rules: - filters: - type: ExtensionRef extensionRef: group: gateway.nginx.org kind: ObservabilityPolicy name: rate-limit-policy backendRefs: - name: api-service port: 8080---# Nginx特定限速策略apiVersion: gateway.nginx.org/v1alpha1kind: ObservabilityPolicymetadata: name: rate-limit-policyspec: rateLimit: requestsPerSecond: 100 burstSize: 200 key: "$remote_addr"三、K8s v1.36服务网格深度集成
3.1 原生Sidecar支持(GA)
v1.36将Sidecar容器特性升级为GA,彻底解决Init容器生命周期问题:
# v1.36原生Sidecar配置(支持Istio/Cilium)apiVersion: apps/v1kind: Deploymentmetadata: name: my-appspec: template: spec: initContainers: - name: istio-proxy image: istio/proxyv2:1.22.0 restartPolicy: Always # 关键字段:声明为Sidecar lifecycle: postStart: exec: command: - pilot-agent - wait resources: limits: cpu: 200m memory: 256Mi containers: - name: app image: my-app:v1.0旧版Sidecar问题修复:
- 旧版:Init容器先于业务容器启动,Sidecar就绪前业务容器已开始处理请求
- v1.36:restartPolicy: Always声明的Init容器会持续运行,并等待就绪后再启动后续容器
3.2 与Istio Ambient Mode集成
# 安装Istio Ambient Mode(无Sidecar注入)istioctl install --set profile=ambient \ --set "components.cni.enabled=true" \ -y# 为命名空间启用Ambient模式(无需重启Pod)kubectl label namespace production istio.io/dataplane-mode=ambient# 验证kubectl get pods -n production -o json | \ jq '.items[].metadata.annotations["ambient.istio.io/redirection"]'Ambient Mode vs Sidecar模式对比:
| 维度 | Sidecar模式 | Ambient模式 |
|---|---|---|
| 资源开销 | 每Pod额外~50-200m CPU | 集群级别共享ztunnel |
| 部署复杂度 | 需要注入webhook | 标签即可启用 |
| 隔离性 | 强(Pod级别) | 节点级别 |
| 功能完整度 | 完整 | L4完整,L7部分 |
| 适用场景 | 需要细粒度流量控制 | 大规模、低开销场景 |
四、其他重要新特性
4.1 ServiceCIDR v1 GA
# 动态扩展Service IP段(解决IP耗尽问题)apiVersion: networking.k8s.io/v1kind: ServiceCIDRmetadata: name: extended-cidrspec: cidrs: - 10.96.0.0/20 # 原有CIDR - 10.112.0.0/20 # 新增CIDR(无需重启集群!)4.2 Job成功策略GA
# 精确控制批处理Job的成功条件apiVersion: batch/v1kind: Jobspec: completions: 100 parallelism: 10 successPolicy: rules: - succeededIndexes: "0-9" # 只要前10个任务成功即认为Job成功 succeededCount: 10五、升级操作指南
# 1. 升级前备份etcdETCDCTL_API=3 etcdctl snapshot save /backup/etcd-$(date +%Y%m%d).db# 2. 升级控制平面(以kubeadm为例)sudo apt-get updatesudo apt-get install -y kubeadm=1.36.0-00# 验证升级计划sudo kubeadm upgrade plan v1.36.0# 执行升级sudo kubeadm upgrade apply v1.36.0# 3. 升级kubelet和kubectlsudo apt-get install -y kubelet=1.36.0-00 kubectl=1.36.0-00sudo systemctl daemon-reloadsudo systemctl restart kubelet# 4. 升级工作节点(逐个)kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data# 在node-1上执行升级...kubectl uncordon node-1K8s v1.36的服务网格深度集成和Ingress-NGINX退役,共同推动着云原生流量架构的演进。尽早开始迁移评估,在安全补丁到期前完成迁移,是运维团队2026年上半年最重要的技术任务之一。