Add 2017Q2 CloudABI-based network communication entry from ed
This commit is contained in:
parent
69e39a0182
commit
3939a9b082
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=50554
1 changed files with 71 additions and 0 deletions
|
@ -1510,4 +1510,75 @@
|
|||
<task>Setup the automatic QA infrastructure.</task>
|
||||
</help>
|
||||
</project>
|
||||
|
||||
<project cat='proj'>
|
||||
<title>Capability-Based Network Communication for Capsicum/CloudABI</title>
|
||||
|
||||
<contact>
|
||||
<person>
|
||||
<name>
|
||||
<given>Ed</given>
|
||||
<common>Schouten</common>
|
||||
</name>
|
||||
<email>ed@nuxi.nl</email>
|
||||
</person>
|
||||
</contact>
|
||||
|
||||
<links>
|
||||
<url href="https://github.com/NuxiNL/arpc">ARPC: GRPC-Like RPC Library That Wupports File Descriptor Passing</url>
|
||||
<url href="https://github.com/NuxiNL/flower">Flower: A Label-Based Network Backplane</url>
|
||||
</links>
|
||||
|
||||
<body>
|
||||
<p>One of the weaknesses of Capsicum and CloudABI is that it is
|
||||
not easy to develop applications that need to make outgoing
|
||||
network connections, since system calls like
|
||||
<tt>connect()</tt> and <tt>sendto()</tt> are disabled. Though
|
||||
we can sometimes work around this by ensuring that the
|
||||
sandboxed process already possesses socket file descriptors on
|
||||
startup, this doesn't allow the destination process to be
|
||||
restarted, moved to a different network address, be load
|
||||
balanced, etc.</p>
|
||||
|
||||
<p>Coming up with a solution for this is quite important for me,
|
||||
as I am currently working on making CloudABI work on top of
|
||||
Kubernetes, Google's open source cluster management suite.
|
||||
The idea is that Kubernetes will schedule CloudABI processes
|
||||
instead of Docker containers. All of these CloudABI processes
|
||||
will have their dependencies on other services in the cluster
|
||||
injected explicitly, making internal communication very
|
||||
secure. All of this is intended to work on &os; as well, of
|
||||
course!</p>
|
||||
|
||||
<p>To solve this problem, I've been working on a daemon called
|
||||
Flower (read: flow-er) that allows software to register
|
||||
services and connect to them. Servers are identified by a set
|
||||
of labels with values (e.g., <tt>{datacenter: 'frankfurt',
|
||||
service: 'mysql'}</tt>). Clients can connect these servers by
|
||||
providing the corresponding label(s). Flower's security model is
|
||||
capability-based, just like Capsicum. The ability to bind and
|
||||
connect can be limited by permanently constraining labels to
|
||||
certain values.</p>
|
||||
|
||||
<p>Flower has been designed not to act as a proxy. It does
|
||||
not copy any data. It merely forwards existing socket file
|
||||
descriptors or creates UNIX socket pairs and hands these out
|
||||
to its clients and servers. To realize this, processes
|
||||
communicate with Flower using an RPC library called ARPC.
|
||||
ARPC is a very simple clone of Google's GRPC, with the special
|
||||
feature that messages (Protobufs) can have file descriptors
|
||||
attached.</p>
|
||||
</body>
|
||||
|
||||
<sponsor>Nuxi, the Netherlands</sponsor>
|
||||
|
||||
<help>
|
||||
<task>Finish implementing the Flower code.</task>
|
||||
|
||||
<task>Integrate Flower with the Kubernetes/CloudABI runtime.</task>
|
||||
|
||||
<task>Release the Kubernetes/CloudABI runtime as open source
|
||||
software.</task>
|
||||
</help>
|
||||
</project>
|
||||
</report>
|
||||
|
|
Loading…
Reference in a new issue