设置扩展 API 服务器
设置扩展 API 服务器以与聚合层一起使用,允许 Kubernetes apiserver 通过额外的 API 进行扩展,这些 API 不属于核心 Kubernetes API。
开始之前
您需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点的集群上运行本教程,这些节点不充当控制平面主机。如果您还没有集群,可以使用 minikube 创建一个,或者您可以使用以下 Kubernetes 游乐场之一
要检查版本,请输入kubectl version
。- 您必须 配置聚合层 并启用 apiserver 标志。
设置扩展 api-server 以与聚合层一起使用
以下步骤描述了如何高级别设置扩展 api-server。这些步骤适用于您使用 YAML 配置还是使用 API。尝试专门识别两者之间的任何差异。有关如何使用 YAML 配置实现它们的具体示例,您可以查看 Kubernetes 存储库中的 sample-apiserver。
或者,您可以使用现有的第三方解决方案,例如 apiserver-builder,它应该为您生成一个骨架并自动执行所有以下步骤。
- 确保 APIService API 已启用(检查
--runtime-config
)。它应该默认开启,除非在您的集群中被故意关闭。 - 您可能需要创建一个 RBAC 规则,允许您添加 APIService 对象,或者让您的集群管理员创建一个。(由于 API 扩展会影响整个集群,因此不建议在实时集群中进行 API 扩展的测试/开发/调试。)
- 创建您要在其中运行扩展 api-service 的 Kubernetes 命名空间。
- 创建/获取一个 CA 证书,用于签署扩展 api-server 用于 HTTPS 的服务器证书。
- 为 api-server 创建一个服务器证书/密钥,用于 HTTPS。此证书应由上述 CA 签署。它还应该具有 Kube DNS 名称的 CN。这源自 Kubernetes 服务,形式为
<service name>.<service name namespace>.svc
- 在您的命名空间中创建一个包含服务器证书/密钥的 Kubernetes 密钥。
- 为扩展 api-server 创建一个 Kubernetes 部署,并确保您将密钥加载为卷。它应该包含对扩展 api-server 工作映像的引用。部署也应该在您的命名空间中。
- 确保您的扩展 api-server 从该卷加载这些证书,并且它们在 HTTPS 握手中使用。
- 在您的命名空间中创建一个 Kubernetes 服务帐户。
- 为要在资源上允许的操作创建一个 Kubernetes 集群角色。
- 从您命名空间中的服务帐户到您创建的集群角色创建一个 Kubernetes 集群角色绑定。
- 从您命名空间中的服务帐户到
system:auth-delegator
集群角色创建一个 Kubernetes 集群角色绑定,以将身份验证决策委托给 Kubernetes 核心 API 服务器。 - 从您命名空间中的服务帐户到
extension-apiserver-authentication-reader
角色创建一个 Kubernetes 角色绑定。这允许您的扩展 api-server 访问extension-apiserver-authentication
配置映射。 - 创建一个 Kubernetes apiservice。上面的 CA 证书应进行 base64 编码,删除换行符,并用作 apiservice 中的 spec.caBundle。这应该没有命名空间。如果使用 kube-aggregator API,只需传入 PEM 编码的 CA 捆绑包,因为 base 64 编码会为您完成。
- 使用 kubectl 获取您的资源。运行时,kubectl 应该返回“未找到资源”。此消息表明一切正常,但您当前没有创建该资源类型的任何对象。
下一步
- 逐步完成 配置 API 聚合层 并启用 apiserver 标志的步骤。
- 有关高级概述,请参阅 使用聚合层扩展 Kubernetes API。
- 了解如何 使用自定义资源定义扩展 Kubernetes API。
上次修改时间:2022 年 7 月 21 日下午 1:41 PST:通过在适当的地方使用动词形式“设置”而不是名词“设置”来修正语法(d6a1ba2a6d)