运行Go 1.6的托管VM在维护HTTP / 2客户端时遇到问题

I'm trying to send requests to Apple's APNS service using their HTTP/2 API, and my service is working fine locally, but once it's on a Managed VM it seems the underlying sockets are dying after a few minutes and the Go HTTP library is unable to handle it gracefully.

What I see is the requests working fine (getting responses) for a while, but if it's idle for a few minutes the connections will take minutes to time out with read tcp 172.17.0.4:35395->17.172.234.19:443: read: connection timed out (apparently ignoring the 10 second timeout I specified).

I've previously had keep-alive issues with Managed VMs specifically, but Google has indicated it should be fixed. Does anyone know how to avoid this issue?

I'm creating an HTTP/2 client in this way:

func NewClient() *http.Client {
    cert, err := tls.LoadX509KeyPair("secrets/prod_voip.pem", "secrets/prod_voip.key")
    if err != nil {
        log.Fatalln(err)
    }
    config := &tls.Config{
        Certificates: []tls.Certificate{cert},
    }
    config.BuildNameToCertificate()
    dialer := &net.Dialer{
        Timeout: 10 * time.Second,
    }
    transport := &http.Transport{
        Dial:            dialer.Dial,
        TLSClientConfig: config,
    }
    // Explicitly enable HTTP/2 as TLS-configured clients don't auto-upgrade.
    // See: https://github.com/golang/go/issues/14275
    if err := http2.ConfigureTransport(transport); err != nil {
        log.Fatalln(err)
    }
    return &http.Client{Transport: transport}
}