SlideShare a Scribd company logo
Local Microservice
Development in EKS
David Kirk
About Me
- 10 years as a Dev, 8 of which in DevOps
- Staff Engineer at NTWRK
- AWS & Kubernetes have been main focuses for 6 years
- d@vidkirk.com or endlessbreadsticks@thankgoodnessitisifridays.com
What’re we talkin’ about?
- Describe the problem - how do we develop against EKS?
- Attempted & Potential Solutions
- Hybrid Environments - the solution we’re using at NTWRK
- Case-study of how it’s implemented at NTWRK
- Suggestions of quick wins w/ this technique
I’ve done a talk like this before
- I’ve learned lessons since then about how to do this better
- That talk proposed something that took 6+ months to fully build
- The goal here is to describe the solution and give practical wins you
can bring home
The Problem - Developing against EKS
- Most development happens locally
- Tools are designed with this in mind
- Debuggers, profilers, build tools, etc
- Developers are used to this mental framework
- EKS is not running locally
- But it’s where production is running
- How do we bridge this gap?
- Ideal solution is one that allows us to use EKS and local tools
Why is this worth solving?
- Reduce cognitive overhead
- There’s a barrier to entry here
- Worth it in the long run - fewer variations to consider
- Minimize internal tooling & configuration complexity
- The fewer environmental variations, the less work to align them
- Devs get Ops experience
- Hey look, it’s DevOps!
- If devs gain k8s experience while dev-ing, they know better how to work
with k8s in prod
Summary of Goals
- Easy to use & implement
- Useful
- Devs can tie their local machine into EKS
- Ideally vice-versa as well
High Level Solution - Redirect Traffic to Local
- This is the basis for all proposed solutions
- Run the thing you’re developing locally
- Run everything else somewhere else
- Send traffic that would go to the thing you’re developing to localhost
Everything Else Runs Here Your Laptop
Service
A
Service
B
Dummy
Service
C
Actual
Service
C
- Dummy service replaces yours in the cluster
- Receives traffic like normal
- Routes all traffic to your localhost
Network
Traffic
Potential Solution: docker-compose
- Pro: Simple to configure
- It’s entry-level deployment yaml, IMO
- Very readable, and in one file
- Con: It’s not kubernetes
- Duplicating configuration - effort to maintain
- Devs aren’t exposed to kubernetes
- Run everything not being actively developed in docker-compose
- Substitute the thing you’re developing w/ an nginx container
- Forward all traffic it gets to `host.docker.internal`
- Run the thing you’re developing locally
Potential Solution: Minikube
- Pro: It’s kubernetes!
- You get some kubernetes experience
- But also you don’t get multi-node kubernetes
- Con: Configuration complexity
- All of your charts/definitions need to support both minikube & EKS
- That’s gonna be some complex charts
- Run everything not being actively developed in Minikube
- Substitute the thing you’re developing w/ an nginx container
- Redirect its traffic to `host.minikube.internal`
- Run the thing you’re developing locally
Running Everything Locally Has Limits
- Things will get slow
- You’re better at creating stuff for your CPU to do than Intel & Apple are
at making CPUs that can do stuff fast
- Even beefy machines will slow down
- This slows down everything else around development
- You can deploy subsets of services
- Again introducing configuration complexity
- Hard to maintain, prone to issues
Proposed Solution - Hybrid EKS Development
- Run everything in EKS except what you’re developing
- Substitute the thing you’re developing w/ an nginx container
- Forward all traffic it gets to your IP address
- Run the thing you’re developing locally
- Use a VPN to access the cluster
- Reach into cluster w/ it - use k8s DNS for your cluster’s CIDR
- Reach out of the cluster w/ it - use VPN IP addresses to talk to dev
machines
Exclusion & Interception
- Two modes of network traffic interaction
- These cover all of the use cases we’ve seen internally
- Exclusion
- Scale the deployment you’re developing to 0
- Run it locally, and use k8s DNS through the VPN to interact w/ cluster
- Used if it doesn’t receive requests - e.g. Kafka Consumers & Cronjobs
- Interception
- Replace the pod you’re developing w/ nginx
- Redirect that traffic to your laptop’s VPN IP address
- Run it locally, again use k8s DNS through the VPN
Exclusion & Interception Examples
EKS Cluster Your Laptop
Kafka Broker
Service A Service B
nginx
Service C
Actual
Service C
Network
Traffic over
VPN
Consumer
D
- Exclude D
- It doesn’t receive requests - it consumes from Kafka
- Intercept C
- Capture requests & send to local machine
Case Study: Using this at NTWRK
- We have “personal environments”
- Single centralized helm repo defines everything that’s deployed
- `make build-dev` builds all containers
- `make deploy-dev` takes helm and deploys it into personal namespace
- Intercept & Exclude at deploy time
- `make deploy-dev-tailscale INTERCEPT=[chart_name]`
- `make deploy-dev-tailscale EXCLUDE=[chart_name]`
- Can intercept & exclude in one deployment
Interception Details
- How do we route that traffic to the VPN IP address?
- We use Tailscale as our VPN
- All examples will reference those specifics, but concepts can be tweaked
based upon your needs
- Replace containers in intercepted pod
- nginx routes traffic to VPN IP address - set at deploy time
- Tailscale side car gives nginx access to VPN over pod’s localhost
Interception Details: Actual Code Edition
Use this template if
intercepting
Default
deployment
configuration
Interception Details: Actual Code Edition pt 2
Internal Traffic
External Traffic
Send it to local
machine’s VPN IP
Interception Details: Actual Code Edition pt 3
nginx container
nginx configuration
Tailscale sidecar
grants VPN access
Potential Quick Wins
- You don’t need personal environments
- Run command locally to intercept static environment
- Could be staging or UAT
- Be careful about collisions
- Team-specific long-lived environments
- Less concern about collisions
That’s it! Questions

More Related Content

Similar to David Kirk_Local Microservice Development in EKS.pdf (20)

PDF
Docker dev ops for cd meetup 12-14
Simon Storm
 
PDF
Introduction to Docker - Vellore Institute of Technology
Ajeet Singh Raina
 
PDF
A Shift from Monolith to Microservice using Docker
Ajeet Singh Raina
 
PDF
Telepresence - Fast Development Workflows for Kubernetes
Ambassador Labs
 
PDF
Using ansible to core os & kubernetes clusters
magicmarkup
 
PDF
ContainerDayVietnam2016: Dockerize a small business
Docker-Hanoi
 
PDF
Introduction to Docker - VIT Campus
Ajeet Singh Raina
 
PDF
Developing Microservices Directly in AKS/Kubernetes
Chakradhar Rao Jonagam
 
PPTX
Introduction to Kubernetes
Vishal Biyani
 
PDF
Local development using telepresence
Irvi Aini
 
PDF
Containers, Docker, and Microservices: the Terrific Trio
Jérôme Petazzoni
 
PDF
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
Wong Hoi Sing Edison
 
PPTX
Laravel, docker, kubernetes
Peter Mein
 
PPTX
Deploying Windows Apps to Kubernetes with Draft and Helm
Jessica Deen
 
PDF
Introduction to Docker at the Azure Meet-up in New York
Jérôme Petazzoni
 
PPTX
From monolith to microservice with containers.
Marcel Dempers
 
PPTX
Kubernetes and Local Dvelopment
Jeffrey Sica
 
PDF
11thDockerMeetupSwitzerland
Michael Mueller
 
PDF
2016 - Easing Your Way Into Docker: Lessons From a Journey to Production
devopsdaysaustin
 
PDF
Shipping NodeJS with Docker and CoreOS
Ross Kukulinski
 
Docker dev ops for cd meetup 12-14
Simon Storm
 
Introduction to Docker - Vellore Institute of Technology
Ajeet Singh Raina
 
A Shift from Monolith to Microservice using Docker
Ajeet Singh Raina
 
Telepresence - Fast Development Workflows for Kubernetes
Ambassador Labs
 
Using ansible to core os & kubernetes clusters
magicmarkup
 
ContainerDayVietnam2016: Dockerize a small business
Docker-Hanoi
 
Introduction to Docker - VIT Campus
Ajeet Singh Raina
 
Developing Microservices Directly in AKS/Kubernetes
Chakradhar Rao Jonagam
 
Introduction to Kubernetes
Vishal Biyani
 
Local development using telepresence
Irvi Aini
 
Containers, Docker, and Microservices: the Terrific Trio
Jérôme Petazzoni
 
[HKOSCON][20180616][Containerized High Availability Virtual Hosting Deploymen...
Wong Hoi Sing Edison
 
Laravel, docker, kubernetes
Peter Mein
 
Deploying Windows Apps to Kubernetes with Draft and Helm
Jessica Deen
 
Introduction to Docker at the Azure Meet-up in New York
Jérôme Petazzoni
 
From monolith to microservice with containers.
Marcel Dempers
 
Kubernetes and Local Dvelopment
Jeffrey Sica
 
11thDockerMeetupSwitzerland
Michael Mueller
 
2016 - Easing Your Way Into Docker: Lessons From a Journey to Production
devopsdaysaustin
 
Shipping NodeJS with Docker and CoreOS
Ross Kukulinski
 

More from AWS Chicago (20)

PPTX
Kathie Kinde Clark - Elevate Your Professional Footprint: LinkedIn Masterclass
AWS Chicago
 
PDF
Jason Anderson From Dirt Roads to Highways: Simplifying DevOps and Cloud Inf...
AWS Chicago
 
PDF
Aman Sardana and Vijay Kumar Soni - Navigating Hybrid Cloud Challenges for ...
AWS Chicago
 
PDF
Ben Blair Operating Safely in a Vibe Coding World
AWS Chicago
 
PPTX
Joseph Morotti Enhancing customer experience through Amazon Connect and Gene...
AWS Chicago
 
PPTX
Craig Johnson When VPCs Attack: Real-Life Cloud Networking Fails (and Fixes)
AWS Chicago
 
PDF
Peter Sankauskas Access Denied: Understanding & Debugging AWS IAM
AWS Chicago
 
PDF
Shuen Mei Parth Sharma Boost Productivity, Innovation and Efficiency wit...
AWS Chicago
 
PDF
Bob Fornal The Impact of Testing on a DevOps Pipeline
AWS Chicago
 
PDF
Jason Butz Chaos Engineering with FIS and Lambda Functions
AWS Chicago
 
PPTX
Automated VPC migration into centralized inspection architecture with AWS Gat...
AWS Chicago
 
PDF
Julia Furst Morgado The Lazy Guide to Kubernetes with EKS Auto Mode + Karpenter
AWS Chicago
 
PDF
Bob Fornal - Active Career Management AWS Community Day Midwest 2025
AWS Chicago
 
PDF
Edwin Moedano Monitoring and Observability of Lambdas with Cloudwatch and Po...
AWS Chicago
 
PPTX
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
PPTX
Nathan Hiscock Architecting secure, scalable, cost-efficient computer vision...
AWS Chicago
 
PDF
AWS Community Day Midwest 2025 Julia Furst Morgado The Lazy Guide to Kuberne...
AWS Chicago
 
PDF
Steven Seaney - Simplifying and Streamlining AWS Control Tower Deployments
AWS Chicago
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PPTX
Paul Chin Jr. Data Gone in 60 Seconds: A Serverless ETL Heist
AWS Chicago
 
Kathie Kinde Clark - Elevate Your Professional Footprint: LinkedIn Masterclass
AWS Chicago
 
Jason Anderson From Dirt Roads to Highways: Simplifying DevOps and Cloud Inf...
AWS Chicago
 
Aman Sardana and Vijay Kumar Soni - Navigating Hybrid Cloud Challenges for ...
AWS Chicago
 
Ben Blair Operating Safely in a Vibe Coding World
AWS Chicago
 
Joseph Morotti Enhancing customer experience through Amazon Connect and Gene...
AWS Chicago
 
Craig Johnson When VPCs Attack: Real-Life Cloud Networking Fails (and Fixes)
AWS Chicago
 
Peter Sankauskas Access Denied: Understanding & Debugging AWS IAM
AWS Chicago
 
Shuen Mei Parth Sharma Boost Productivity, Innovation and Efficiency wit...
AWS Chicago
 
Bob Fornal The Impact of Testing on a DevOps Pipeline
AWS Chicago
 
Jason Butz Chaos Engineering with FIS and Lambda Functions
AWS Chicago
 
Automated VPC migration into centralized inspection architecture with AWS Gat...
AWS Chicago
 
Julia Furst Morgado The Lazy Guide to Kubernetes with EKS Auto Mode + Karpenter
AWS Chicago
 
Bob Fornal - Active Career Management AWS Community Day Midwest 2025
AWS Chicago
 
Edwin Moedano Monitoring and Observability of Lambdas with Cloudwatch and Po...
AWS Chicago
 
Darren Mills The Migration Modernization Balancing Act: Navigating Risks and...
AWS Chicago
 
Nathan Hiscock Architecting secure, scalable, cost-efficient computer vision...
AWS Chicago
 
AWS Community Day Midwest 2025 Julia Furst Morgado The Lazy Guide to Kuberne...
AWS Chicago
 
Steven Seaney - Simplifying and Streamlining AWS Control Tower Deployments
AWS Chicago
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
Paul Chin Jr. Data Gone in 60 Seconds: A Serverless ETL Heist
AWS Chicago
 
Ad

Recently uploaded (20)

PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PDF
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
PDF
introduction to computer hardware and sofeware
chauhanshraddha2007
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PPTX
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
PDF
Researching The Best Chat SDK Providers in 2025
Ray Fields
 
PDF
State-Dependent Conformal Perception Bounds for Neuro-Symbolic Verification
Ivan Ruchkin
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
PDF
TrustArc Webinar - Navigating Data Privacy in LATAM: Laws, Trends, and Compli...
TrustArc
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PPTX
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
Presentation about Hardware and Software in Computer
snehamodhawadiya
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
introduction to computer hardware and sofeware
chauhanshraddha2007
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
MASTERDECK GRAPHSUMMIT SYDNEY (Public).pdf
Neo4j
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
Researching The Best Chat SDK Providers in 2025
Ray Fields
 
State-Dependent Conformal Perception Bounds for Neuro-Symbolic Verification
Ivan Ruchkin
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Structs to JSON: How Go Powers REST APIs
Emily Achieng
 
TrustArc Webinar - Navigating Data Privacy in LATAM: Laws, Trends, and Compli...
TrustArc
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Farrell_Programming Logic and Design slides_10e_ch02_PowerPoint.pptx
bashnahara11
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
Ad

David Kirk_Local Microservice Development in EKS.pdf

  • 2. About Me - 10 years as a Dev, 8 of which in DevOps - Staff Engineer at NTWRK - AWS & Kubernetes have been main focuses for 6 years - [email protected] or [email protected]
  • 3. What’re we talkin’ about? - Describe the problem - how do we develop against EKS? - Attempted & Potential Solutions - Hybrid Environments - the solution we’re using at NTWRK - Case-study of how it’s implemented at NTWRK - Suggestions of quick wins w/ this technique
  • 4. I’ve done a talk like this before - I’ve learned lessons since then about how to do this better - That talk proposed something that took 6+ months to fully build - The goal here is to describe the solution and give practical wins you can bring home
  • 5. The Problem - Developing against EKS - Most development happens locally - Tools are designed with this in mind - Debuggers, profilers, build tools, etc - Developers are used to this mental framework - EKS is not running locally - But it’s where production is running - How do we bridge this gap? - Ideal solution is one that allows us to use EKS and local tools
  • 6. Why is this worth solving? - Reduce cognitive overhead - There’s a barrier to entry here - Worth it in the long run - fewer variations to consider - Minimize internal tooling & configuration complexity - The fewer environmental variations, the less work to align them - Devs get Ops experience - Hey look, it’s DevOps! - If devs gain k8s experience while dev-ing, they know better how to work with k8s in prod
  • 7. Summary of Goals - Easy to use & implement - Useful - Devs can tie their local machine into EKS - Ideally vice-versa as well
  • 8. High Level Solution - Redirect Traffic to Local - This is the basis for all proposed solutions - Run the thing you’re developing locally - Run everything else somewhere else - Send traffic that would go to the thing you’re developing to localhost Everything Else Runs Here Your Laptop Service A Service B Dummy Service C Actual Service C - Dummy service replaces yours in the cluster - Receives traffic like normal - Routes all traffic to your localhost Network Traffic
  • 9. Potential Solution: docker-compose - Pro: Simple to configure - It’s entry-level deployment yaml, IMO - Very readable, and in one file - Con: It’s not kubernetes - Duplicating configuration - effort to maintain - Devs aren’t exposed to kubernetes - Run everything not being actively developed in docker-compose - Substitute the thing you’re developing w/ an nginx container - Forward all traffic it gets to `host.docker.internal` - Run the thing you’re developing locally
  • 10. Potential Solution: Minikube - Pro: It’s kubernetes! - You get some kubernetes experience - But also you don’t get multi-node kubernetes - Con: Configuration complexity - All of your charts/definitions need to support both minikube & EKS - That’s gonna be some complex charts - Run everything not being actively developed in Minikube - Substitute the thing you’re developing w/ an nginx container - Redirect its traffic to `host.minikube.internal` - Run the thing you’re developing locally
  • 11. Running Everything Locally Has Limits - Things will get slow - You’re better at creating stuff for your CPU to do than Intel & Apple are at making CPUs that can do stuff fast - Even beefy machines will slow down - This slows down everything else around development - You can deploy subsets of services - Again introducing configuration complexity - Hard to maintain, prone to issues
  • 12. Proposed Solution - Hybrid EKS Development - Run everything in EKS except what you’re developing - Substitute the thing you’re developing w/ an nginx container - Forward all traffic it gets to your IP address - Run the thing you’re developing locally - Use a VPN to access the cluster - Reach into cluster w/ it - use k8s DNS for your cluster’s CIDR - Reach out of the cluster w/ it - use VPN IP addresses to talk to dev machines
  • 13. Exclusion & Interception - Two modes of network traffic interaction - These cover all of the use cases we’ve seen internally - Exclusion - Scale the deployment you’re developing to 0 - Run it locally, and use k8s DNS through the VPN to interact w/ cluster - Used if it doesn’t receive requests - e.g. Kafka Consumers & Cronjobs - Interception - Replace the pod you’re developing w/ nginx - Redirect that traffic to your laptop’s VPN IP address - Run it locally, again use k8s DNS through the VPN
  • 14. Exclusion & Interception Examples EKS Cluster Your Laptop Kafka Broker Service A Service B nginx Service C Actual Service C Network Traffic over VPN Consumer D - Exclude D - It doesn’t receive requests - it consumes from Kafka - Intercept C - Capture requests & send to local machine
  • 15. Case Study: Using this at NTWRK - We have “personal environments” - Single centralized helm repo defines everything that’s deployed - `make build-dev` builds all containers - `make deploy-dev` takes helm and deploys it into personal namespace - Intercept & Exclude at deploy time - `make deploy-dev-tailscale INTERCEPT=[chart_name]` - `make deploy-dev-tailscale EXCLUDE=[chart_name]` - Can intercept & exclude in one deployment
  • 16. Interception Details - How do we route that traffic to the VPN IP address? - We use Tailscale as our VPN - All examples will reference those specifics, but concepts can be tweaked based upon your needs - Replace containers in intercepted pod - nginx routes traffic to VPN IP address - set at deploy time - Tailscale side car gives nginx access to VPN over pod’s localhost
  • 17. Interception Details: Actual Code Edition Use this template if intercepting Default deployment configuration
  • 18. Interception Details: Actual Code Edition pt 2 Internal Traffic External Traffic Send it to local machine’s VPN IP
  • 19. Interception Details: Actual Code Edition pt 3 nginx container nginx configuration Tailscale sidecar grants VPN access
  • 20. Potential Quick Wins - You don’t need personal environments - Run command locally to intercept static environment - Could be staging or UAT - Be careful about collisions - Team-specific long-lived environments - Less concern about collisions