背景
在多分支并行开发的集群下,新建分支以及删除分支都需要开发人员手动维护Istio/K8s的资源对象
目的
结合git hook -》 sync程序 -》 kubernetes API 流程,自动维护k8s以及istio资源对象,减少成本,提高开发效率
技术栈
GitLab Api
使用GitLab Api,获取项目分支信息
1 | <!-- https://mvnrepository.com/artifact/org.gitlab/java-gitlab-api --> |
gitlab api认证

1 | /** |
gitlab hook配置

1 | 请求体如下:主要会用到的参数有before,after,event_name,project_id,ref(分支名),project.name |
fabric8
This client provides access to the full Kubernetes & OpenShift REST APIs via a fluent DSL.
1 | <!-- 对应版本:https://github.com/fabric8io/kubernetes-client/#kubernetes-compatibility-matrix --> |
Client认证
当与集群交互的时候常用的Client认证方式包括kubeconfig(即证书) 和 token,以下使用证书方式,默认在~/.kube/config,参考站内
使用kubeconfig或token进行用户身份认证
1 |
|
需求
如果token认证失败,则return
如果before是0,则为create branch:1.取所有分支名 2.default分支为旧分支 3.createOrUpdate istio 对象
如果after是0,则为delete branch:1.取所有分支名 2.default分支为旧分支 3.createOrUpdate istio 对象 4.删除k8s deploy对象
如果是新项目(空的virtual service):1.取所有分支名 2.default分支为master分支 3.createOrUpdate istio 对象
如果before和after都不是0,说明是普通的push操作,则return
如果push操作的分支名称不以release开头,则return
如果当前是delete branch操作,且branch.equals(default分支),则将default分支修改为master
代码实现
yaml
1 | apiVersion: networking.istio.io/v1beta1 |
yaml -> object 代码实现
1 | // 保证并发请求下, 同一个项目的幂等操作 |
参考
https://kubebyexample.com/learning-paths/istio/traffic-management
https://github.com/fabric8io/kubernetes-client
https://github.com/fabric8io/kubernetes-client/tree/master/extensions/istio/examples