安装一个扩展的APIserver
安装扩展的API服务器来使用聚合层以让KubernetesAPI服务器使用其它API进行扩展,这些API不是核心KubernetesAPI的一部分。
在开始之前
你必须拥有一个Kubernetes的集群,同时你的Kubernetes集群必须带有kubectl命令行工具。建议在至少有两个节点的集群上运行本教程,且这些节点不作为控制平面主机。如果你还没有集群,你可以通过Minikube构建一个你自己的集群,或者你可以使用下面任意一个Kubernetes工具构建:
要获知版本信息,请输入kubectlversion。
你必须配置聚合层并且启用API服务器的相关参数。
安装一个扩展的API服务器来使用聚合层
以下步骤描述如何在一个高层次设置一个扩展的apiserver。无论你使用的是YAML配置还是使用API,这些步骤都适用。目前我们正在尝试区分出两者的区别。有关使用YAML配置的具体示例,你可以在Kubernetes库中查看sample-apiserver。
或者,你可以使用现有的第三方解决方案,例如apiserver-builder,它将生成框架并自动执行以下所有步骤。
确保启用了APIServiceAPI(检查--runtime-config)。默认应该是启用的,除非被特意关闭了。 你可能需要制定一个RBAC规则,以允许你添加APIService对象,或让你的集群管理员创建一个。(由于API扩展会影响整个集群,因此不建议在实时集群中对API扩展进行测试/开发/调试) 创建Kubernetes命名空间,扩展的api-service将运行在该命名空间中。 创建(或获取)用来签署服务器证书的CA证书,扩展api-server中将使用该证书做HTTPS连接。 为api-server创建一个服务端的证书(或秘钥)以使用HTTPS。这个证书应该由上述的CA签署。同时应该还要有一个KubeDNS名称的CN,这是从Kubernetes服务派生而来的,格式为..svc。 使用命名空间中的证书(或秘钥)创建一个Kubernetessecret。 为扩展api-server创建一个KubernetesDeployment,并确保以卷的方式挂载了Secret。它应该包含对扩展api-server镜像的引用。Deployment也应该在同一个命名空间中。 确保你的扩展apiserver从该卷中加载了那些证书,并在HTTPS握手过程中使用它们。
在你的命名空间中创建一个Kubernetes服务账号。 为资源允许的操作创建Kubernetes集群角色。 用你命名空间中的服务账号创建一个Kubernetes集群角色绑定,绑定到你创建的角色上。 用你命名空间中的服务账号创建一个Kubernetes集群角色绑定,绑定到system:auth-delegator集群角色,以将auth决策委派给Kubernetes核心API服务器。 以你命名空间中的服务账号创建一个Kubernetes集群角色绑定,绑定到extension-apiserver-authentication-reader角色。这将让你的扩展api-server能够访问extension-apiserver-authenticationconfigmap。 创建一个Kubernetesapiservice。上述的CA证书应该使用base64编码,剥离新行并用作apiservice中的spec.caBundle。该资源不应放到任何名字空间。如果使用了kube-aggregatorAPI,那么只需要传入PEM编码的CA绑定,因为base64编码已经完成了。 使用kubectl来获得你的资源。它应该返回“找不到资源”。此消息表示一切正常,但你目前还没有创建该资源类型的对象。