设置扩展 API 服务器

设置扩展 API 服务器以与聚合层一起使用,允许 Kubernetes apiserver 使用不在核心 Kubernetes API 中的附加 API 进行扩展。

在开始之前

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

要检查版本,请输入 kubectl version

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

以下步骤描述了如何以高级方式设置扩展-apiserver。这些步骤适用于您是使用 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 服务派生的,形式为 <服务名称>.<服务名称命名空间>.svc
  6. 在您的命名空间中创建一个包含服务器证书/密钥的 Kubernetes 密钥。
  7. 为扩展 api-server 创建一个 Kubernetes 部署,并确保您将密钥作为卷加载。它应该包含对扩展 api-server 的工作映像的引用。部署也应该在您的命名空间中。
  8. 确保您的扩展-apiserver 从该卷加载这些证书,并且它们用于 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 应返回“未找到资源”。此消息表明一切正常,但您目前没有创建该资源类型的对象。

下一步