code: func (h *Client) connect(ctx context.Context) (conn *grpc.ClientConn, err error) {
  	opts := []grpc.DialOption{
  		grpc.WithBlock(),
  		grpc.WithKeepaliveParams(keepalive.ClientParameters{
  			// Send keepalive every 30 seconds to prevent the connection from
  			// getting closed by upstreams
  			Time: time.Duration(30) * time.Second,
  		}),
  		grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(maxMsgSize)),
  	}
  	switch {
  	case h.opts.useTLS:
  		opts = append(opts, grpc.WithTransportCredentials(credentials.NewTLS(h.opts.tlsConfig)))
  	default:
  		opts = append(opts, grpc.WithInsecure())
  	}
  	ctx, cancel := context.WithTimeout(ctx, h.opts.connectTimeout)
  	defer cancel()
  	if conn, err = grpc.DialContext(ctx, h.opts.host, opts...); err != nil {
  		return nil, err
  	}
  	return conn, nil
  }
docs: // connect returns a gRPC connection to Tiller or error. The gRPC dial options
  // are constructed here.