Foreword |
|
xiii | |
Preface |
|
xv | |
|
|
1 | (22) |
|
|
1 | (1) |
|
|
2 | (2) |
|
Beyond Orchestration---Extended Functionality |
|
|
4 | (1) |
|
|
5 | (2) |
|
|
7 | (1) |
|
Defining Application Platforms |
|
|
7 | (1) |
|
The Spectrum of Approaches |
|
|
8 | (2) |
|
Aligning Your Organizational Needs |
|
|
10 | (1) |
|
Summarizing Application Platforms |
|
|
11 | (1) |
|
Building Application Platforms on Kubernetes |
|
|
12 | (1) |
|
|
13 | (2) |
|
|
15 | (1) |
|
Determining Platform Services |
|
|
16 | (1) |
|
|
17 | (4) |
|
|
21 | (2) |
|
|
23 | (40) |
|
Managed Service Versus Roll Your Own |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
24 | (1) |
|
|
25 | (1) |
|
|
26 | (1) |
|
|
26 | (1) |
|
|
27 | (1) |
|
Architecture and Topology |
|
|
28 | (1) |
|
|
28 | (1) |
|
|
29 | (2) |
|
|
31 | (1) |
|
|
32 | (3) |
|
|
35 | (1) |
|
Bare Metal Versus Virtualized |
|
|
36 | (3) |
|
|
39 | (2) |
|
|
41 | (1) |
|
Networking Infrastructure |
|
|
42 | (2) |
|
|
44 | (2) |
|
|
46 | (1) |
|
|
46 | (1) |
|
|
47 | (1) |
|
|
47 | (2) |
|
|
49 | (1) |
|
|
50 | (2) |
|
|
52 | (1) |
|
|
52 | (1) |
|
|
53 | (1) |
|
|
54 | (1) |
|
|
55 | (5) |
|
|
60 | (1) |
|
|
61 | (2) |
|
|
63 | (16) |
|
|
64 | (1) |
|
The Open Container Initiative |
|
|
65 | (1) |
|
OCI Runtime Specification |
|
|
65 | (2) |
|
|
67 | (2) |
|
The Container Runtime Interface |
|
|
69 | (1) |
|
|
70 | (2) |
|
|
72 | (1) |
|
|
73 | (1) |
|
|
74 | (1) |
|
|
75 | (1) |
|
|
76 | (1) |
|
|
77 | (1) |
|
|
78 | (1) |
|
|
79 | (22) |
|
|
80 | (1) |
|
|
80 | (1) |
|
|
81 | (1) |
|
|
81 | (1) |
|
|
81 | (1) |
|
Block Devices and File and Object Storage |
|
|
82 | (1) |
|
|
83 | (1) |
|
Choosing a Storage Provider |
|
|
83 | (1) |
|
Kubernetes Storage Primitives |
|
|
83 | (1) |
|
Persistent Volumes and Claims |
|
|
84 | (2) |
|
|
86 | (1) |
|
The Container Storage Interface (CSI) |
|
|
87 | (1) |
|
|
88 | (1) |
|
|
89 | (1) |
|
Implementing Storage as a Service |
|
|
89 | (1) |
|
|
90 | (3) |
|
|
93 | (1) |
|
|
94 | (2) |
|
|
96 | (1) |
|
|
97 | (2) |
|
|
99 | (2) |
|
|
101 | (26) |
|
Networking Considerations |
|
|
102 | (1) |
|
|
102 | (2) |
|
|
104 | (2) |
|
Encapsulation and Tunneling |
|
|
106 | (2) |
|
|
108 | (1) |
|
|
109 | (1) |
|
Encrypted Workload Traffic |
|
|
109 | (1) |
|
|
110 | (2) |
|
Summary: Networking Considerations |
|
|
112 | (1) |
|
The Container Networking Interface (CNI) |
|
|
112 | (2) |
|
|
114 | (2) |
|
|
116 | (1) |
|
|
117 | (3) |
|
|
120 | (3) |
|
|
123 | (2) |
|
|
125 | (1) |
|
|
126 | (1) |
|
|
126 | (1) |
|
|
127 | (60) |
|
|
128 | (1) |
|
|
128 | (7) |
|
|
135 | (3) |
|
Service Implementation Details |
|
|
138 | (10) |
|
|
148 | (3) |
|
|
151 | (1) |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
154 | (2) |
|
Ingress Controllers and How They Work |
|
|
156 | (1) |
|
|
157 | (4) |
|
Choosing an Ingress Controller |
|
|
161 | (1) |
|
Ingress Controller Deployment Considerations |
|
|
162 | (3) |
|
DNS and Its Role in Ingress |
|
|
165 | (1) |
|
Handling TLS Certificates |
|
|
166 | (3) |
|
|
169 | (1) |
|
When (Not) to Use a Service Mesh |
|
|
170 | (1) |
|
The Service Mesh Interface (SMI) |
|
|
170 | (3) |
|
|
173 | (2) |
|
Service Mesh on Kubernetes |
|
|
175 | (4) |
|
|
179 | (2) |
|
|
181 | (3) |
|
|
184 | (3) |
|
|
187 | (32) |
|
|
188 | (1) |
|
|
189 | (1) |
|
|
190 | (1) |
|
|
190 | (1) |
|
The Kubernetes Secret API |
|
|
191 | (2) |
|
Secret Consumption Models |
|
|
193 | (3) |
|
|
196 | (2) |
|
|
198 | (3) |
|
|
201 | (2) |
|
|
203 | (1) |
|
|
203 | (1) |
|
|
203 | (1) |
|
|
204 | (4) |
|
|
208 | (2) |
|
Secrets in the Declarative World |
|
|
210 | (1) |
|
|
211 | (1) |
|
Sealed Secrets Controller |
|
|
211 | (3) |
|
|
214 | (1) |
|
|
215 | (1) |
|
Best Practices for Secrets |
|
|
215 | (1) |
|
Always Audit Secret Interaction |
|
|
215 | (1) |
|
|
216 | (1) |
|
Prefer Volumes Over Environment Variables |
|
|
216 | (1) |
|
Make Secret Store Providers Unknown to Your Application |
|
|
216 | (1) |
|
|
217 | (2) |
|
|
219 | (24) |
|
The Kubernetes Admission Chain |
|
|
220 | (2) |
|
In-Tree Admission Controllers |
|
|
222 | (1) |
|
|
223 | (2) |
|
Configuring Webhook Admission Controllers |
|
|
225 | (2) |
|
Webhook Design Considerations |
|
|
227 | (1) |
|
Writing a Mutating Webhook |
|
|
228 | (1) |
|
|
229 | (2) |
|
|
231 | (3) |
|
Centralized Policy Systems |
|
|
234 | (7) |
|
|
241 | (2) |
|
|
243 | (30) |
|
|
244 | (1) |
|
|
244 | (3) |
|
|
247 | (2) |
|
|
249 | (1) |
|
|
250 | (1) |
|
|
251 | (1) |
|
|
251 | (1) |
|
|
251 | (2) |
|
|
253 | (1) |
|
|
253 | (1) |
|
|
254 | (1) |
|
Organization and Federation |
|
|
254 | (2) |
|
|
256 | (1) |
|
|
257 | (3) |
|
|
260 | (9) |
|
|
269 | (1) |
|
OpenTracing and OpenTelemetry |
|
|
269 | (1) |
|
|
270 | (2) |
|
Application Instrumentation |
|
|
272 | (1) |
|
|
272 | (1) |
|
|
272 | (1) |
|
|
273 | (40) |
|
|
274 | (1) |
|
|
275 | (10) |
|
Implementing Least Privilege Permissions for Users |
|
|
285 | (3) |
|
Application/Workload Identity |
|
|
288 | (1) |
|
|
289 | (1) |
|
|
289 | (4) |
|
Service Account Tokens (SAT) |
|
|
293 | (4) |
|
Projected Service Account Tokens (PSAT) |
|
|
297 | (2) |
|
Platform Mediated Node Identity |
|
|
299 | (12) |
|
|
311 | (2) |
|
11 Building Platform Services |
|
|
313 | (40) |
|
|
314 | (1) |
|
|
314 | (1) |
|
|
315 | (1) |
|
|
316 | (1) |
|
|
317 | (1) |
|
|
317 | (1) |
|
|
318 | (5) |
|
|
323 | (1) |
|
|
323 | (1) |
|
General-Purpose Workload Operators |
|
|
324 | (1) |
|
|
324 | (1) |
|
|
325 | (1) |
|
Operator Development Tooling |
|
|
325 | (4) |
|
|
329 | (2) |
|
|
331 | (16) |
|
|
347 | (1) |
|
Predicates and Priorities |
|
|
348 | (1) |
|
|
348 | (2) |
|
|
350 | (1) |
|
|
350 | (1) |
|
|
350 | (1) |
|
|
351 | (2) |
|
|
353 | (24) |
|
|
354 | (1) |
|
|
354 | (1) |
|
|
355 | (2) |
|
|
357 | (1) |
|
Multitenancy in Kubernetes |
|
|
358 | (1) |
|
Role-Based Access Control (RBAC) |
|
|
358 | (2) |
|
|
360 | (1) |
|
|
361 | (2) |
|
Resource Requests and Limits |
|
|
363 | (5) |
|
|
368 | (2) |
|
|
370 | (4) |
|
Multitenant Platform Services |
|
|
374 | (1) |
|
|
375 | (2) |
|
|
377 | (20) |
|
|
378 | (1) |
|
|
379 | (1) |
|
|
380 | (1) |
|
Horizontal Pod Autoscaler |
|
|
380 | (4) |
|
|
384 | (3) |
|
Autoscaling with Custom Metrics |
|
|
387 | (1) |
|
Cluster Proportional Autoscaler |
|
|
388 | (1) |
|
|
389 | (1) |
|
|
389 | (4) |
|
|
393 | (2) |
|
|
395 | (2) |
|
14 Application Considerations |
|
|
397 | (28) |
|
Deploying Applications to Kubernetes |
|
|
398 | (1) |
|
Templating Deployment Manifests |
|
|
398 | (1) |
|
Packaging Applications for Kubernetes |
|
|
399 | (1) |
|
Ingesting Configuration and Secrets |
|
|
400 | (1) |
|
Kubernetes ConfigMaps and Secrets |
|
|
400 | (3) |
|
Obtaining Configuration from External Systems |
|
|
403 | (1) |
|
Handling Rescheduling Events |
|
|
404 | (1) |
|
Pre-stop Container Life Cycle Hook |
|
|
404 | (1) |
|
Graceful Container Shutdown |
|
|
405 | (2) |
|
Satisfying Availability Requirements |
|
|
407 | (1) |
|
|
408 | (1) |
|
|
409 | (1) |
|
|
410 | (1) |
|
|
411 | (1) |
|
|
412 | (1) |
|
Pod Resource Requests and Limits |
|
|
413 | (1) |
|
|
413 | (1) |
|
|
414 | (1) |
|
|
415 | (1) |
|
|
415 | (1) |
|
Unstructured Versus Structured Logs |
|
|
416 | (1) |
|
Contextual Information in Logs |
|
|
416 | (1) |
|
|
416 | (1) |
|
Instrumenting Applications |
|
|
417 | (2) |
|
|
419 | (1) |
|
|
419 | (1) |
|
|
419 | (1) |
|
|
419 | (1) |
|
Instrumenting Services for Distributed Tracing |
|
|
420 | (1) |
|
|
420 | (1) |
|
|
421 | (1) |
|
|
422 | (1) |
|
|
423 | (2) |
|
|
425 | (24) |
|
Building Container Images |
|
|
426 | (2) |
|
The Golden Base Images Antipattern |
|
|
428 | (1) |
|
|
429 | (1) |
|
|
430 | (1) |
|
|
430 | (1) |
|
Build Versus Runtime Image |
|
|
431 | (1) |
|
|
432 | (2) |
|
|
434 | (1) |
|
|
435 | (2) |
|
|
437 | (1) |
|
|
438 | (1) |
|
|
439 | (1) |
|
Integrating Builds into a Pipeline |
|
|
440 | (3) |
|
|
443 | (2) |
|
|
445 | (1) |
|
|
446 | (2) |
|
|
448 | (1) |
|
|
449 | (16) |
|
|
450 | (1) |
|
|
451 | (2) |
|
The Spectrum of Abstraction |
|
|
453 | (1) |
|
|
454 | (1) |
|
Abstraction Through Templating |
|
|
455 | (3) |
|
Abstracting Kubernetes Primitives |
|
|
458 | (4) |
|
Making Kubernetes Invisible |
|
|
462 | (2) |
|
|
464 | (1) |
Index |
|
465 | |