client-go简介
直观上看,用户可以使用kubectl、客户端库或者REST请求来访问K8S API。而实际上,无论是kubectl还是客户端库,都是封装了REST请求的工具。client-go作为一个客户端库,能够调用K8S API,实现对K8S集群中资源对象(包括deployment、service、ingress、replicaSet、pod、namespace、node等)的增删改查等操作。
源码地址:kubernetes/client-go
接口文档:kubernetes - GoDoc
通过REST访问K8S
《K8S入门篇》一文中使用kubectl对minikube进行管理,本节中直接使用REST请求来对minikube进行管理。参考Access Clusters Using the Kubernetes API,来测试一下。
kubectl处理API服务器的定位和身份验证。如果要使用curl或wget等http客户端或浏览器直接访问REST API,可以通过多种方式查找和验证API服务器:
(1)在代理模式下运行kubectl(推荐)。建议使用此方法,因为它使用存储的apiserver位置并使用自签名证书验证API服务器的标识。使用此方法无法进行中间人(MITM)攻击。
(2)直接向http客户端提供位置和凭据。这适用于被代理混淆的客户端代码。为了防止中间人攻击,需要将根证书导入浏览器。
使用Go或Python客户端库可以在代理模式下访问kubectl。
启动minikube,查看集群配置
1 | minikube start |
查看kubectl访问了什么url,获得了什么信息。
1 | kubectl get nodes -v=8 |
kubectl代理模式
充当反向代理模式下运行kubectl,它处理定位API服务器和进行身份验证。
1 | kubectl proxy --port=8080 & |
此时使用浏览器进行访问,同样可以拿到数据。
grep/cut方法
1 | # Check all possible clusters, as you .KUBECONFIG may have multiple contexts: |
jsonpath方法
1 | APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}') |
client-go操作K8S
client-go实际上是封装了REST请求的客户端库,能够简化我们的工作。
参考k8s-client-go项目,对k8s进行一些基本操作,包括连接k8s,创建更新deployment,查看deployment状态,查看pod状态等。
在使用该项目之前,需要获取k8s集群的配置信息:kubectl config view
把配置信息拷贝一下,粘贴到项目中的admin.conf文件中即可。
此外,k8s-client-go项目依赖client-go,因此需要参考《Golang包管理工具》安装好依赖。
后记
本文中学习了client-go的安装方法,然后借助k8s-client-go项目学习了client-go的基本用法。接下来,使用client-go实现在K8S集群中发布项目,go!go!go!