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.
- package/docs/ai-gateway/azure-ai.mdx +70 -14
- package/docs/ai-gateway/bedrock-mantle.mdx +5 -1
- package/docs/ai-gateway/integrations/claude-code.mdx +193 -22
- package/docs/ai-gateway/integrations/github-copilot.mdx +165 -0
- package/docs/ai-gateway/providers.mdx +9 -5
- package/docs/ai-gateway/universal-api.mdx +1 -1
- package/docs/ai-gateway/vertex-ai.mdx +6 -1
- package/docs/policies/ai-gateway-configuration-executor-v2-inbound/doc.md +21 -89
- package/docs/policies/ai-gateway-metering-v2-inbound/doc.md +156 -0
- package/docs/policies/ai-gateway-metering-v2-inbound/intro.md +4 -0
- package/docs/policies/ai-gateway-metering-v2-inbound/schema.json +12 -6
- package/docs/self-hosted/install.md +35 -1
- package/docs/self-hosted/overview.md +4 -4
- package/docs/self-hosted/troubleshooting.md +3 -2
- package/docs/self-hosted/upgrade.md +5 -5
- package/package.json +5 -5
- package/docs/self-hosted/verify.md +0 -279
|
@@ -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.
|