设置扩展 API 服务器
设置扩展 API 服务器与聚合层协同工作,可以扩展 Kubernetes API 服务器,添加不属于核心 Kubernetes API 的额外 API。
准备工作
你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在至少有两个不是控制平面主机的节点上运行此教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
要检查版本,请输入 kubectl version
。
- 你必须配置聚合层并启用 apiserver 标志。
设置扩展 API 服务器以与聚合层协同工作
以下步骤概述了如何**高层次**地设置扩展 API 服务器。这些步骤适用于无论是使用 YAML 配置还是使用 API。我们尝试明确识别两者之间的任何差异。有关如何使用 YAML 配置实现它们的具体示例,你可以查看 Kubernetes 仓库中的 sample-apiserver。
或者,你可以使用现有的第三方解决方案,例如 apiserver-builder,它应该会为你生成一个骨架并自动化以下所有步骤。
- 确保 APIService API 已启用(检查
--runtime-config
)。默认情况下应该开启,除非在你的集群中已被有意关闭。 - 你可能需要创建一条 RBAC 规则以允许你添加 APIService 对象,或者让你的集群管理员来创建。 (由于 API 扩展会影响整个集群,不建议在实时集群中进行 API 扩展的测试/开发/调试。)
- 创建你希望运行扩展 API 服务所用的 Kubernetes 命名空间。
- 创建/获取一个 CA 证书,用于签署扩展 API 服务器用于 HTTPS 的服务器证书。
- 为 API 服务器创建/获取一个服务器证书/密钥以用于 HTTPS。此证书应由上述 CA 签署。它还应具有 Kube DNS 名称的 CN。这是从 Kubernetes 服务派生出来的,形式为
<服务名称>.<服务名称命名空间>.svc
- 在你的命名空间中创建一个包含服务器证书/密钥的 Kubernetes Secret。
- 为扩展 API 服务器创建一个 Kubernetes Deployment,并确保将 Secret 作为卷加载。它应该包含对你的扩展 API 服务器工作镜像的引用。Deployment 也应该在你的命名空间中。
- 确保你的扩展 API 服务器从该卷加载这些证书,并在 HTTPS 握手中使用它们。
- 在你的命名空间中创建一个 Kubernetes 服务账号。
- 为你想在资源上允许的操作创建一个 Kubernetes ClusterRole。
- 从你的命名空间中的服务账号到你创建的 ClusterRole 创建一个 Kubernetes ClusterRoleBinding。
- 从你的命名空间中的服务账号到
system:auth-delegator
ClusterRole 创建一个 Kubernetes ClusterRoleBinding,以将授权决策委托给 Kubernetes 核心 API 服务器。 - 从你的命名空间中的服务账号到
extension-apiserver-authentication-reader
Role 创建一个 Kubernetes RoleBinding。这允许你的扩展 API 服务器访问extension-apiserver-authentication
ConfigMap。 - 创建一个 Kubernetes APIService。上述 CA 证书应经过 Base64 编码,去除换行符,并用作 APIService 的 spec.caBundle。它不应该有命名空间。如果使用 kube-aggregator API,只需传入 PEM 编码的 CA 束,因为 Base64 编码已为你完成。
- 使用 kubectl 获取你的资源。运行时,kubectl 应该返回“No resources found.”。此消息表示一切正常,但你目前没有创建该资源类型的对象。
下一步
- 逐步完成配置 API 聚合层并启用 apiserver 标志的步骤。
- 有关高层次概述,请参见使用聚合层扩展 Kubernetes API。
- 了解如何使用 Custom Resource Definitions 扩展 Kubernetes API。
上次修改时间:2022 年 7 月 21 日下午 1:41 PST:根据需要将“setup”的名词形式修正为动词形式“set up”(d6a1ba2a6d)