HNHacker News
TopNewBestAskShowJobs

tylerflint

147 karma · joined May 20, 2011

submissionscomments
tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
Java is supported, but currently in the pro version. Since JavaSSL is implemented in Java code, which runs in the Java VM and not exported as static symbols that can be uprobe'd, there is a bit more involved to generate a bridge between the JVM bytecode and static symbols that can be probed.
tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
Great idea!

On an unrelated note, your work has inspired most of my career in Solaris/Illumos/Linux systems and honestly this project likely wouldn't have happened if it wasn't for all of your books/blogs/projects to help me along the way. Thank you!

tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
The short answer is that we only have to calculate the offset per go version, no expensive runtime scanning is required.

The long answer is that the offsets are the byte alignment offsets for the go structs containing the pointers to the file descriptor and buffers. Fortunately we only have to calculate these for each version where the TLS structs within go actually change, so not even for every version. For instance, if a field is added, removed, or changes type then the location in memory where those pointers will be found changes. We can then calculate the actual offset at runtime where we know which architecture (amd64, arm64, etc) with a simple calculation. Within the eBPF probe, when the function is called, it uses pointer arithmetic to extract the location of the file descriptor and buffer directly.

tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
The main benefit is complete coverage. In production systems there are many different workloads with many different binaries, each with different build processes. Leveraging eBPF enables seeing everything on a system without having to adjust the build pipeline.
tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
Just run the qtap agent on whatever Linux machine has apps running on it and it will see everything through the kernel vs eBPF.

You can customize config and/or integrate with existing observability pipelines, but initially you just need to turn it on for it to work. No app instrumentation required.

tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
We have Go support, but it is not open sourced yet. Go is a bit more complicated but we were able to get it after some cave diving in the ELF formats. To give you a little insight on how this works, because Go is statically linked, we need to pull several different offsets of the functions we are going to hook into.

We do this by scanning every version of Go that is released to find offsets in the standard library that won't change. Then when we detect a new Go process, we use an ELF scanner to find some function offsets and hook into those with uprobes. Using both of these, we have all the information we need to see Go pre-encryption content as well as attribute it to connections and processes.

tylerflint··on Show HN: Using eBPF to see through encryption without a proxy
Great point! Yes it supports both scenarios. Qtap scans the binary ELF (curl, rust, etc) and looks for the TLS symbols. If they were statically compiled the eBPF probes will be attached directly to the binary, if dynamically linked the probes will be attached to the symbols in the library (.so).
tylerflint··on Nanobox is now free for developers
https://content.nanobox.io/nanobox-vs-docker-swarm-kubernete...
tylerflint··on Nanobox is now free for developers
That's the highest requested feature! Should be available in Q1 of 2018.
tylerflint··on Nanobox is now free for developers
fixing now. Thanks for the heads up
tylerflint··on A Docker Abstraction That Handles Container Security
https://nanobox.io/why-nanobox/nanobox-vs-heroku/
tylerflint··on PAAS Comparison – Dokku vs. Flynn vs. Deis vs. Kubernetes vs. Docker Swarm
Some of those aren't PaaS, but container orchestration frameworks.

If you're reading this list of comparisons out of genuine interest, I would suggest also looking into Nanobox: https://nanobox.io

tylerflint··on Is Magento Worth Revisiting?
I don't mean to be controversial here, but I really don't think so. If you're a quality engineer, you should stay away from Magento at all cost. I recently tried to download M2 and take it for a spin. It's very apparent they haven't learned. As an example, Magento still requires flock as a form of application-level locking (ie: the locking semantics of the application depend on a file-system behavior that is often unavailable on network filesystems). The filesystem must be writable for Magento to work at all. The engineering team completely ignores the realities of running Magento on a multi-node setup, or in a cloud environment. Not that a 12-factor app is the end-all specification, but it seems like the engineering team doesn't even understand the challenges of running in a cloud environment at all. This is very discouraging to me. In the beginning, I had very high hopes for Magento and I devoted thousands of hours and dozens of modules back to the community. Sad.
tylerflint··on Effectively Deploy Elixir Apps with Nanobox
Nanobox supports many languages. We are particularly excited about elixir though!
tylerflint··on Elixir deployments on AWS
Nanobox is free for developers to use for personal and open source projects.
tylerflint··on Nanobox: Local development done right
I think you're right. Thanks for the advice!
tylerflint··on Nanobox: Local development done right
NFS will be the default adapter for nanobox, but can be disabled.
tylerflint··on Nanobox: Local development done right
This is an issue we just became aware of. Working on a fix as we speak.
tylerflint··on Nanobox: Local development done right
Thanks for the feedback. You might want to keep any eye on Nanobox Cloud (https://nanobox.io/cloud/).
tylerflint··on Nanobox: Local development done right
Thanks for the heads up! Please keep in mind this is an open-source project in the pre-beta phase. Any contributions are welcomed!
tylerflint··on Nanobox: Local development done right
Yes, nanobox will try to auto-configure your environment for you. If you would rather define your environment or if nanobox can't auto-configure your environment, you can either:

1- Explicitly define your app's environment with the Boxfile (https://docs.nanobox.io/getting-started/boxfile/)

2- Write your own engine that will actually setup the environment (https://desktop.nanobox.io/engine-dev/).

tylerflint··on Nanobox: Local development done right
You're right, not every scenario can be handled automatically. For that reason, the Boxfile is king: https://docs.nanobox.io/getting-started/boxfile/
tylerflint··on Postgres high-availability cluster with auto-failover and cluster recovery
I couldn't agree more. We literally just introduced the nanopack cloud-initiative on friday (https://blog.nanobox.io/nanopack-a-new-vision-for-automated-...). Bear with us, we'll get there!
tylerflint··on A distributed, tag-based pub-sub service for modern web applications
Everything that mist does is "right in erlang's wheelhouse". Erlang is awesome and the actual reason we moved golang had nothing to do with erlang vs golang. I responded to that in detail at another spot on this thread (currently above, but who knows if that is still the case).
tylerflint··on A distributed, tag-based pub-sub service for modern web applications
That's a pretty accurate assessment. Mist could be conceptualized as a self-hosted replacement for pusher (https://pusher.com/). It's designed specifically to address building realtime web apps.
tylerflint··on A distributed, tag-based pub-sub service for modern web applications
The actual reason is much less exciting than you might have hoped and actually has nothing to do with erlang vs golang...

The erlang version has been running successfully for about 2 years and we haven't had any issues whatsoever (excepting a wrestling match with mnesia early on). We are erlang/elixir advocates and have used the erlang vm successfully on highly critical multi-million-concurrency services for over 6 years.

When we set out to build nanobox desktop (https://desktop.nanobox.io) our vision was to provide a single pre-compiled executable that could be run without any configuration. The design required a push layer and needed the same functionality that the erlang project was already providing. It wasn't feasible to package the erlang application into the nanobox binary, so we emulated the original project into a consumable golang package. As time went on we were porting more and more of the features into the golang port until all that was lacking was distribution and authentication. At that point we made the decision to consolidate our efforts into a single project, that could be a standalone service or composed within a golang binary.

I regret to inform you that there isn't a mass exodus within our company to ditch erlang for golang. While that certainly would make for a fun thread, in this case it was simply a matter of fit and effort consolidation.

tylerflint··on Postgres high-availability cluster with auto-failover and cluster recovery
Yeah we hear ya. The nanopack cloud-initiative was just announced last friday (https://blog.nanobox.io/nanopack-a-new-vision-for-automated-...). We're getting there slowly but surely!
tylerflint··on Postgres high-availability cluster with auto-failover and cluster recovery
repmgr and other projects listed here were considered and heavily tested initially. While each of them are great projects, we needed a solution that was fully automated in both cluster configuration/initialization as well as cluster recovery and migration. Many of these projects were inspirational in the design of yoke. You can read our vision for an "automated, API-driven infrastructure" (http://nanopack.io) for further clarification on why yoke was needed.
tylerflint··on Postgres high-availability cluster with auto-failover and cluster recovery
Much of the architecture of yoke was inspired by manatee. In fact, we've spent the last 2 years working with Joyent on smartos and illumos, so we were heavily inspired by the great engineering behind manatee.

Manatee didn't work for our use cases, which should not be interpreted as "manatee is bad". Here are a few of the reasons we forged a different solution:

- While node.js is a great language for many things, we didn't want the overhead of running the node.js/v8 runtime alongside postgres. 50M might seem negligible, but with thousands of postgres clusters for our clients every MB adds up.

- We didn't want the administrative overhead of managing a zookeeper cluster, and instead built the cluster management semantics directly into the yoke project.

- This may be different now, but at the time manatee was very heavily integrated into illumos/smartos. We really love smartos, but recognize that not all clients are able to use this tech.

tylerflint··on Postgres high-availability cluster with auto-failover and cluster recovery
Hey everyone, I work for nanobox and on the yoke project. I just woke up and noticed the thread. The interest is appreciated. There are a lot of great questions here, and I'll try to do my best to answer them individually. Please keep in mind that the nanopack cloud-initiative was just announced friday (https://blog.nanobox.io/nanopack-a-new-vision-for-automated-...), so we're working feverishly to get documentation, tutorials, and demos available. Any help or contributions would be greatly appreciated.
Page 1 of 2Next →