设置扩展 API 服务器

设置扩展 API 服务器与聚合层协同工作,可以扩展 Kubernetes API 服务器,添加不属于核心 Kubernetes API 的额外 API。

准备工作

你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不是控制平面主机的节点上运行此教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。

要检查版本,请输入 kubectl version

设置扩展 API 服务器以与聚合层协同工作

以下步骤概述了如何**高层次**地设置扩展 API 服务器。这些步骤适用于无论是使用 YAML 配置还是使用 API。我们尝试明确识别两者之间的任何差异。有关如何使用 YAML 配置实现它们的具体示例,你可以查看 Kubernetes 仓库中的 sample-apiserver

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

  1. 确保 APIService API 已启用(检查 --runtime-config)。默认情况下应该开启,除非在你的集群中已被有意关闭。
  2. 你可能需要创建一条 RBAC 规则以允许你添加 APIService 对象,或者让你的集群管理员来创建。 (由于 API 扩展会影响整个集群,不建议在实时集群中进行 API 扩展的测试/开发/调试。)
  3. 创建你希望运行扩展 API 服务所用的 Kubernetes 命名空间。
  4. 创建/获取一个 CA 证书,用于签署扩展 API 服务器用于 HTTPS 的服务器证书。
  5. 为 API 服务器创建/获取一个服务器证书/密钥以用于 HTTPS。此证书应由上述 CA 签署。它还应具有 Kube DNS 名称的 CN。这是从 Kubernetes 服务派生出来的,形式为 <服务名称>.<服务名称命名空间>.svc
  6. 在你的命名空间中创建一个包含服务器证书/密钥的 Kubernetes Secret。
  7. 为扩展 API 服务器创建一个 Kubernetes Deployment,并确保将 Secret 作为卷加载。它应该包含对你的扩展 API 服务器工作镜像的引用。Deployment 也应该在你的命名空间中。
  8. 确保你的扩展 API 服务器从该卷加载这些证书,并在 HTTPS 握手中使用它们。
  9. 在你的命名空间中创建一个 Kubernetes 服务账号。
  10. 为你想在资源上允许的操作创建一个 Kubernetes ClusterRole。
  11. 从你的命名空间中的服务账号到你创建的 ClusterRole 创建一个 Kubernetes ClusterRoleBinding。
  12. 从你的命名空间中的服务账号到 system:auth-delegator ClusterRole 创建一个 Kubernetes ClusterRoleBinding,以将授权决策委托给 Kubernetes 核心 API 服务器。
  13. 从你的命名空间中的服务账号到 extension-apiserver-authentication-reader Role 创建一个 Kubernetes RoleBinding。这允许你的扩展 API 服务器访问 extension-apiserver-authentication ConfigMap。
  14. 创建一个 Kubernetes APIService。上述 CA 证书应经过 Base64 编码,去除换行符,并用作 APIService 的 spec.caBundle。它不应该有命名空间。如果使用 kube-aggregator API,只需传入 PEM 编码的 CA 束,因为 Base64 编码已为你完成。
  15. 使用 kubectl 获取你的资源。运行时,kubectl 应该返回“No resources found.”。此消息表示一切正常,但你目前没有创建该资源类型的对象。

下一步

上次修改时间:2022 年 7 月 21 日下午 1:41 PST:根据需要将“setup”的名词形式修正为动词形式“set up”(d6a1ba2a6d)