设置扩展 API 服务器

设置扩展 API 服务器以与聚合层一起使用,允许 Kubernetes apiserver 通过额外的 API 进行扩展,这些 API 不属于核心 Kubernetes API。

开始之前

您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点的集群上运行本教程,这些节点不充当控制平面主机。如果您还没有集群,可以使用 minikube 创建一个,或者您可以使用以下 Kubernetes 游乐场之一

要检查版本,请输入 kubectl version

设置扩展 api-server 以与聚合层一起使用

以下步骤描述了如何高级别设置扩展 api-server。这些步骤适用于您使用 YAML 配置还是使用 API。尝试专门识别两者之间的任何差异。有关如何使用 YAML 配置实现它们的具体示例,您可以查看 Kubernetes 存储库中的 sample-apiserver

或者,您可以使用现有的第三方解决方案,例如 apiserver-builder,它应该为您生成一个骨架并自动执行所有以下步骤。

  1. 确保 APIService API 已启用(检查 --runtime-config)。它应该默认开启,除非在您的集群中被故意关闭。
  2. 您可能需要创建一个 RBAC 规则,允许您添加 APIService 对象,或者让您的集群管理员创建一个。(由于 API 扩展会影响整个集群,因此不建议在实时集群中进行 API 扩展的测试/开发/调试。)
  3. 创建您要在其中运行扩展 api-service 的 Kubernetes 命名空间。
  4. 创建/获取一个 CA 证书,用于签署扩展 api-server 用于 HTTPS 的服务器证书。
  5. 为 api-server 创建一个服务器证书/密钥,用于 HTTPS。此证书应由上述 CA 签署。它还应该具有 Kube DNS 名称的 CN。这源自 Kubernetes 服务,形式为 <service name>.<service name namespace>.svc
  6. 在您的命名空间中创建一个包含服务器证书/密钥的 Kubernetes 密钥。
  7. 为扩展 api-server 创建一个 Kubernetes 部署,并确保您将密钥加载为卷。它应该包含对扩展 api-server 工作映像的引用。部署也应该在您的命名空间中。
  8. 确保您的扩展 api-server 从该卷加载这些证书,并且它们在 HTTPS 握手中使用。
  9. 在您的命名空间中创建一个 Kubernetes 服务帐户。
  10. 为要在资源上允许的操作创建一个 Kubernetes 集群角色。
  11. 从您命名空间中的服务帐户到您创建的集群角色创建一个 Kubernetes 集群角色绑定。
  12. 从您命名空间中的服务帐户到 system:auth-delegator 集群角色创建一个 Kubernetes 集群角色绑定,以将身份验证决策委托给 Kubernetes 核心 API 服务器。
  13. 从您命名空间中的服务帐户到 extension-apiserver-authentication-reader 角色创建一个 Kubernetes 角色绑定。这允许您的扩展 api-server 访问 extension-apiserver-authentication 配置映射。
  14. 创建一个 Kubernetes apiservice。上面的 CA 证书应进行 base64 编码,删除换行符,并用作 apiservice 中的 spec.caBundle。这应该没有命名空间。如果使用 kube-aggregator API,只需传入 PEM 编码的 CA 捆绑包,因为 base 64 编码会为您完成。
  15. 使用 kubectl 获取您的资源。运行时,kubectl 应该返回“未找到资源”。此消息表明一切正常,但您当前没有创建该资源类型的任何对象。

下一步