Eh, gotta call this out. The Internet is designed on an end-to-end principle, and at each layer the endpoints are expected to mediate behaviour via protocols.
By this architectural standard, middleboxes (including all HTTP proxies and CDNs and what have you) are kludges. They are not "how the internet works", they are the antithesis, they are symptoms of emergent pathology. These are barriers to federation and distributed systems, both enabling and enabled by centralizing forces that divert individual autonomy & value to institutional & commercial interest. They are evidence for Further Research & Development Required, and my belief is we'll eventually solve these problems at the end-to-end protocol level.
As for Cloudflare, particularly, their business strategy is to drive down the marginal cost of their own bandwidth, for use in revenue-bearing services such as DDoS mitigation. Every service provided for "free" (some of which, at the free tier, will increase your site latency and lower your visitor count, by the way) works to increase their volumes for use as leverage in peering negotiations. As ever, "free" = "you are the product".
Yes, this is true, and the end-to-end principle is great. But it's not always straightforward to follow, and certainly is not a religion. In the end, no one cares about the end-to-end principle. They want systems that are flexible, robust, and high performance. In some sense, it's a lot like simplicity. You try to and make your design as simple as possible, but sometimes, you have to have complexity. It's not ideal, but it's not a deal breaker either.
Additionally, you have to ask the question: what is an endpoint? "A" server, or can a distributed system be seen as an endpoint? After all, a single server is a bunch of independent components communicating with one another (via infinity fabric, PCIe, etc), so why would it matter if we spread those components across machines (and spoke RPCs, RDMA, whatever)? To me, a service running in a data center with a load balancer in front is "an endpoint" and no real violation of the end-to-end principle is taking place.
I think extending the definition of "endpoint" to everything behind a CDN is a stretch too far, but ultimately, I think "endpoint" isn't really defined well-enough to be the unit we talk about.
> In the end, no one cares about the end-to-end principle
This assertion couldn't be more wrong. I care; many others care; caring about the architecture of the Internet did not die with John Postel.
> you have to ask the question: what is an endpoint?
No, we don't: it's covered in networking 101. Any party in a layered protocol whose interactions are opaque to the layers below and transparent to the layers above. And they're defined by those interactions, not by their implementation.
A CDN is a forward caching proxy for content layered over HTTP, and that's all that matters when it comes to realising their emergent properties. Don't be hypnotized by the shiny dangly extras that the providers wave around hoping to distract attention from what they actually offer, or why they do it, or the consequences.
All I'm saying is that users of a system don't think about design principles, they are there for the developers and operators to manage complexity and meet higher-level objectives. They can do this even if they are not followed 100% perfectly.
In a hypothetical distant-future anarchistic society, it's very likely you're still going to have private security forces, analogous to Cloudflare's security offerings, and some of them will probably grow to be quite big.
Attackers have an asymmetric advantage. One person with a gun can quickly terrorize or kill a lot of people, and one kid with $10 on their parents' credit card or access to a botnet can instantly bring an organization's web presence to its knees at the click of a button or input of a command.
I definitely agree that any one entity controlling too much of the access route is a concern and a risk, but before Cloudflare it was Akamai. If they never existed, Akamai and CloudFront would be the de facto oligopoly. If Cloudflare dies, someone else will probably gain a similar market share.
You can try to make security enforcement as decentralized as possible, like Bitcoin tries to. But, it was probably inevitable that a few huge mining pools would come to dominate, just like a few big security/CDN companies have.
It's plausible that there could be future solutions that will offer similar security and performance and resource-conserving benefits for free without requiring any private intermediates, and I'd happily recommend them over Cloudflare/Akamai/etc. if they existed and were as good or better. They just don't seem to be here right now.
Isn't this true of the entire internet? And that exists just fine thanks to a plethora of companies and nations.
(and a few other companies that offer similar services)
Sadly, all of them appear to require Big Internet Infrastructure. This isn't a problem you're going to solve at the wifi level.
On Cloudflare being a gatekeeper: yes, if you care about load, cost, and attacks, you need one. Cloudflare offers real value to their customers by providing these services. Will that lead to Cloudflare controlling the web? Well, you've got a number of direct competitors (Akamai and Fastly, to name two) in addition to the CDN offerings provided by cloud providers. Cloudflare isn't the first CDN, isn't the largest, and won't have a monopoly on being an internet middleman. Compare Cloudflare's network (https://www.cloudflare.com/network/) to Google's (https://peering.google.com/#/infrastructure).
On the necessity of gatekeepers on the internet: this is the way the internet works. You are responsible for peering with the rest of the worls at a physical location and dealing with the traffic that comes your way. If you want to be close to your users (to avoid bandwidth bottlenecks and provide lower latency), you need to install equipment all over the place and peer with other networks. If you want to deal with bad traffic, you need the capacity and software to handle/filter it. You can always build your own CDN if you want, but the only way to deal with these issues is a CDN. Maybe if the internet worked differently things would be different. But that would be a huge change, especially since someone has to foot the cost of building these services. I guess you could somehow distribute the cost (though I don't see how), but you'd also have to someone deal with the management and development of said infra, and I have no idea how such a thing would work without a central entity being responsible.
Anyway sorry for the rant.