在 Kubernetes 中部署 APISIX 的三个注意事项(一)

更新时间 3/14/2024

云原生时代带来了 Kubernetes(K8s)作为容器编排平台的广泛应用,而 Apache APISIX 作为一款高性能、云原生动态 API 网关,在 Kubernetes 中的部署已经变得越来越普遍。然而,尽管 Apache APISIX 在 Kubernetes 上的部署过程相对轻松,但依然存在一些需要注意的关键问题。在本系列的 3 篇文章中,我们将分别探讨以下问题:

  1. 部署方式上的注意事项

  2. 健康检查 & 日志 & 监控

  3. 如何处理自定义插件和配置

在本文中,我们将重点讨论第一点,即在 Kubernetes 中部署 Apache APISIX 时需要考虑的部署方式上的注意事项。

在 Kubernetes 中部署 APISIX 的部署方式

为顺畅地在 Kubernetes 中部署和管理 APISIX,确保系统的稳定性和可靠性,在部署方式上主要考虑以下几点:

1. 数据面与控制面分离

在 K8s 中部署时,保持 APISIX 的数据面(处理实际流量的节点)和控制面(管理配置和处理 API 调用的节点)分离是关键。

保持这二者的分离主要有以下几点好处:

  • 弹性伸缩:数据面负责实际的请求处理,而控制面则负责配置管理和策略下发。分离后,系统可以独立地对数据面和控制面进行水平扩展,根据实际负载需求对系统进行动态调整。这使得系统更容易实现弹性伸缩,提高了整个系统的可伸缩性。

  • 故障隔离:数据面和控制面的分离有助于实现故障隔离。如果控制面发生故障,数据面仍然可以继续处理请求,确保服务的可用性,反之亦然。这种分离能够防止单点故障对整个系统的影响,并提高了系统的容错性和稳定性。

  • 安全性提升:分离数据面和控制面可以提升系统的安全性。控制面通常包含敏感信息,如访问控制策略、认证配置等,而数据面处理实际请求。通过分离部署,可以更好地保护控制面的安全性,降低潜在的攻击风险。

Architecture of Apache APISIX

2. etcd 持久化部署方案

Apache APISIX 有多种配置方式,例如 standalone 模式和 etcd 配置中心模式。采用 etcd 集群作为 Apache APISIX 的配置中心时,有以下几点注意事项:

  • 使用 StatefulSet:在 Kubernetes 中,通常使用 StatefulSet 来部署 etcd。StatefulSet 提供了稳定的网络标识和有序的 Pod 部署,这对于一个分布式系统来说非常重要。每个 etcd 节点都可以有唯一的标识符,并且可以维持持久性存储,确保数据的安全性。

  • 合理设置资源限制:为 etcd Pods 设置适当的资源限制,以确保它们能够在集群中平稳运行。根据集群规模和负载进行调整,以避免资源不足或浪费。

  • 配置持久化存储:为了保证数据的持久性和可靠性,建议将 etcd 的数据存储到持久化存储中。可以使用 Kubernetes 的 Persistent Volumes(PVs)和 Persistent Volume Claims(PVCs)来实现持久化存储。

  • TLS 加密:在 etcd 集群中启用 TLS 加密以保护数据的传输。使用证书和私钥对 etcd 集群进行身份验证,并加密节点之间的通信。这可以通过创建和使用自签名或由可信证书颁发机构(CA)签发的证书来实现。

  • 启用认证和授权:etcd 支持基于用户名和密码的认证,以及基于角色的授权。在生产环境中,建议启用这些功能,以确保只有授权用户能够访问和修改 etcd 中的数据。Apache APISIX 控制面和数据面在连接 etcd 时建议分配不同的角色,比如控制面分配读写能力,而数据面分配只读能力。

  • 定期备份:定期备份 etcd 数据是一种良好的实践,以防止数据丢失或损坏。使用 etcd 提供的备份工具,并将备份存储在安全的位置,以便在需要时进行恢复。备份方式分为热备和冷备方式,为了您的数据安全,建议采用 etcd learner 方式进行热备,并且结合 snapshot 冷备方式,最大程度保证数据的完整恢复能力。

  • 监控和警报:部署监控工具来实时监控 etcd 集群的健康状态。Prometheus 是一个常用的监控工具,可以与 etcd 集成。设置警报规则,以便在发生问题时及时采取措施。

  • 优雅地处理节点变更:在 etcd 集群中,可能会发生节点的添加、移除或替换。确保使用适当的方式进行节点变更,以避免数据的不一致和服务的中断。

3. 使用 APISIX Ingress Controller 替代 K8s Ingress Controller

APISIX Ingress Controller 是专注于 API 管理的工具,具有高性能和灵活的配置选项。如果你需要更复杂的路由规则、限流、熔断等高级功能,APISIX Ingress Controller 可能是更好的选择。它提供了丰富的插件系统,通过 APISIX Ingress CRD 允许使用声明式的配置方式来集成插件,处理认证、授权、监控、日志记录等方面的功能,使得 APISIX Ingress Controller 的能力更为丰富,配置更加简单。

APISIX Ingress Controller

如果您需要一个完整的配置界面,并且希望与 Kubernetes 深度集成,可以关注基于 Apache APISIX 的 API 全生命周期管理平台 API7 企业版。API7 企业版提供全面的解决方案,能实现高级自动化、监控和故障排除,为业务提供更可靠的支持。

总结

在 Kubernetes 中部署 APISIX 时需要注意多个方面。首先,关注数据面和控制面的分离,实现弹性伸缩、故障隔离和安全性提升;其次,采用 etcd 持久化部署方案,确保配置的持久性和可靠性;另外,考虑使用更适合的 APISIX Ingress Controller 替代 K8s Ingress Controller,以获取更丰富的功能和更简洁的配置。只有遵循这些最佳实践,才能确保系统的稳定性和可靠性。

微信咨询

获取方案