frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Kubernetes egress control with squid proxy

https://interlaye.red/kubernetes_002degress_002dsquid.html
35•fsmunoz•3h ago

Comments

m1keil•2h ago
Pragmatic and practical. I learned something, thanks.
fsmunoz•49m ago
You are most welcome, and that was precisely what I aimed at. Thank you.
btreecat•2h ago
I like this approach!

I am struggling to lock down a pod in my home cluster to allow local connections to it's web UI but force all other connections through a VPN client. I'm going to investigate if I could use squid for this.

My next approach is going to involve using a sidecar.

One heads up to the author, the text based charts didn't render well on FF mobile. Text is meant to reflow based on screen size, typeface etc. I feel this is a great case for using a drawing/image instead.

brynx97•1h ago
I had challenges with split-DNS in my homelab k3s cluster trying to do this. I ended up just putting the apps in docker-compose on a VM that has static routes for my local homelab networks. I looked at tailscale to solve this since it has a kubernetes operator, but tailscale doesn't fit my use cases or work well with all of my devices.
btreecat•1h ago
> I had challenges with split-DNS in my homelab k3s cluster trying to do this. I ended up just putting the apps in docker-compose on a VM that has static routes for my local homelab networks. I looked at tailscale to solve this since it has a kubernetes operator, but tailscale doesn't fit my use cases or work well with all of my devices.

I don't need tails scale for this, seems like overkill.

I would like to better understand why my combination of marked packets and SOCK5 proxy are not fully working for certain UDP traffic. I also need to investigate if disabling ipv6 will help.

Using a VM or docker compose when I have k3s feels like admitting defeat with out understanding why.

baobun•1h ago
> I would like to better understand why my combination of marked packets and SOCK5 proxy are not fully working for certain UDP traffic

I think UDP support for SOCKS5 proxies and clients is very spotty, especially beyond DNS. Probably some bugs out there. That might go for UDP in more or less esoteric container networking setups too...

If everything else fails, I've had the least hassle with socat, as well as just chucking workloads in full vm (if in container with --network=host) and using ip routes and policies.

baobun•1h ago
Using an http proxy like squid (or apache/haproxy/caddy/envoy/trafficserver/freenginx) does sound like what you should do next.

If you need the pod to do outbound connections as well as receive incoming traffic, usually that would be two different proxies (forward and reverse, respectively). Unless you do some fancy p2p service mesh.

fsmunoz•40m ago
Thank you!

Depending on what want for "lock down", this or something like this could work: you are essentially defining a single outbound communication path. In a way, your scenario was one of the reasons behind this experiment.

I'll take a look a the overflow thing, although I'm not sure if I will be able to fix it: I do have an image at the start which is an alternative to the text-based drawing, so nothing is lost. I use my own blogging solution that is essentially Texinfo (https://interlaye.red/Texiblog.html) so these blocks are the result of using an @example block (which is then converted into a preformatted block). I'm not sure this can be improved, apart from (as you said) using alternative images.

baobun•1h ago
Not just squid but mostly any http proxy can be run in forward mode if you want.

Caddys "magic TLS" can be neat for this if you actually do want to dynamically intercept those https connections in an easy way. It's a use-case where Caddy really shines. You can go nuts trying to configure that cleanly in squid. The docs (perhaps intentionally) make you work for the hidden knowledge of these dark arts. You also get modernities like builtin http2, http3, etc.

Nobody else bothered by squids very lengthy restart time or have I just never configured it properly?

(Not to dunk on squid, it's otherwise mostly great. Especially for its caching features)

fsmunoz•55m ago
I've used Caddy for some of my projects (e.g. https://github.com/fsmunoz/parlamentodb/blob/54e0b252485905e... ), but not for this intercept approach you mentioned, I will give it a look!

I'm not bothered by restart times but that's mostly because that has never been a priority... but one thing I have half-done is a controller that gathers per-namespace configs, and with that reload times will become more of an issue.

Part of the reason I chose Squid here was precisely because I found it interesting to reuse something that was such a staple of web architecture patterns.

oldsj•1h ago
I’ve been working on running agents (Claude agent sdk) on k8s this looks great to control their egress
fsmunoz•47m ago
You can certainly use the Squid ACLs to limit the egress for agents. One of the current shortcomings (I explicitly mentioned it near the end) is that there's no per-namespace granularity, so you wouldn't be able to determine it on a per-agent level -- but you would be able to generally establish that all agents would only have access to a global whitelist.
merpkz•1h ago
You don't need a sidecar to stream logs of squid, that's anti-pattern, instead just tell squid to write logs to /dev/stdout, like this:

  logfile_rotate 0
  cache_log stdio:/dev/stdout
  access_log stdio:/dev/stdout
  cache_store_log stdio:/dev/stdout
Running squid in container is a bit tricky, since it is indeed an ancient piece of software, but I have managed to run it successfully before with squid configuration like this:

  max_filedescriptors 1048576
  pid_filename /dev/shm/squid.pid
  cache_effective_user squid
  cache_effective_group squid
and deployment has these set, - UID 31 is squid user inside of container

  securityContext:
  runAsUser: 31
  runAsGroup: 31
  fsGroup: 31
  command: ["sh","-c","squid -z && sleep 3s; squid -N"]
fsmunoz•1h ago
That's a more elegant approach. I usually just plow through obstacles, and the end result is not always ideal -- I like your approach better than the sidecar, I guess that I was using sidecars for other things and it sort of influenced my approach.

I'll try it your suggestions out and update the article, and thank you for your comment, already made sharing this worth it.

merpkz•55m ago
Don't even mention it, I have never used NetworkPolicy before, but now it seems like exactly the thing I am missing on my clusters to limit the blast radius if anything gets owned. It's quite incredible the amount of nftables firewall rules the k3s daemon just created for that example policy in your blog, now I am in rabbit hole trying to figure out how this all actually works under the hood. Thanks for this writeup!
crimsonnoodle58•1h ago
We use squid for egress control on Kubernetes and have also written a controller that runs in a sidecar container next to squid that monitors for custom CRD's, such as a whitelists.

The controller then updates squid.conf and reloads squid. This allows pods/namespaces to define their own whitelists.

The great thing about using squid and disabling DNS is you can stop DNS and HTTP exfil, but still allow certain websites to be accessible.

fsmunoz•50m ago
I guess you have just described what I was hinting at here:

>Linked with several of the above (mainly the centralised configuration) is that when using ACL rules to limit communication to external domains, these are cumulative: all namespaces will be able to communicate with all whitelisted domains, even if they only need to communicate with some of them. > These limitations point toward why more sophisticated solutions exist, after all; a follow-up article will explore using Squid’s include directive to enable per-namespace configuration, and in doing so, show why you’d eventually want a controller or operator to manage the complexity.

... which is actually a good thing. More than making something "new", it's great to hear that the overall approach is sound.

e-Minguez•1h ago
This is great! The only downside is that the app needs to understand proxies.
fsmunoz•16m ago
Yes! And this can be partially a limitation that helps, in the sense that it forces you to add that. In this example, I had to spent some time with the Common Lisp dexador approach to make it work. I've added a "PROXY: " UI hint in the page at https://horizons.interlaye.red/ , you will see that it says "-- PROXY: http://squid.egress-proxy.svc.cluster.local:3128 --". This was actually something from my debugging that I decided to keep.

A next article will likely address this limitation though, and look into transparent proxying. This will involve nftables, sidecars, etc, and the more we go into this direction, the more installing a CNI that comes with this by default starts to make sense.

EvanAnderson•1m ago
I don't know a damn thing about Kubernetes, but I've used Squid in transparent mode as an egress filter for DMZ subnets with apps that are not proxy-aware. I don't know if / how the network-level gyrations to do this are applicable in this configuration.
klohto•34m ago
I have had great experience scripting and running http://mitmproxy.org for these purposes. I also have set it in production as a dumb caching proxy for upstream services (We do a lot dumb GETs to list/enumerate)

Show HN: Vibe coding a bookshelf with Claude Code

https://balajmarius.com/writings/vibe-coding-a-bookshelf-with-claude-code/
84•balajmarius•1h ago•40 comments

Kidnapped by Deutsche Bahn

https://www.theocharis.dev/blog/kidnapped-by-deutsche-bahn/
350•JeremyTheo•2h ago•383 comments

What an unprocessed photo looks like

https://maurycyz.com/misc/raw_photo/
1861•zdw•16h ago•305 comments

Show HN: Z80-μLM, a 'Conversational AI' That Fits in 40KB

https://github.com/HarryR/z80ai
285•quesomaster9000•9h ago•72 comments

You can make up HTML tags

https://maurycyz.com/misc/make-up-tags/
367•todsacerdoti•12h ago•133 comments

Kubernetes egress control with squid proxy

https://interlaye.red/kubernetes_002degress_002dsquid.html
36•fsmunoz•3h ago•21 comments

Feynman's Hughes Lectures: 950 pages of notes

https://thehugheslectures.info/the-lectures/
70•gnubison•4h ago•12 comments

Libgodc: Write Go Programs for Sega Dreamcast

https://github.com/drpaneas/libgodc
32•drpaneas•1h ago•4 comments

Huge Binaries

https://fzakaria.com/2025/12/28/huge-binaries
122•todsacerdoti•9h ago•42 comments

UK accounting body to halt remote exams amid AI cheating

https://www.theguardian.com/business/2025/dec/29/uk-accounting-remote-exams-ai-cheating-acca
48•beardyw•1h ago•15 comments

Developing a Beautiful and Performant Block Editor in Qt C++ and QML

https://rubymamistvalove.com/block-editor
90•michaelsbradley•2d ago•32 comments

Show HN: See what readers who loved your favorite book/author also loved to read

https://shepherd.com/bboy/2025
19•bwb•2h ago•7 comments

You can't design software you don't work on

https://www.seangoedecke.com/you-cant-design-software-you-dont-work-on/
46•saikatsg•7h ago•6 comments

Golfing Is Not Rowing

https://taylor.town/golf-vs-rowing
14•surprisetalk•4d ago•5 comments

My First Meshtastic Network

https://rickcarlino.com/notes/electronics/my-first-meshtastic-network.html
98•rickcarlino•9h ago•34 comments

Unity's Mono problem: Why your C# code runs slower than it should

https://marekfiser.com/blog/mono-vs-dot-net-in-unity/
223•iliketrains•17h ago•122 comments

As AI gobbles up chips, prices for devices may rise

https://www.npr.org/2025/12/28/nx-s1-5656190/ai-chips-memory-prices-ram
221•geox•16h ago•334 comments

Software engineers should be a little bit cynical

https://www.seangoedecke.com/a-little-bit-cynical/
238•zdw•17h ago•167 comments

Researchers discover molecular difference in autistic brains

https://medicine.yale.edu/news-article/molecular-difference-in-autistic-brains/
159•amichail•16h ago•86 comments

Staying ahead of censors in 2025

https://forum.torproject.org/t/staying-ahead-of-censors-in-2025-what-weve-learned-from-fighting-c...
188•ggeorgovassilis•9h ago•186 comments

MongoBleed Explained Simply

https://bigdata.2minutestreaming.com/p/mongobleed-explained-simply
220•todsacerdoti•17h ago•96 comments

Show HN: My not-for-profit search engine with no ads, no AI, & all DDG bangs

https://nilch.org
117•UnmappedStack•9h ago•58 comments

Asking Gemini 3 to generate Brainfuck code results in an infinite loop

https://teodordyakov.github.io/brainfuck-agi/
71•TeodorDyakov•5h ago•69 comments

PySDR: A Guide to SDR and DSP Using Python

https://pysdr.org/content/intro.html
197•kklisura•18h ago•11 comments

Linux DAW: Help Linux musicians to quickly and easily find the tools they need

https://linuxdaw.org/
5•prmoustache•2h ago•0 comments

Fast GPU Interconnect over Radio

https://spectrum.ieee.org/rf-over-fiber
48•montroser•11h ago•6 comments

Spherical Cow

https://lib.rs/crates/spherical-cow
111•Natfan•15h ago•16 comments

CIA Star Gate Project: An Overview (1993) [pdf]

https://www.cia.gov/readingroom/docs/CIA-RDP96-00789R002800180001-2.pdf
54•dvrp•11h ago•43 comments

Mouse: Computer Programming Language (2006)

http://mouse.davidgsimpson.com/
22•gappy•2d ago•4 comments

Koine

https://github.com/pattern-zones-co/koine
16•handfuloflight•3d ago•4 comments