dynamic envoy configuration from k8s configmap
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
When deploying applications in Kubernetes (K8s), managing and updating the configurations dynamically is crucial for maintaining application resilience and performance. One popular approach is using Envoy, a high-performance proxy, which can be configured dynamically via a Kubernetes ConfigMap. This article explores how to achieve dynamic configuration of Envoy using ConfigMaps, ensuring seamless updates and scalability in a K8s environment.
Understanding Envoy and ConfigMaps
What is Envoy?
Envoy is a high-performance open-source edge and service proxy designed for cloud-native applications. It operates at Layer 7 (Application Layer) and acts as a communication bus for microservices, providing capabilities such as load balancing, resilience features, and observability.
What are ConfigMaps?
ConfigMaps in Kubernetes are API resources used to store non-confidential configuration data in key-value pairs. They enable separation of configuration from application code, thereby allowing dynamic updates without needing to rebuild container images or redeploy pods.
Dynamic Configuration of Envoy
Envoy can be configured using a static configuration file, which is problematic in dynamic environments as any change requires a restart of the proxy. Instead, a dynamic configuration approach can be implemented using ConfigMaps, thus allowing live updates to Envoy without downtime.
Creating a ConfigMap in Kubernetes
A ConfigMap can be created using YAML configuration files. Here's a simple example of how to define a ConfigMap for Envoy:
- name: listener_0
- filters:
- name: envoy.filters.network.http_connection_manager
- name: local_service
- match:
- name: envoy.filters.http.router
- name: service_cluster
- lb_endpoints:
- endpoint:
- name: envoy
- name: envoy-config
- name: envoy-config
- Namespace and Names: Ensure ConfigMaps correspond to the correct namespaces and have unique names.
- Secrets Management: ConfigMaps don’t handle sensitive data. Use Kubernetes Secrets for configurations involving sensitive data.
- Rolling Updates: Use rolling updates to apply configuration changes progressively to minimize downtime.
- Conflict Resolution: Ensure changes to ConfigMaps don’t conflict with running configurations that could affect service availability.
- name: local_service
- match:
Related reading
- Effect of pod disruption budget on a single replica deployment
- EKS - Node labels
- EKS Ingress with Single ALB, multiple namespaces, and External DNS
- EKS Kubernetes outbound traffic
- eksctl create cluster stuck waiting for CloudFormation stack
- Elastic Search Adding nodes to cluster on the fly
- Elasticsearch 7.2.0 master not discovered or elected yet, an election requires at least X nodes
- Elasticsearch fails to start on AWS kubernetes cluster

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.