|
1 |
| -# Architecture and Design Principles |
| 1 | +# Architecture |
2 | 2 |
|
3 | 3 | This document provides an overview of the architecture and design principles of the NGINX Kubernetes Gateway. The target
|
4 | 4 | audience includes the following groups:
|
@@ -133,56 +133,3 @@ configuration and shutdowns workers with the old configuration.
|
133 | 133 | [conf-file]: https://github.com/nginxinc/nginx-kubernetes-gateway/blob/main/deploy/manifests/nginx-conf.yaml
|
134 | 134 |
|
135 | 135 | [share]: https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/
|
136 |
| - |
137 |
| -## Design Principles |
138 |
| - |
139 |
| -The aim of NGINX Kubernetes Gateway is to become a fundamental infrastructure component within a Kubernetes cluster, |
140 |
| -serving as both an ingress and egress point for traffic directed towards the services (applications) running either |
141 |
| -within or outside the cluster. Leveraging NGINX as a data plane technology, it harnesses the well-established reputation |
142 |
| -of NGINX as an open-source project widely recognized for its role as a web server, proxy, load balancer, and content |
143 |
| -cache. NGINX is renowned for its stability, high performance, security, and rich feature set, positioning it as a |
144 |
| -critical infrastructure tool. Notably, once properly configured and operational, NGINX requires minimal attention, |
145 |
| -making it reliable and "boring" software. |
146 |
| - |
147 |
| -Likewise, the goal for the NGINX Kubernetes Gateway is to embody the same qualities as NGINX and be regarded as "boring" |
148 |
| -software. The principles outlined below serve as a guide for engineering the NGINX Kubernetes Gateway with the intention |
149 |
| -of achieving this goal. |
150 |
| - |
151 |
| -### Security |
152 |
| - |
153 |
| -We are security first. We prioritize security from the outset, thoroughly evaluating each design and feature with a |
154 |
| -focus on security. We proactively identify and safeguard assets at the early stages of our processes, ensuring their |
155 |
| -protection throughout the development lifecycle. We adhere to best practices for secure design, including proper |
156 |
| -authentication, authorization, and encryption mechanisms. |
157 |
| - |
158 |
| -### Availability |
159 |
| - |
160 |
| -As a critical infrastructure component, we must be highly available. We design and review features with redundancy and |
161 |
| -fault tolerance in mind. We regularly test the NGINX Kubernetes Gateway's availability by simulating failure scenarios |
162 |
| -and conducting load testing. We work to identify potential weaknesses and bottlenecks, and address them to ensure high |
163 |
| -availability under various conditions. |
164 |
| - |
165 |
| -### Performance |
166 |
| - |
167 |
| -We must be highly performant and lightweight. We fine-tune the NGINX configuration to maximize performance without |
168 |
| -requiring custom configuration. We strive to minimize our memory and CPU footprint, enabling efficient resource |
169 |
| -allocation and reducing unnecessary processing overhead. We use profiling tools on our code to identify bottlenecks and |
170 |
| -improve performance. |
171 |
| - |
172 |
| -### Resilience |
173 |
| - |
174 |
| -We design with resilience in mind. This includes gracefully handling failures, such as pod restarts or network |
175 |
| -interruptions, as well as leveraging Kubernetes features like health checks, readiness probes, and container restart |
176 |
| -policies. |
177 |
| - |
178 |
| -### Observability |
179 |
| - |
180 |
| -We provide comprehensive logging, metrics, and tracing capabilities to gain insights into our behavior and |
181 |
| -performance. We prioritize Kubernetes-native observability tools like Prometheus, Grafana, and distributed |
182 |
| -tracing systems to help users monitor the health of NGINX Kubernetes Gateway and to assist in diagnosing issues. |
183 |
| - |
184 |
| -### Ease of Use |
185 |
| - |
186 |
| -NGINX Kubernetes Gateway must be easy and intuitive to use. This means that it should be easy to install, easy to |
187 |
| -configure, and easy to monitor. Its defaults should be sane and should lead to "out-of-box" success. The documentation |
188 |
| -should be clear and provide meaningful examples that customer's can use to inform their deployments and configurations. |
0 commit comments