设置扩展 API 服务器
设置扩展 API 服务器以与聚合层一起使用,允许 Kubernetes apiserver 使用不在核心 Kubernetes API 中的附加 API 进行扩展。
在开始之前
您需要有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个,或者您可以使用以下 Kubernetes 游乐场之一
要检查版本,请输入kubectl version
。- 您必须 配置聚合层 并启用 apiserver 标志。
设置扩展 api-server 以与聚合层一起使用
以下步骤描述了如何以高级方式设置扩展-apiserver。这些步骤适用于您是使用 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 服务派生的,形式为
<服务名称>.<服务名称命名空间>.svc
- 在您的命名空间中创建一个包含服务器证书/密钥的 Kubernetes 密钥。
- 为扩展 api-server 创建一个 Kubernetes 部署,并确保您将密钥作为卷加载。它应该包含对扩展 api-server 的工作映像的引用。部署也应该在您的命名空间中。
- 确保您的扩展-apiserver 从该卷加载这些证书,并且它们用于 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)