in pkg/common/hubconfig/hubconfig.go [42:109]
func PrepareHubConfig(tlsClientInsecure bool) (*rest.Config, error) {
hubURL, err := env.Lookup(hubServerURLEnvKey)
if err != nil {
klog.ErrorS(err, "Hub cluster endpoint URL cannot be empty")
return nil, err
}
tokenFilePath, err := env.Lookup(tokenConfigPathEnvKey)
if err != nil {
klog.ErrorS(err, "Hub token file path cannot be empty")
return nil, err
}
// Retry on obtaining token file as it is created asynchronously by token-refesh container
if err := retry.OnError(retry.DefaultRetry, func(_ error) bool {
return true
}, func() error {
// Stat returns file info. It will return an error if there is no file.
_, err := os.Stat(tokenFilePath)
return err
}); err != nil {
klog.ErrorS(err, "Cannot retrieve token file from the path %s", tokenFilePath)
return nil, err
}
var hubConfig *rest.Config
if tlsClientInsecure {
hubConfig = &rest.Config{
BearerTokenFile: tokenFilePath,
Host: hubURL,
TLSClientConfig: rest.TLSClientConfig{
Insecure: tlsClientInsecure,
},
}
} else {
var caData []byte
hubCA, err := env.Lookup(hubCAEnvKey)
if err == nil {
caData, err = base64.StdEncoding.DecodeString(hubCA)
if err != nil {
klog.ErrorS(err, "Cannot decode hub cluster certificate authority data")
return nil, err
}
}
hubConfig = &rest.Config{
BearerTokenFile: tokenFilePath,
Host: hubURL,
TLSClientConfig: rest.TLSClientConfig{
Insecure: tlsClientInsecure,
CAData: caData,
},
}
}
// Sometime the hub cluster need additional http header for authentication or authorization.
// the "HUB_KUBE_HEADER" to allow sending custom header to hub's API Server for authentication and authorization.
if header, err := env.Lookup(hubKubeHeaderEnvKey); err == nil {
r := textproto.NewReader(bufio.NewReader(strings.NewReader(header)))
h, err := r.ReadMIMEHeader()
if err != nil && !errors.Is(err, io.EOF) {
klog.ErrorS(err, "failed to parse HUB_KUBE_HEADER %q", header)
return nil, err
}
hubConfig.WrapTransport = func(rt http.RoundTripper) http.RoundTripper {
return httpclient.NewCustomHeadersRoundTripper(http.Header(h), rt)
}
}
return hubConfig, nil
}