设置扩展 API 服务器
设置扩展 API 服务器与聚合层协同工作,可以扩展 Kubernetes apiserver,添加不属于核心 Kubernetes API 的附加 API。
开始之前
你需要一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与你的集群通信。建议在本教程中使用至少有两个非控制平面主机的节点组成的集群。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 演练场之一:
要检查版本,请输入 kubectl version
。
- 你必须配置聚合层并启用 apiserver 标志。
设置扩展 api-server 与聚合层协同工作
以下步骤概要介绍了如何设置扩展 api-server。这些步骤适用于使用 YAML 配置或使用 API 的情况。本文将尽量明确指出两者之间的区别。有关如何使用 YAML 配置实现这些步骤的具体示例,可以查看 Kubernetes 仓库中的示例 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。Kube DNS 名称派生自 Kubernetes Service,其格式为
<service name>.<service name namespace>.svc
- 在你的命名空间中创建一个包含服务器证书/密钥的 Kubernetes Secret。
- 为扩展 api-server 创建一个 Kubernetes Deployment,并确保将 Secret 作为卷加载。它应包含对扩展 api-server 工作镜像的引用。该 Deployment 也应位于你的命名空间中。
- 确保你的扩展 api-server 从该卷加载这些证书,并在 HTTPS 握手中使用它们。
- 在你的命名空间中创建一个 Kubernetes ServiceAccount。
- 为你希望允许对资源执行的操作创建一个 Kubernetes ClusterRole。
- 创建一个 Kubernetes ClusterRoleBinding,将你的命名空间中的 ServiceAccount 绑定到你创建的 ClusterRole。
- 创建一个 Kubernetes ClusterRoleBinding,将你的命名空间中的 ServiceAccount 绑定到
system:auth-delegator
ClusterRole,以将认证决策委托给 Kubernetes 核心 API 服务器。 - 创建一个 Kubernetes RoleBinding,将你的命名空间中的 ServiceAccount 绑定到
extension-apiserver-authentication-reader
Role。这允许你的扩展 api-server 访问extension-apiserver-authentication
ConfigMap。 - 创建一个 Kubernetes APIService。上述 CA 证书应进行 base64 编码,去除换行符,并用作 apiservice 的 spec.caBundle。这不应是命名空间范围的。如果使用kube-aggregator API,只需传入 PEM 编码的 CA bundle,因为 base64 编码已为你完成。
- 使用 kubectl 获取你的资源。运行该命令时,kubectl 应返回“No resources found.”(未找到资源)。此消息表明一切正常,但你当前尚未创建该资源类型的对象。
下一步
- 逐步完成配置 API 聚合层并启用 apiserver 标志的步骤。
- 有关概要介绍,请参见使用聚合层扩展 Kubernetes API。
- 了解如何使用 Custom Resource Definitions 扩展 Kubernetes API。
最后修改时间:2022 年 7 月 21 日下午 1:41 PST:通过在适当的地方使用动词形式“set up”代替名词“setup”来修正语法 (d6a1ba2a6d)