设置扩展 API 服务器

设置扩展 API 服务器以与聚合层一起工作,允许使用不属于核心 Kubernetes API 的附加 API 扩展 Kubernetes apiserver。

准备开始

你需要一个 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 secret。
  7. 为扩展 api-server 创建 Kubernetes deployment,并确保你正在将 secret 作为卷加载。它应包含对你的扩展 api-server 的工作镜像的引用。deployment 也应该在你的命名空间中。
  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 configmap。
  14. 创建一个 Kubernetes apiservice。上面的 CA 证书应该经过 base64 编码、删除换行符,并用作 apiservice 中的 spec.caBundle。这不应命名空间。如果使用 kube-aggregator API,则仅传入 PEM 编码的 CA 捆绑包,因为 base64 编码是为你完成的。
  15. 使用 kubectl 获取你的资源。运行时,kubectl 应该返回“未找到资源。”。此消息指示一切正常,但你当前未创建该资源类型的任何对象。

下一步