// NewClient creates a new Google Container Engine client. func NewClient(ctx context.Context, projectID string, opts ...option.ClientOption) (*Client, error) { o := []option.ClientOption{ option.WithEndpoint(prodAddr), option.WithScopes(raw.CloudPlatformScope), option.WithUserAgent(userAgent), } o = append(o, opts...) httpClient, endpoint, err := transport.NewHTTPClient(ctx, o...) if err != nil { return nil, fmt.Errorf("dialing: %v", err) } svc, err := raw.New(httpClient) if err != nil { return nil, fmt.Errorf("constructing container client: %v", err) } svc.BasePath = endpoint c := &Client{ projectID: projectID, svc: svc, } return c, nil }
func rawService(ctx context.Context) *raw.Service { return internal.Service(ctx, "container", func(hc *http.Client) interface{} { svc, _ := raw.New(hc) return svc }).(*raw.Service) }
// initGCE must be called before initKube func initKube() error { initKubeCalled = true // projectID was set by initGCE registryPrefix += "/" + projectID if !hasCloudPlatformScope() { return errors.New("coordinator not running with access to the Cloud Platform scope.") } httpClient := oauth2.NewClient(oauth2.NoContext, tokenSource) var err error containerService, err = container.New(httpClient) if err != nil { return fmt.Errorf("could not create client for Google Container Engine: %v", err) } cluster, err := containerService.Projects.Zones.Clusters.Get(projectID, projectZone, clusterName).Do() if err != nil { return fmt.Errorf("cluster %q could not be found in project %q, zone %q: %v", clusterName, projectID, projectZone, err) } // Decode certs decode := func(which string, cert string) []byte { if err != nil { return nil } s, decErr := base64.StdEncoding.DecodeString(cert) if decErr != nil { err = fmt.Errorf("error decoding %s cert: %v", which, decErr) } return []byte(s) } clientCert := decode("client cert", cluster.MasterAuth.ClientCertificate) clientKey := decode("client key", cluster.MasterAuth.ClientKey) caCert := decode("cluster cert", cluster.MasterAuth.ClusterCaCertificate) if err != nil { return err } // HTTPS client cert, err := tls.X509KeyPair(clientCert, clientKey) if err != nil { return fmt.Errorf("x509 client key pair could not be generated: %v", err) } // CA Cert from kube master caCertPool := x509.NewCertPool() caCertPool.AppendCertsFromPEM([]byte(caCert)) // Setup TLS config tlsConfig := &tls.Config{ Certificates: []tls.Certificate{cert}, RootCAs: caCertPool, } tlsConfig.BuildNameToCertificate() kubeHTTPClient := &http.Client{ Transport: &http.Transport{ TLSClientConfig: tlsConfig, }, } kubeClient, err = kubernetes.NewClient("https://"+cluster.Endpoint, kubeHTTPClient) if err != nil { return fmt.Errorf("kubernetes HTTP client could not be created: %v", err) } go kubePool.pollCapacityLoop() return nil }