API Aggregation
API Aggregation允许在不修改Kubernetes核心代码的同时扩展Kubernetes API。
开启API Aggregation
kube-apiserver增加以下配置
--requestheader-client-ca-file=<path to aggregator CA cert>
--requestheader-allowed-names=aggregator
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
--proxy-client-cert-file=<path to aggregator proxy cert>
--proxy-client-key-file=<path to aggregator proxy key>
如果kube-proxy
没有在Master上面运行,还需要配置
--enable-aggregator-routing=true
创建扩展API
- 确保开启APIService API(默认开启,可用
kubectl get apiservice
命令验证) - 创建RBAC规则
- 创建一个namespace,用来运行扩展的API服务
- 创建CA和证书,用于https
- 创建一个存储证书的secret
- 创建一个部署扩展API服务的deployment,并使用上一步的secret配置证书,开启https服务
- 创建一个ClusterRole和ClusterRoleBinding
- 创建一个非namespace的apiservice,注意设置
spec.caBundle
- 运行
kubectl get <resource-name>
,正常应该返回No resources found.
可以使用apiserver-builder工具自动化上面的步骤。
# 初始化项目
$ cd GOPATH/src/github.com/my-org/my-project
$ apiserver-boot init repo --domain <your-domain>
$ apiserver-boot init glide
# 创建资源
$ apiserver-boot create group version resource --group <group> --version <version> --kind <Kind>
# 编译
$ apiserver-boot build executables
$ apiserver-boot build docs
# 本地运行
$ apiserver-boot run local
# 集群运行
$ apiserver-boot run in-cluster --name nameofservicetorun --namespace default --image gcr.io/myrepo/myimage:mytag
$ kubectl create -f sample/<type>.yaml
示例
见sample-apiserver和apiserver-builder/example。
备注
另外一种扩展 Kubernetes API 的方法是使用 CustomResourceDefinition (CRD)。