Kubernetes 批量变更 ingress 配置格式

本文介绍了在升级Kubernetes到1.22.10版本时遇到的废弃API问题,特别是Ingress和IngressClass资源不再支持旧版本API。内容强调了转换为networking.k8s.io/v1的重要性,并提供了使用kubectl convert工具批量转换配置文件的方法,以减轻工作量并确保服务正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做Kubernetes 的系统升级(升级至1.22.10),经过检查发现系统中还在使用一些已经废弃的API,主要是一些ingress nginx配置

Kubernetes 1.22版本中废弃的API包括:

【变更】MutatingWebhookConfiguration和ValidatingWebhookConfiguration资源不再支持admissionregisration.k8s.io/v1beta1 API。如果使用旧版本API创建准入或变换Webhook配置,会导致配置创建失败,进而影响Webhook服务的使用,请尽快使用admissionregisration.k8s.io/v1替代。
【变更】CustomResourceDefinition资源不再支持apiextensions.k8s.io/v1beta1 API。如果使用旧版本API创建自定义资源定义,会导致定义创建失败,进而影响调和(reconcile)该自定资源的控制器,请尽快使用apiextensions.k8s.io/v1替代。
【变更】APIService资源不再支持apiregistration.k8s.io/v1beta1API。如果使用旧版本API管理Kubernetes扩展API服务,会影响Kubernetes扩展API的服务,请尽快使用apiregistration.k8s.io/v1替代。
【变更】TokenReview资源不再支持authentication.k8s.io/v1beta1 API。如果使用旧版本API进行授权的验证,会导致验证失败,进而影响应用的正常工作,请尽快使用authentication.k8s.io/v1替代。
【变更】SubjectAccessReview资源不再支持authorization.k8s.io/v1beta1 API。如果使用旧版本API进行授权的验证,会导致验证失败,进而影响应用的正常工作,请尽快使用authorization.k8s.io/v1替代。
【变更】CertificateSigningRequest资源不再支持certificate.k8s.io/v1beta1 API。如果使用旧版本API请求签发证书,会导致签发失败,请使用certificate.k8s.io/v1替代。
【变更】Lease资源不再支持coordination.k8s.io/v1beta1 API。如果使用旧版本API进行选主操作,会导致选主失败,进而影响应用的正常工作,请尽快使用coordination.k8s.io/v1替代。
【变更】Ingress和IngressClass资源不再支持networking.k8s.io/v1beta1和extensions/v1beta1 API。如果使用旧版本API管理Ingress,会影响应用对外暴露服务,请尽快使用networking.k8s.io/v1替代。
【变更】ClusterRole、ClusterRoleBinding、Role和RoleBinding资源不再支持rbac.authorization.k8s.io/v1beta1 API。如果使用旧版本API管理RBAC资源,会影响应用的权限服务,甚至无法在集群内正常使用,请尽快使用rbac.authorization.k8s.io/v1替代。
【变更】CSIDriver、CSINode、StorageClass和VolumeAttachment资源不再支持storage.k8s.io/v1beta1 API。如果使用旧版本API管理CSI资源,会影响集群内的存储服务提供,导致集群内无法正常使用CSI,请尽快使用storage.k8s.io/v1替代。
【变更】PriorityClass资源不再支持scheduling.k8s.io/v1beta1 API。如果使用旧版本API管理集群内的容器组优先类型,会导致操作失败,请使用scheduling.k8s.io/v1替代。
【废弃】Dockershim目前被标记为废弃,计划于1.24版本后移除。

我们本次需要替换的主要是:

【变更】Ingress和IngressClass资源不再支持networking.k8s.io/v1beta1和extensions/v1beta1 API。如果使用旧版本API管理Ingress,会影响应用对外暴露服务,请尽快使用networking.k8s.io/v1替代。

但是networking.k8s.io/v1beta1的配置编写格式和networking.k8s.io/v1的配置编写格式是不一样的
networking.k8s.io/v1beta1

- path: 
  backend:
    serviceName: 
    servicePort: 

networking.k8s.io/v1 编写格式

   path: 
   pathType: ImplementationSpecific
 - backend:
     service:
       name: 
       port:
         number: 

可以看到变化还是比较大的,如果一个域名的配置全部都重新改格式的话,工作量太大,这时候我们就可以使用kubectl convert插件去进行格式转化:

二、kubectl convert

转换配置文件为不同的API版本,支持YAML和JSON格式。

该命令将配置文件名,目录或URL作为输入,并将其转换为指定的版本格式,如果目标版本未指定或不支持,则转换为最新版本。

默认输出将以YAML格式打印出来,可以使用- o选项改变输出格式。

语法
可以使用kubectl-convert命令(kubectl convertv1.20 之前)自动转换现有对象:

kubectl convert -f ingress.yaml

将“ingress.yaml”指定的资源的实时状态转换为最新版本

kubectl convert -f ingress.yaml --local -o json

将当前目录下的所有文件转换为最新版本,并将其全部创建。

kubectl convert -f . | kubectl create -f -

将jingress.yaml API版本替换为 networking.k8s.io/v1,并转换格式后输入到新文件内

kubectl convert -f ingress.yaml --output-version networking.k8s.io/v1 > ingress_new.yaml

请注意,这可能会使用非理想的默认值。要了解有关特定资源的更多信息,请查看 KubernetesAPI参考

文章参考自Kubernetes:

<think>好的,我现在需要详细思考如何回答“什么是Kong集群”这个问题。首先,用户之前已经询问过Kong网关与ProxyHA的关系,现在接着问Kong集群,可能是在进一步了解Kong的高可用性配置。我需要确保回答准确且易于理解,同时覆盖用户可能关心的方面。 首先,我应该明确Kong集群的基本定义。Kong集群指的是多个Kong节点协同工作,共享配置和数据,以提高可用性和扩展性。需要解释为什么需要集群,比如高可用、负载均衡、扩展性等。 接下来,要描述集群的工作原理,包括它们如何通过数据库(如PostgreSQL或Cassandra)共享配置。需要提到每个节点是无状态的,这有助于水平扩展。同时,要说明请求如何被分发到不同的节点,可能涉及负载均衡器或DNS轮询。 然后,应该列出集群的主要特点,比如高可用性、配置同步、无状态节点、水平扩展。这些特点能帮助用户快速抓住关键点。 还需要讨论集群的架构组成,包括Kong节点、数据库层、负载均衡器等组件。这里可以提到用户之前问到的ProxyHA,可能作为负载均衡层的一部分,连接之前的对话,增强连贯性。 另外,部署场景和最佳实践也很重要。比如在云环境、混合部署或容器化(如Kubernetes)中的应用,以及监控和维护的注意事项。 可能还需要对比单节点和集群的区别,强调集群的优势和适用场景。同时,提及可能的问题,比如数据库成为单点故障,以及如何通过数据库集群来避免。 要确保语言简洁,结构清晰,避免技术术语过多,必要时举例说明。最后,检查是否覆盖了用户可能需要的所有信息,比如为什么使用集群、如何工作、有什么好处、如何部署等。 总结下来,回答的结构应该是:定义、工作原理、特点、架构组成、部署场景、最佳实践、与单节点的对比,以及常见问题。这样用户能全面理解Kong集群的概念和应用。</think>**Kong集群**是由多个Kong网关节点协同工作的分布式架构,旨在提升系统的**高可用性(HA)**、**负载均衡能力**和**横向扩展性**。其核心原理是通过共享配置数据库(如PostgreSQL或Cassandra)实现多节点间的状态同步,确保所有节点对外提供一致的服务能力。 --- ### **一、Kong集群的核心工作原理** 1. **共享数据库** - 所有Kong节点连接到同一数据库(如PostgreSQL集群或Cassandra集群)。 - 节点间通过数据库实时同步路由、服务、插件等配置信息。 - 数据库的高可用性直接影响集群整体稳定性,需配套部署数据库集群。 2. **无状态节点** - 每个Kong节点本身不存储状态数据,所有请求处理依赖数据库中的配置。 - 允许随时增减节点,实现弹性扩缩容。 3. **流量分发** - 外部流量通过负载均衡器(如Nginx、HAProxy或云厂商ALB)分发到各Kong节点。 - 客户端无感知集群内部节点变化。 --- ### **二、Kong集群的核心特点** | 特性 | 说明 | |-------------------|--------------------------------------------------------------------| | **高可用性** | 单节点故障时,负载均衡器自动将流量路由到健康节点,服务不中断 | | **配置实时同步** | 任一节点更新配置(如新增API路由),其他节点通过数据库立即生效 | | **水平扩展** | 可根据流量压力动态增加节点,提升吞吐量 | | **无单点故障** | 通过数据库集群+多Kong节点+负载均衡器冗余,消除各层单点故障风险 | --- ### **三、典型集群架构组成** ```plaintext 客户端 ↓ [负载均衡层] ← ProxyHA方案(如AWS ALB、Nginx+Keepalived) ↓ [Kong节点1] → [共享数据库集群](如PostgreSQL HA或Cassandra集群) [Kong节点2] [Kong节点N] ↓ [后端服务集群] ``` --- ### **四、Kong集群 vs 单节点** | 对比维度 | Kong单节点 | Kong集群 | |--------------|----------------------------------|-----------------------------------| | **可用性** | 单点故障导致服务中断 | 多节点冗余,自动故障转移 | | **性能上限** | 受限于单机资源(CPU/内存/网络带宽) | 通过横向扩展突破性能瓶颈 | | **适用场景** | 开发测试环境、低流量场景 | 生产环境、高并发/高可用需求 | | **运维复杂度**| 简单 | 需维护数据库集群、负载均衡器等基础设施 | --- ### **五、部署场景与最佳实践** 1. **云原生部署** - 在Kubernetes中通过`Kong Ingress Controller`部署集群,利用K8s Service实现负载均衡。 - 数据库选择:云托管数据库(如AWS RDS、Aurora)保障HA。 2. **混合云/多数据中心** - 跨地域部署Kong节点,通过全局负载均衡(如DNS轮询、Anycast)实现就近访问。 3. **监控与调优** - 监控指标:节点健康状态、数据库连接池使用率、每秒请求数(RPS)、平均响应时间。 - 性能调优:调整`nginx_worker_processes`参数匹配CPU核心数,启用`nginx_daemon off`提升容器化部署稳定性。 --- ### **六、常见问题与解决方案** - **Q1: 数据库成为性能瓶颈?** - 选型优化:Cassandra适合超大规模集群,PostgreSQL需配置读写分离。 - 缓存加速:启用Kong的`db_cache_ttl`参数缓存高频查询结果。 - **Q2: 节点间配置同步延迟?** - 检查数据库复制延迟,确保使用低延迟网络。 - 避免频繁批量配置变更,使用Kong的`declarative config`模式批量导入。 - **Q3: 如何验证集群状态?** - 执行`kong cluster health`命令检查节点与数据库连接状态。 - 通过Admin API的`/status`端点监控各节点健康状况。 --- ### **总结** Kong集群通过多节点协作和数据库共享机制,为企业级API网关提供了可靠的HA保障和弹性扩展能力。实际部署中需重点关注数据库高可用设计、负载均衡策略优化及监控体系的完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值