设置扩展 API 服务器
设置扩展 API 服务器以与聚合层一起工作,允许使用不属于核心 Kubernetes API 的附加 API 扩展 Kubernetes apiserver。
准备开始
你需要一个 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 secret。
- 为扩展 api-server 创建 Kubernetes deployment,并确保你正在将 secret 作为卷加载。它应包含对你的扩展 api-server 的工作镜像的引用。deployment 也应该在你的命名空间中。
- 确保你的扩展 api-server 从该卷加载这些证书,并且这些证书用于 HTTPS 握手。
- 在你的命名空间中创建一个 Kubernetes 服务帐户。
- 为你希望对资源执行的操作创建一个 Kubernetes 集群角色。
- 从你的命名空间中的服务帐户到你创建的集群角色创建一个 Kubernetes 集群角色绑定。
- 从你的命名空间中的服务帐户到
system:auth-delegator
集群角色创建一个 Kubernetes 集群角色绑定,以将身份验证决策委派给 Kubernetes 核心 API 服务器。 - 从你的命名空间中的服务帐户到
extension-apiserver-authentication-reader
角色创建一个 Kubernetes 角色绑定。这允许你的扩展 api-server 访问extension-apiserver-authentication
configmap。 - 创建一个 Kubernetes apiservice。上面的 CA 证书应该经过 base64 编码、删除换行符,并用作 apiservice 中的 spec.caBundle。这不应命名空间。如果使用 kube-aggregator API,则仅传入 PEM 编码的 CA 捆绑包,因为 base64 编码是为你完成的。
- 使用 kubectl 获取你的资源。运行时,kubectl 应该返回“未找到资源。”。此消息指示一切正常,但你当前未创建该资源类型的任何对象。
下一步
- 浏览 配置 API 聚合层 并启用 apiserver 标志的步骤。
- 有关高级概述,请参阅 使用聚合层扩展 Kubernetes API。
- 了解如何使用自定义资源定义扩展 Kubernetes API。
上次修改时间为 2022 年 7 月 21 日下午 1:41 PST:通过在适当的地方使用动词形式 'set up' 而不是名词 'setup' 来修复语法 (d6a1ba2a6d)