如何扩展 knative 服务功能并为其添加新功能?
How to extend knative serving features and add new features to it?
我目前正在评估 Knative Serving 作为将我的应用程序部署到 Kubernetes 的替代方案。我想知道是否有可能扩展 Knative 功能以为我的应用程序开发人员提供更多功能,例如,我希望他们定义其他自定义基础设施,如云数据库,或者让他们配置 Istio 功能,如授权策略,仅使用服务 yaml 清单,无需部署其他 Kubernetes yaml。归根结底,我希望只有 Knative Service 作为我的应用程序合约,没有别的。
这可以吗?有没有关于如何操作的文档?
I'm wondering if it is possible is to extend Knative features to offer more capabilities
您如何看待用户使用设置功能?在不分叉我们的控制器的情况下,没有机制允许资源 spec
中的自定义属性。
您可以让用户在 Knative 服务的 spec.template.metadata
上设置标签和注释,并让 webhook 改变最终创建的 pods。
我没有对 Istio 发表评论的专业知识,但如果您需要创建额外的资源来设置身份验证策略,您可以编写一个控制器来监视 knative 的 istio 网络插件创建的虚拟 services/gateways。如果授权策略修改虚拟服务,那么您可能会遇到垃圾处理,因为控制器可能会协调您的更改。这是我们需要探索的领域,K8s 是否有设施帮助协调 controllers/webhooks。
欢迎提出更具体的问题
很高兴听到您发现 Knative 很有用! Knative 旨在补充而非取代 Kubernetes,因此我将向您介绍一些可与 Knative 一起使用的有用 Kubernetes 模式(而不是建议您分叉或扩展 Knative 控制器以添加数据库部署等功能)。
对于云数据库等功能,我会研究“运算符”模式。如果您与云提供商合作,Crossplane provides a set of custom resources to allow developers to manage cloud resources using custom kubernetes objects. For example, here is the AWS RDSInstance type 用于配置 RDS 数据库。
特别是 Istio authorization policy,您可以简单地预先配置一组固定身份验证策略,然后使用工作负载标签来 select 哪些应该应用于特定工作负载。 (注意,我不是 Istio 用户,所以这是基于阅读他们的文档,而不是实践经验。)如果你需要更动态的东西(例如,一个注释来指示哪些主体可以调用该服务),你您可能想编写一个控制器来监视集群中的 Knative 服务 and/or 部署并动态创建适当的 Istio AuthorizationPolicies。
听起来您已经在使用 OAM,因此将它构建到您的应用程序定义中可能更有意义; Knative Serving 最好被认为是“一个更好的部署版本”而不是“一个完整的应用程序模型”。
我目前正在评估 Knative Serving 作为将我的应用程序部署到 Kubernetes 的替代方案。我想知道是否有可能扩展 Knative 功能以为我的应用程序开发人员提供更多功能,例如,我希望他们定义其他自定义基础设施,如云数据库,或者让他们配置 Istio 功能,如授权策略,仅使用服务 yaml 清单,无需部署其他 Kubernetes yaml。归根结底,我希望只有 Knative Service 作为我的应用程序合约,没有别的。
这可以吗?有没有关于如何操作的文档?
I'm wondering if it is possible is to extend Knative features to offer more capabilities
您如何看待用户使用设置功能?在不分叉我们的控制器的情况下,没有机制允许资源 spec
中的自定义属性。
您可以让用户在 Knative 服务的 spec.template.metadata
上设置标签和注释,并让 webhook 改变最终创建的 pods。
我没有对 Istio 发表评论的专业知识,但如果您需要创建额外的资源来设置身份验证策略,您可以编写一个控制器来监视 knative 的 istio 网络插件创建的虚拟 services/gateways。如果授权策略修改虚拟服务,那么您可能会遇到垃圾处理,因为控制器可能会协调您的更改。这是我们需要探索的领域,K8s 是否有设施帮助协调 controllers/webhooks。
欢迎提出更具体的问题
很高兴听到您发现 Knative 很有用! Knative 旨在补充而非取代 Kubernetes,因此我将向您介绍一些可与 Knative 一起使用的有用 Kubernetes 模式(而不是建议您分叉或扩展 Knative 控制器以添加数据库部署等功能)。
对于云数据库等功能,我会研究“运算符”模式。如果您与云提供商合作,Crossplane provides a set of custom resources to allow developers to manage cloud resources using custom kubernetes objects. For example, here is the AWS RDSInstance type 用于配置 RDS 数据库。
特别是 Istio authorization policy,您可以简单地预先配置一组固定身份验证策略,然后使用工作负载标签来 select 哪些应该应用于特定工作负载。 (注意,我不是 Istio 用户,所以这是基于阅读他们的文档,而不是实践经验。)如果你需要更动态的东西(例如,一个注释来指示哪些主体可以调用该服务),你您可能想编写一个控制器来监视集群中的 Knative 服务 and/or 部署并动态创建适当的 Istio AuthorizationPolicies。
听起来您已经在使用 OAM,因此将它构建到您的应用程序定义中可能更有意义; Knative Serving 最好被认为是“一个更好的部署版本”而不是“一个完整的应用程序模型”。