func (c *EtcdConfig) newHttpTransport() (*http.Transport, error) { info := transport.TLSInfo{ CertFile: c.CertFile, KeyFile: c.KeyFile, CAFile: c.CAFile, } cfg, err := info.ClientConfig() if err != nil { return nil, err } // Copied from etcd.DefaultTransport declaration. // TODO: Determine if transport needs optimization tr := &http.Transport{ Proxy: http.ProxyFromEnvironment, Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, MaxIdleConnsPerHost: 500, TLSClientConfig: cfg, } return tr, nil }
func ExampleConfig_withTLS() { tlsInfo := transport.TLSInfo{ CertFile: "/tmp/test-certs/test-name-1.pem", KeyFile: "/tmp/test-certs/test-name-1-key.pem", TrustedCAFile: "/tmp/test-certs/trusted-ca.pem", } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { log.Fatal(err) } cli, err := clientv3.New(clientv3.Config{ Endpoints: endpoints, DialTimeout: dialTimeout, TLS: tlsConfig, }) if err != nil { log.Fatal(err) } defer cli.Close() // make sure to close the client _, err = cli.Put(context.TODO(), "foo", "bar") if err != nil { log.Fatal(err) } }
func newClientCfg() (*clientv3.Config, error) { // set tls if any one tls option set var cfgtls *transport.TLSInfo tlsinfo := transport.TLSInfo{} if grpcProxyCert != "" { tlsinfo.CertFile = grpcProxyCert cfgtls = &tlsinfo } if grpcProxyKey != "" { tlsinfo.KeyFile = grpcProxyKey cfgtls = &tlsinfo } if grpcProxyCA != "" { tlsinfo.CAFile = grpcProxyCA cfgtls = &tlsinfo } cfg := clientv3.Config{ Endpoints: grpcProxyEndpoints, DialTimeout: 5 * time.Second, } if cfgtls != nil { clientTLS, err := cfgtls.ClientConfig() if err != nil { return nil, err } cfg.TLS = clientTLS } // TODO: support insecure tls return &cfg, nil }
func newETCD3Storage(c storagebackend.Config) (storage.Interface, error) { tlsInfo := transport.TLSInfo{ CertFile: c.CertFile, KeyFile: c.KeyFile, CAFile: c.CAFile, } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { return nil, err } // NOTE: Client relies on nil tlsConfig // for non-secure connections, update the implicit variable if len(c.CertFile) == 0 && len(c.KeyFile) == 0 && len(c.CAFile) == 0 { tlsConfig = nil } cfg := clientv3.Config{ Endpoints: c.ServerList, TLS: tlsConfig, } client, err := clientv3.New(cfg) if err != nil { return nil, err } etcd3.StartCompactor(context.Background(), client) return etcd3.New(client, c.Codec, c.Prefix), nil }
func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { tlsInfo := transport.TLSInfo{ CertFile: c.CertFile, KeyFile: c.KeyFile, CAFile: c.CAFile, } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { return nil, nil, err } // NOTE: Client relies on nil tlsConfig // for non-secure connections, update the implicit variable if len(c.CertFile) == 0 && len(c.KeyFile) == 0 && len(c.CAFile) == 0 { tlsConfig = nil } cfg := clientv3.Config{ Endpoints: c.ServerList, TLS: tlsConfig, } client, err := clientv3.New(cfg) if err != nil { return nil, nil, err } ctx, cancel := context.WithCancel(context.Background()) etcd3.StartCompactor(ctx, client) destroyFunc := func() { cancel() client.Close() } if c.Quorum { return etcd3.New(client, c.Codec, c.Prefix), destroyFunc, nil } return etcd3.NewWithNoQuorumRead(client, c.Codec, c.Prefix), destroyFunc, nil }
func newEtcdClient(theEndpoints, certFile, keyFile, caFile string) (*clientv3.Client, error) { // Log the etcd endpoint for debugging purposes logger.Infof("ETCD Endpoints: %s", theEndpoints) // ETCD config etcdConfig := clientv3.Config{ Endpoints: strings.Split(theEndpoints, ","), DialTimeout: dialTimeout, } // Optionally, configure TLS transport if certFile != "" && keyFile != "" && caFile != "" { // Load client cert tlsInfo := transport.TLSInfo{ CertFile: certFile, KeyFile: keyFile, TrustedCAFile: caFile, } // Setup HTTPS client tlsConfig, err := tlsInfo.ClientConfig() if err != nil { return nil, err } // Add TLS config etcdConfig.TLS = tlsConfig } // ETCD client return clientv3.New(etcdConfig) }
func newClientCfg(endpoints []string, dialTimeout time.Duration, scfg *secureCfg, acfg *authCfg) (*clientv3.Config, error) { // set tls if any one tls option set var cfgtls *transport.TLSInfo tlsinfo := transport.TLSInfo{} if scfg.cert != "" { tlsinfo.CertFile = scfg.cert cfgtls = &tlsinfo } if scfg.key != "" { tlsinfo.KeyFile = scfg.key cfgtls = &tlsinfo } if scfg.cacert != "" { tlsinfo.CAFile = scfg.cacert cfgtls = &tlsinfo } cfg := &clientv3.Config{ Endpoints: endpoints, DialTimeout: dialTimeout, } if cfgtls != nil { clientTLS, err := cfgtls.ClientConfig() if err != nil { return nil, err } cfg.TLS = clientTLS } // if key/cert is not given but user wants secure connection, we // should still setup an empty tls configuration for gRPC to setup // secure connection. if cfg.TLS == nil && !scfg.insecureTransport { cfg.TLS = &tls.Config{} } // If the user wants to skip TLS verification then we should set // the InsecureSkipVerify flag in tls configuration. if scfg.insecureSkipVerify && cfg.TLS != nil { cfg.TLS.InsecureSkipVerify = true } if acfg != nil { cfg.Username = acfg.username cfg.Password = acfg.password } return cfg, nil }
func NewTransport(info transport.TLSInfo) (*Transport, error) { cfg, err := info.ClientConfig() if err != nil { return nil, err } t := &Transport{ // timeouts taken from http.DefaultTransport Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, TLSClientConfig: cfg, } return t, nil }
func mustClient(endpoints []string, cert, key, cacert string) *clientv3.Client { // set tls if any one tls option set var cfgtls *transport.TLSInfo tls := transport.TLSInfo{} var file string if cert != "" { tls.CertFile = cert cfgtls = &tls } if key != "" { tls.KeyFile = key cfgtls = &tls } if cacert != "" { tls.CAFile = file cfgtls = &tls } cfg := clientv3.Config{ Endpoints: endpoints, DialTimeout: 20 * time.Second, } if cfgtls != nil { clientTLS, err := cfgtls.ClientConfig() if err != nil { ExitWithError(ExitBadArgs, err) } cfg.TLS = clientTLS } client, err := clientv3.New(cfg) if err != nil { ExitWithError(ExitBadConnection, err) } return client }
func newETCD3Storage(c storagebackend.Config) (storage.Interface, error) { tlsInfo := transport.TLSInfo{ CertFile: c.CertFile, KeyFile: c.KeyFile, CAFile: c.CAFile, } tlsConfig, err := tlsInfo.ClientConfig() if err != nil { return nil, err } cfg := clientv3.Config{ Endpoints: c.ServerList, TLS: tlsConfig, } client, err := clientv3.New(cfg) if err != nil { return nil, err } etcd3.StartCompactor(context.Background(), client) return etcd3.New(client, c.Codec, c.Prefix), nil }
func newHTTPSTransport(certFile, keyFile, caFile string) (*http.Transport, error) { info := transport.TLSInfo{ CertFile: certFile, KeyFile: keyFile, CAFile: caFile, } cfg, err := info.ClientConfig() if err != nil { return nil, err } tr := &http.Transport{ Proxy: http.ProxyFromEnvironment, Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, TLSClientConfig: cfg, } return tr, nil }
func newTransportForETCD2(certFile, keyFile, caFile string) (*http.Transport, error) { info := transport.TLSInfo{ CertFile: certFile, KeyFile: keyFile, CAFile: caFile, } cfg, err := info.ClientConfig() if err != nil { return nil, err } // Copied from etcd.DefaultTransport declaration. // TODO: Determine if transport needs optimization tr := utilnet.SetTransportDefaults(&http.Transport{ Proxy: http.ProxyFromEnvironment, Dial: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, }).Dial, TLSHandshakeTimeout: 10 * time.Second, MaxIdleConnsPerHost: 500, TLSClientConfig: cfg, }) return tr, nil }