K8s Custom Resource Definition(自定义资源定义)K8s CRDS介绍

文章目录

CRD 是 Custom Resource Definition (自定义资源定义)的缩写,是 Kubernetes 中用于扩展 API 的核心机制。

简单来说:

Kubernetes 本身提供了一些内置资源(如 PodDeploymentServiceIngress 等),但当这些内置资源无法满足业务需求时,用户可以通过 CRD 定义自己的资源类型(例如 KongPluginKongConsumerCertificate 等),然后创建对应的 Custom Resource(CR) 实例来使用它们。


关键点解析:

概念 说明
CRD 一个集群级的 API 对象,用于声明一个新的自定义资源类型(如 KongPlugin)。它告诉 Kubernetes:"我接下来要注册一种叫 kongplugins.configuration.konghq.com 的新资源"。
CR(Custom Resource) CRD 定义好后,用户可以创建该类型的实例(即具体对象),例如:kubectl apply -f my-plugin.yaml 创建一个 KongPlugin 对象。
Operator / Controller 通常需要配合一个控制器(Controller)来监听 CR 的变化,并执行相应逻辑(如调用 Kong Admin API 创建插件)。

在你提供的表格中:

Kong CRDs:不安装(我们只用标准 Ingress,不用 KongPlugin CRD)

这表示:

  • 项目不使用 Kong 提供的 CRD(如 KongPlugin, KongConsumer 等)
  • 而是仅通过 标准 Kubernetes Ingress 资源 来配置路由和策略(例如通过 Ingress 注解 konghq.com/plugins: rate-limit 实现插件功能)
  • 这样做的好处是:减少依赖、简化运维、避免 CRD 冲突或升级问题

⚠️ 注意:虽然不安装 KongPlugin CRD,但 Kong Ingress Controller 仍可能需要某些基础 CRD(如 KongClusterPluginKongIngress),不过从决策看,团队明确选择"只用标准 Ingress",因此应确保所有配置都通过 Ingress 注解完成。


示例对比:

标准 Ingress(你们的选择)

yaml 复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
  annotations:
    konghq.com/plugins: rate-limit
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: svc
            port:
              number: 80

使用 KongPlugin CRD(你们不采用的方式)

yaml 复制代码
apiVersion: configuration.konghq.com/v1
kind: KongPlugin
metadata:
  name: rate-limit-plugin
config:
  minute: 5
  second: 2
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
  annotations:
    konghq.com/plugins: rate-limit-plugin  # 引用上面的 CR

总结:

CRD = Kubernetes 的"插件式 API 扩展机制"

你们的技术决策是:避免引入额外 CRD,坚持使用标准 Kubernetes Ingress + 注解方式管理 Kong 配置,以保持简洁性和兼容性。