Commit 21b6b4a
authored
Add readiness tracker to ensure caches have been loaded before serving traffic (#541)
* Add readiness tracker to ensure caches have been loaded before serving traffic
This commit adds readiness.Tracker, responsible for managing
expectations and observations of templates, constraints, and data.
Expectations are set according to the initial state of the cluster when
Gatekeeper starts - pre-existing templates and their corresponding
constraints are tracked until they are loaded by their respective
controllers into OPA. Similarly, cached data resources specified by
the Config singleton are also tracked to completion.
Templates or configured resource removed during warm-up are removed from
the initial expected set and will not block readiness.
The tracker is registered as a readiness probe - traffic will not be
routed to the admission controller while the readiness probe is not
returning success.
Fixes: #405
Signed-off-by: Oren Shomron <shomron@gmail.com>
* * Add circuit-breaker for readiness once expectations have been
satisfied for the first time.
* Fix expected kinds according to ConstraintTemplate / Config rosters,
only use those sets for checking satisfied expectations.
* Move config roster calculation into readiness package
Signed-off-by: Oren Shomron <shomron@gmail.com>
* Workaround for CRD parsing failure where envtest picks up kustomization.yaml
A kustomization.yaml was
[added](open-policy-agent/frameworks@aa59bd1)
in the constraints framework deployment directory. This is read by the
CRD loading code of controller-runtime's envtest and fails on parsing.
This leads to no CRDs being loaded for tests.
This commit works around the problem loading the framework CRDs
specifically where needed, rather than using the directory-based loading
code path.
Signed-off-by: Oren Shomron <shomron@gmail.com>
* Add test to verify config readiness with non-existent GVK references
Signed-off-by: Oren Shomron <shomron@gmail.com>
* Decouple tracker from watch manager, use API server directly.
Resource are now listed directly from the API server in the readiness
tracker and will not be cached. This means the same resources will be
subsequently queried and cached as part of the normal controller
operation, but removes some coordination complexity.
Also add retry logic when tracking cached data, only short-circuit when
a resource kind is unregistered.
Signed-off-by: Oren Shomron <shomron@gmail.com>
* Address remaining review comments
* Unexport Unsatisfied() method, remove from Expectations interface
* defer ExpectationsDone() where appropriate, avoids failures when
listing resources cannot be completed (even after retries)
* Remove unneeded metav1.Object, runtime,Object method implementations
on objKey
* Use RWMutex for synchronization in objectTracker
* Rename isRecoverable -> predicate for in retryLister
Signed-off-by: Oren Shomron <shomron@gmail.com>
* Create pkg/keys for shared keys used across packages. Fix comments.
Signed-off-by: Oren Shomron <shomron@gmail.com>
* Fix race condition registering readiness probe
Since controllers are registered asynchronously (waiting on certificate
generation), it was possible for the readiness probe registration call
to happen after the manager started, which caused an error and
CrashLoopBackoff. This commit moves probe registration back to the main
goroutine.
Signed-off-by: Oren Shomron <shomron@gmail.com>1 parent e1f25a5 commit 21b6b4a
46 files changed
Lines changed: 2563 additions & 90 deletions
File tree
- pkg
- controller
- config
- constrainttemplate
- constraint
- sync
- keys
- readiness
- testdata
- bogus-config
- crds
- post
- syncutil
- watch
- webhook
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
| |||
114 | 115 | | |
115 | 116 | | |
116 | 117 | | |
117 | | - | |
| 118 | + | |
118 | 119 | | |
119 | 120 | | |
120 | 121 | | |
121 | 122 | | |
122 | 123 | | |
123 | | - | |
| 124 | + | |
124 | 125 | | |
125 | | - | |
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
176 | 175 | | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
181 | 180 | | |
182 | 181 | | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
183 | 185 | | |
184 | 186 | | |
185 | 187 | | |
186 | 188 | | |
| 189 | + | |
| 190 | + | |
187 | 191 | | |
188 | 192 | | |
189 | 193 | | |
| |||
223 | 227 | | |
224 | 228 | | |
225 | 229 | | |
226 | | - | |
227 | | - | |
| 230 | + | |
| 231 | + | |
228 | 232 | | |
229 | 233 | | |
230 | 234 | | |
| |||
258 | 262 | | |
259 | 263 | | |
260 | 264 | | |
261 | | - | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
262 | 272 | | |
263 | 273 | | |
264 | 274 | | |
| 275 | + | |
265 | 276 | | |
266 | 277 | | |
267 | 278 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
26 | 27 | | |
| 28 | + | |
27 | 29 | | |
28 | | - | |
29 | 30 | | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
34 | | - | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | | - | |
55 | 54 | | |
56 | 55 | | |
57 | 56 | | |
58 | 57 | | |
59 | 58 | | |
60 | 59 | | |
| 60 | + | |
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
| 66 | + | |
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
86 | 90 | | |
87 | | - | |
| 91 | + | |
88 | 92 | | |
89 | 93 | | |
90 | 94 | | |
| |||
96 | 100 | | |
97 | 101 | | |
98 | 102 | | |
| 103 | + | |
99 | 104 | | |
100 | 105 | | |
101 | 106 | | |
| |||
118 | 123 | | |
119 | 124 | | |
120 | 125 | | |
| 126 | + | |
121 | 127 | | |
122 | 128 | | |
123 | 129 | | |
| |||
152 | 158 | | |
153 | 159 | | |
154 | 160 | | |
| 161 | + | |
155 | 162 | | |
156 | 163 | | |
157 | 164 | | |
| |||
173 | 180 | | |
174 | 181 | | |
175 | 182 | | |
176 | | - | |
| 183 | + | |
177 | 184 | | |
178 | 185 | | |
179 | 186 | | |
180 | 187 | | |
181 | 188 | | |
182 | | - | |
| 189 | + | |
| 190 | + | |
183 | 191 | | |
184 | 192 | | |
185 | 193 | | |
| |||
210 | 218 | | |
211 | 219 | | |
212 | 220 | | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
213 | 225 | | |
214 | 226 | | |
215 | 227 | | |
| |||
286 | 298 | | |
287 | 299 | | |
288 | 300 | | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
289 | 308 | | |
290 | 309 | | |
291 | 310 | | |
| |||
310 | 329 | | |
311 | 330 | | |
312 | 331 | | |
313 | | - | |
| 332 | + | |
314 | 333 | | |
315 | 334 | | |
316 | 335 | | |
317 | 336 | | |
318 | 337 | | |
319 | | - | |
| 338 | + | |
320 | 339 | | |
321 | 340 | | |
322 | 341 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
30 | 36 | | |
31 | 37 | | |
32 | 38 | | |
| |||
45 | 51 | | |
46 | 52 | | |
47 | 53 | | |
48 | | - | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | 54 | | |
54 | 55 | | |
55 | 56 | | |
| |||
63 | 64 | | |
64 | 65 | | |
65 | 66 | | |
66 | | - | |
| 67 | + | |
67 | 68 | | |
68 | 69 | | |
69 | 70 | | |
| |||
126 | 127 | | |
127 | 128 | | |
128 | 129 | | |
129 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
130 | 133 | | |
131 | 134 | | |
132 | 135 | | |
| |||
181 | 184 | | |
182 | 185 | | |
183 | 186 | | |
184 | | - | |
| 187 | + | |
185 | 188 | | |
186 | 189 | | |
187 | 190 | | |
| |||
215 | 218 | | |
216 | 219 | | |
217 | 220 | | |
218 | | - | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
219 | 224 | | |
220 | 225 | | |
221 | 226 | | |
| |||
230 | 235 | | |
231 | 236 | | |
232 | 237 | | |
233 | | - | |
| 238 | + | |
234 | 239 | | |
235 | 240 | | |
236 | 241 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| |||
56 | 57 | | |
57 | 58 | | |
58 | 59 | | |
| 60 | + | |
59 | 61 | | |
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
63 | 65 | | |
64 | 66 | | |
65 | 67 | | |
| 68 | + | |
66 | 69 | | |
67 | 70 | | |
68 | 71 | | |
69 | 72 | | |
70 | 73 | | |
71 | 74 | | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
72 | 79 | | |
73 | 80 | | |
74 | 81 | | |
| |||
78 | 85 | | |
79 | 86 | | |
80 | 87 | | |
81 | | - | |
| 88 | + | |
82 | 89 | | |
83 | 90 | | |
84 | 91 | | |
| |||
98 | 105 | | |
99 | 106 | | |
100 | 107 | | |
101 | | - | |
| 108 | + | |
| 109 | + | |
102 | 110 | | |
103 | 111 | | |
104 | 112 | | |
| |||
111 | 119 | | |
112 | 120 | | |
113 | 121 | | |
| 122 | + | |
114 | 123 | | |
115 | 124 | | |
116 | 125 | | |
| |||
146 | 155 | | |
147 | 156 | | |
148 | 157 | | |
| 158 | + | |
149 | 159 | | |
150 | 160 | | |
151 | 161 | | |
| |||
298 | 308 | | |
299 | 309 | | |
300 | 310 | | |
| 311 | + | |
| 312 | + | |
301 | 313 | | |
302 | 314 | | |
303 | 315 | | |
304 | 316 | | |
305 | | - | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
306 | 327 | | |
307 | 328 | | |
308 | 329 | | |
| |||
0 commit comments