zuplo 7.7.9 → 7.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,279 +0,0 @@
1
- ---
2
- title: Verify Your Install
3
- sidebar_label: Verify your install
4
- ---
5
-
6
- Run the six checks in order. Each check depends on the previous one, which helps
7
- you identify the source of a failure. Checks one through five require only the
8
- installation. Check six also requires a Zuplo API key and project.
9
-
10
- ## Check the deployments
11
-
12
- Gate on readiness before testing anything over the network.
13
-
14
- ```bash
15
- kubectl wait --for=condition=Available deployment --all \
16
- -n zuplo-system --timeout=5m
17
- kubectl wait --for=condition=Available deployment --all \
18
- -n zuplo --timeout=5m
19
- ```
20
-
21
- ```
22
- deployment.apps/control-plane condition met
23
- deployment.apps/deployer condition met
24
- deployment.apps/gateway condition met
25
- deployment.apps/storage condition met
26
- deployment.apps/acme-forwarder condition met
27
- deployment.apps/custom-error-pages condition met
28
- deployment.apps/zuplo-cert-manager condition met
29
- deployment.apps/zuplo-cert-manager-cainjector condition met
30
- deployment.apps/zuplo-cert-manager-webhook condition met
31
- deployment.apps/zuplo-haproxy-ingress condition met
32
- deployment.apps/zuplo-kube-prometheus-stac-operator condition met
33
- deployment.apps/zuplo-kube-state-metrics condition met
34
- deployment.apps/zuplo-prometheus-adapter condition met
35
- ```
36
-
37
- The `control-plane`, `deployer`, `gateway`, `storage`, and `acme-forwarder`
38
- deployments are part of the Zuplo management plane. The other deployments come
39
- from subcharts.
40
-
41
- ## Check the ingress
42
-
43
- Send a request for a hostname that has no Ingress. This checks that the load
44
- balancer can reach HAProxy.
45
-
46
- ```bash
47
- LB=$(kubectl get svc zuplo-haproxy-ingress -n zuplo \
48
- -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
49
-
50
- curl -i "http://$LB/" -H 'Host: no-such-deployment.example.com'
51
- ```
52
-
53
- ```
54
- HTTP/1.1 404 Not Found
55
- content-type: text/html
56
-
57
- {
58
- "type": "https://httpproblems.com/http-status/404",
59
- "title": "Not Found",
60
- "status": 404,
61
- "detail": "This Zuplo project does not exist"
62
- }
63
- ```
64
-
65
- The expected result is `404 Not Found` from HAProxy's default backend. A timeout
66
- or refused connection means that traffic isn't reaching the ingress controller.
67
-
68
- Use a hostname without an Ingress for this check. Hosts with an Ingress redirect
69
- port 80 to HTTPS and return a `302` instead.
70
-
71
- :::note
72
-
73
- Requests for hosts with an Ingress are redirected from port 80 to 443. The
74
- separate challenge Ingress created by cert-manager continues to serve ACME
75
- challenge paths on port 80.
76
-
77
- :::
78
-
79
- ## Check the control plane
80
-
81
- The control plane turns your values into a `Configuration` resource, then
82
- creates the management API's Ingress from it.
83
-
84
- ```bash
85
- kubectl get configuration default -n zuplo-system -o yaml
86
- ```
87
-
88
- ```yaml
89
- spec:
90
- account:
91
- name: acme-corp
92
- builder:
93
- registry: us-docker.pkg.dev/acme-corp/zuplo-gateways
94
- secretName: builder-secret
95
- deployments:
96
- subdomain: api.example.com
97
- certificates:
98
- certManager:
99
- issuer: zuplo-cluster-issuer
100
- managementApi:
101
- hostname: zuplo-admin.example.com
102
- ingressControllers:
103
- - haproxy
104
- ```
105
-
106
- Confirm every value matches what you put in `zuplo-values.yaml`. A
107
- single-cluster installation has no `workers` or `authorization` entry. Those
108
- settings are for installations that distribute deployments across clusters.
109
-
110
- Then confirm the reconciler acted on the rest:
111
-
112
- ```bash
113
- kubectl get ingress -n zuplo-system
114
- kubectl get clusterissuer
115
- ```
116
-
117
- ```
118
- NAME CLASS HOSTS ADDRESS PORTS AGE
119
- gateway-haproxy haproxy zuplo-admin.example.com 203.0.113.24 80, 443 62s
120
-
121
- NAME READY STATUS AGE
122
- zuplo-cluster-issuer True The ACME account was registered with the ACME server 116s
123
- ```
124
-
125
- `READY: True` for `zuplo-cluster-issuer` means that the chart registered an
126
- account with the certificate authority. It doesn't indicate whether a
127
- certificate has been issued.
128
-
129
- :::note
130
-
131
- `Configuration` doesn't report a status. Check the Ingress and ClusterIssuer
132
- resources that it produces instead.
133
-
134
- :::
135
-
136
- ## Check certificate issuance
137
-
138
- Check that the certificate authority issued a certificate for the management API
139
- hostname:
140
-
141
- ```bash
142
- kubectl get certificate -A
143
- ```
144
-
145
- ```
146
- NAMESPACE NAME READY SECRET AGE
147
- zuplo-system gateway-cert-manager True gateway-cert-manager 4m
148
- ```
149
-
150
- `READY: True` means that the certificate authority validated your hostname and
151
- issued a certificate. If it remains `False` for more than a few minutes, see
152
- [Troubleshooting](./troubleshooting.md).
153
-
154
- cert-manager retries automatically after you fix DNS. You don't need to restart
155
- it.
156
-
157
- ## Check the management API
158
-
159
- Send an unauthenticated request to check DNS, the load balancer, HAProxy, the
160
- certificate, and authentication:
161
-
162
- ```bash
163
- curl -i https://zuplo-admin.example.com/v1/deployments
164
- ```
165
-
166
- ```
167
- HTTP/2 401
168
-
169
- {
170
- "type": "https://httpproblems.com/http-status/401",
171
- "title": "Unauthorized",
172
- "status": 401,
173
- "detail": "No Authorization Header",
174
- ...
175
- }
176
- ```
177
-
178
- The expected result is `401 Unauthorized`. It confirms that `curl` completed a
179
- TLS handshake with a trusted certificate and that the gateway requires an API
180
- key. A TLS error indicates a certificate problem. A timeout indicates a DNS or
181
- load balancer problem.
182
-
183
- Confirm the certificate is the real one rather than HAProxy's self-signed
184
- fallback:
185
-
186
- ```bash
187
- echo | openssl s_client -connect zuplo-admin.example.com:443 \
188
- -servername zuplo-admin.example.com 2>/dev/null |
189
- openssl x509 -noout -subject -issuer
190
- ```
191
-
192
- ```
193
- subject=CN=zuplo-admin.example.com
194
- issuer=C=US, O=Let's Encrypt, CN=YR2
195
- ```
196
-
197
- An issuer of `CN=kubernetes-ingress-ca` means HAProxy is serving its built-in
198
- fallback certificate because no issued certificate is available. Repeat the
199
- certificate issuance check.
200
-
201
- ## Deploy and call a project
202
-
203
- The final check builds a gateway image in your cluster, stores it in your
204
- registry, and serves it from your infrastructure.
205
-
206
- Deploy your project with the Zuplo CLI. The `project` field in `zuplo.jsonc`
207
- selects the project, and Zuplo routes the deployment to your cluster:
208
-
209
- ```bash
210
- export ZUPLO_API_KEY='<your Zuplo API key>'
211
-
212
- npx zuplo deploy
213
- ```
214
-
215
- Zuplo compiles the project, then hands the compiled bundle to your cluster's
216
- management API, which builds the container image and rolls it out.
217
-
218
- While the command runs, watch the build Job in your cluster:
219
-
220
- ```bash
221
- kubectl get jobs -n zuplo-system -w
222
- ```
223
-
224
- ```
225
- NAME STATUS COMPLETIONS DURATION AGE
226
- build-basic-main-ca9748b-ztcwzdd Running 0/1 32s 32s
227
- build-basic-main-ca9748b-ztcwzdd Complete 1/1 58s 63s
228
- ```
229
-
230
- Confirm that the deployment uses an image from your registry:
231
-
232
- ```bash
233
- kubectl get deploy -n zuplo -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.template.spec.containers[0].image}{"\n"}{end}'
234
- ```
235
-
236
- ```
237
- basic-main-ca9748b us-docker.pkg.dev/acme-corp/zuplo-gateways/basic-main-ca9748b:20260806-172436
238
- ```
239
-
240
- Ask the management API what it is serving:
241
-
242
- ```bash
243
- curl -H "Authorization: Bearer $ZUPLO_API_KEY" \
244
- https://zuplo-admin.example.com/v1/deployments
245
- ```
246
-
247
- ```json
248
- {
249
- "data": [
250
- {
251
- "projectName": "basic",
252
- "deploymentName": "basic-main-ca9748b-haproxy",
253
- "deploymentUrl": "https://basic-main-ca9748b.api.example.com"
254
- }
255
- ]
256
- }
257
- ```
258
-
259
- Call the deployed API:
260
-
261
- ```bash
262
- curl https://basic-main-ca9748b.api.example.com/hello
263
- ```
264
-
265
- The first request to a deployment can fail while cert-manager issues its
266
- certificate. Retry the request for up to a minute.
267
-
268
- :::note
269
-
270
- The CLI can misreport the status of deployments to self-hosted clusters. See
271
- [Troubleshooting](./troubleshooting.md#failed-to-deploy-the-environment-but-the-cluster-shows-the-build-succeeding).
272
- Use the in-cluster checks to confirm the result.
273
-
274
- :::
275
-
276
- ## Resolve a failed check
277
-
278
- [Troubleshooting](./troubleshooting.md) lists errors from these checks and their
279
- causes.