Skip to content

Comments

hive: serve simulation API via proxy container#545

Merged
fjl merged 62 commits intomasterfrom
api-proxy
Jul 7, 2022
Merged

hive: serve simulation API via proxy container#545
fjl merged 62 commits intomasterfrom
api-proxy

Conversation

@fjl
Copy link
Collaborator

@fjl fjl commented May 17, 2022

In order to communicate with the simulator container, hive needs to provide an API listener on the same network as the simulator. The way this is done right now is error-prone. At startup, it tries to figure out the local network interface corresponding to Docker's bridge network and listens there. This works on Linux, sometimes. Quite a few people have run into issues with it.

This PR makes the API communication more portable. To listen for simulator commands, hive launches a 'proxy' container. The proxy is an HTTP server that forwards requests to hive via its stdout/stdin streams. Hive also delegates container liveness checks to the proxy, because those checks also require connectivity on the Docker network.

Overall, this change has big advantages:

  • Hive can once again run on all platforms because it doesn't rely on Docker implementation details anymore.
  • Remote docker can be supported with this method, i.e. you can run dockerd in a Linux VM somewhere and push hive workloads to it from another machine running any OS.
  • Since hive does not need direct access to the bridge network anymore, we can isolate clients from the Internet in a future change.

Copy link
Contributor

@holiman holiman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

hive.go Outdated
defer shutdownServer(server)

go server.Serve(listener)
// server := &http.Server{Handler: tm.API()}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't you remove that log statement too? It's not true any longer (right?)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need to fix this, just commented these lines to make it compile :)

@fjl
Copy link
Collaborator Author

fjl commented May 18, 2022

Aww, I checked this and there is another catch with remote docker that I didn't think about. Hive also needs to talk to the client container to wait for a port to open. We could make the the proxy do that as well, but it's definitely a non-trivial complexity increase.

@fjl fjl marked this pull request as draft May 18, 2022 13:40
@fjl fjl mentioned this pull request Jun 22, 2022
@fjl fjl merged commit 10b6a4c into master Jul 7, 2022
@skylenet skylenet deleted the api-proxy branch January 30, 2025 16:30
racytech pushed a commit to racytech/hive that referenced this pull request Apr 4, 2025
racytech pushed a commit to racytech/hive that referenced this pull request Apr 4, 2025
🤖 I have created a release *beep* *boop*
---


##
[2.2.0](ethpandaops/ethereum-package@2.1.0...2.2.0)
(2024-04-19)


### Features

* add assertoor test for per PR CI job
([ethereum#537](ethpandaops/ethereum-package#537))
([8ef5c57](ethpandaops/ethereum-package@8ef5c57))
* add blutgang rpc load balancer
([ethereum#569](ethpandaops/ethereum-package#569))
([1be5f95](ethpandaops/ethereum-package@1be5f95))
* add dugtrio beacon load balancer
([ethereum#568](ethpandaops/ethereum-package#568))
([56d2fa3](ethpandaops/ethereum-package@56d2fa3))
* add new assertoor test to per ci jobs
([ethereum#545](ethpandaops/ethereum-package#545))
([3005d46](ethpandaops/ethereum-package@3005d46))
* use new rpc snooper from `ethpandaops/rpc-snooper`
([ethereum#567](ethpandaops/ethereum-package#567))
([5676f0d](ethpandaops/ethereum-package@5676f0d))


### Bug Fixes

* add --contract-deployment-block parameter for Prysm
([ethereum#557](ethpandaops/ethereum-package#557))
([d8dfbae](ethpandaops/ethereum-package@d8dfbae))
* Added '--enable-private-discovery' to Grandine
([ethereum#541](ethpandaops/ethereum-package#541))
([a1ae708](ethpandaops/ethereum-package@a1ae708))
* beaconchain explorer
([ethereum#531](ethpandaops/ethereum-package#531))
([b62ed6f](ethpandaops/ethereum-package@b62ed6f))
* beaconchain explorer
([ethereum#538](ethpandaops/ethereum-package#538))
([ce1f337](ethpandaops/ethereum-package@ce1f337))
* blobber incorrect url
([ethereum#528](ethpandaops/ethereum-package#528))
([6f84e3d](ethpandaops/ethereum-package@6f84e3d))
* bump json rpc snooper
([ethereum#553](ethpandaops/ethereum-package#553))
([f69c4a7](ethpandaops/ethereum-package@f69c4a7))
* disable full sync if gcmode is archive
([ethereum#563](ethpandaops/ethereum-package#563))
([b7592ec](ethpandaops/ethereum-package@b7592ec))
* disable pbss when gcmode archive set
([ethereum#559](ethpandaops/ethereum-package#559))
([e085462](ethpandaops/ethereum-package@e085462))
* disable pbss when gcmode archive set, force hash based init
([ethereum#562](ethpandaops/ethereum-package#562))
([3e1c7a6](ethpandaops/ethereum-package@3e1c7a6))
* disable static peers
([ethereum#529](ethpandaops/ethereum-package#529))
([c5d4028](ethpandaops/ethereum-package@c5d4028))
* enable single node mode on lodestar by default
([ethereum#558](ethpandaops/ethereum-package#558))
([555ad7d](ethpandaops/ethereum-package@555ad7d))
* fix doc string typo
([ethereum#560](ethpandaops/ethereum-package#560))
([13de3f6](ethpandaops/ethereum-package@13de3f6))
* fix failing persistence test
([ethereum#554](ethpandaops/ethereum-package#554))
([99242d6](ethpandaops/ethereum-package@99242d6))
* increase mem limit of snooper
([ethereum#546](ethpandaops/ethereum-package#546))
([6ba5770](ethpandaops/ethereum-package@6ba5770))
* prysm beacon http url
([ethereum#536](ethpandaops/ethereum-package#536))
([4914531](ethpandaops/ethereum-package@4914531))
* prysm beacon_http_url
([ethereum#535](ethpandaops/ethereum-package#535))
([ee7528c](ethpandaops/ethereum-package@ee7528c))
* prysm vc
([ethereum#533](ethpandaops/ethereum-package#533))
([72ddeb2](ethpandaops/ethereum-package@72ddeb2))
* remove un-needed prysm vc check
([ethereum#542](ethpandaops/ethereum-package#542))
([f6326fe](ethpandaops/ethereum-package@f6326fe))
* set application protocol to be http for rpc
([ethereum#548](ethpandaops/ethereum-package#548))
([905de7c](ethpandaops/ethereum-package@905de7c))
* set the correct default vc image
([ethereum#544](ethpandaops/ethereum-package#544))
([953741d](ethpandaops/ethereum-package@953741d))
* uniformize keymanager
([ethereum#534](ethpandaops/ethereum-package#534))
([a6a2830](ethpandaops/ethereum-package@a6a2830))
* update prometheus api
([ethereum#539](ethpandaops/ethereum-package#539))
([d2b9fb8](ethpandaops/ethereum-package@d2b9fb8))
* update vc <> cl matrix
([ethereum#564](ethpandaops/ethereum-package#564))
([0ffcf74](ethpandaops/ethereum-package@0ffcf74))
* update vc compatibility matrix
([ethereum#543](ethpandaops/ethereum-package#543))
([58c4684](ethpandaops/ethereum-package@58c4684))
* use `minimal-preset` images for dora & assertoor when minimal preset
is used
([ethereum#532](ethpandaops/ethereum-package#532))
([ad7773e](ethpandaops/ethereum-package@ad7773e))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants