带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(十五)

(3)       Transport的使用案例

Client-go源码 Rest包中通过 RESTClientFor返回一个 RESTClient对象,RESTClient对 KubernetesAPIServer的 RESTfulAPI 的访问进行了封装抽象。RESTClientFor的实现见代码清单 2-53。

funcRESTClientFor(config*Config)(*RESTClient,error){

...

 

transport,err:=TransportFor(config)

iferr!=nil{

returnnil,err

}

 

varhttpClient*http.Client

iftransport!=http.DefaultTransport{


httpClient=&http.Client{Transport:transport}

ifconfig.Timeout>0{httpClient.Timeout=config.Timeout

}

}

 

...

 

restClient,err:=NewRESTClient(baseURL,versionedAPIPath,clientContent,rateLimiter,httpClient)

iferr==nil&&config.WarningHandler!=nil{restClient.warningHandler=config.WarningHandler

}

returnrestClient,err

}

 

funcTransportFor(config*Config)(http.RoundTripper,error){cfg,err:=config.TransportConfig()

iferr!=nil{

returnnil,err

}

returntransport.New(cfg)

}

 

以上代码是通过函数 RESTClientFor传入客户端配置参数 Config来创建 RESTClient的,函数通过调用TransportFor函数创建了一个 Transport,在上述代码的最后一行,可以看出该函数是通过调用Transport包中的 New函数创建了 http.RoundTripper。TransportFor函数通过将客户端 Config配置转化为 Transport包中的 Config类型并调用New函数创建 http.Transport。通过 New函数实现了底层 HTTP不同请求的封装,实现 了 HTTP客户端的安全连接。

上一篇:Web开发模式【Mode I 和Mode II的介绍、应用案例】(八)


下一篇:Java 简单操作接口 JDBI