k8s-agent-skills 1.2.0
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/README.md +102 -0
- package/package.json +63 -0
- package/skills/atlas/SKILL.md +166 -0
- package/skills/cert-manager/SKILL.md +212 -0
- package/skills/cilium-gateway/SKILL.md +283 -0
- package/skills/cilium-network/SKILL.md +243 -0
- package/skills/cnpg/SKILL.md +130 -0
- package/skills/dragonfly/SKILL.md +194 -0
- package/skills/external-dns/SKILL.md +185 -0
- package/skills/flagger/SKILL.md +292 -0
- package/skills/flux/SKILL.md +36 -0
- package/skills/gitea/SKILL.md +32 -0
- package/skills/gitea-api/SKILL.md +104 -0
- package/skills/gitea-registry/SKILL.md +71 -0
- package/skills/gitea-runner/SKILL.md +126 -0
- package/skills/gitea-tea/SKILL.md +206 -0
- package/skills/gitea-webhooks/SKILL.md +93 -0
- package/skills/harbor/SKILL.md +32 -0
- package/skills/harbor-api/SKILL.md +231 -0
- package/skills/harbor-helm/SKILL.md +238 -0
- package/skills/harbor-terraform/SKILL.md +233 -0
- package/skills/higress/SKILL.md +27 -0
- package/skills/higress-helm/SKILL.md +328 -0
- package/skills/higress-operator/SKILL.md +435 -0
- package/skills/kserve/SKILL.md +28 -0
- package/skills/kserve-helm/SKILL.md +330 -0
- package/skills/kserve-operator/SKILL.md +763 -0
- package/skills/kubeflow/SKILL.md +33 -0
- package/skills/kubeflow-pipelines/SKILL.md +392 -0
- package/skills/kubeflow-trainer/SKILL.md +429 -0
- package/skills/kubeflow-training-operator/SKILL.md +176 -0
- package/skills/mariadb/SKILL.md +27 -0
- package/skills/mariadb-helm/SKILL.md +378 -0
- package/skills/mariadb-operator/SKILL.md +1114 -0
- package/skills/nvidia-device-plugin/SKILL.md +204 -0
- package/skills/rook-ceph/SKILL.md +22 -0
- package/skills/rook-ceph-operator/SKILL.md +150 -0
- package/skills/rook-ceph-toolbox/SKILL.md +220 -0
- package/skills/sealed-secrets/SKILL.md +221 -0
- package/skills/stakater-reloader/SKILL.md +259 -0
- package/skills/talos/SKILL.md +244 -0
- package/skills/tekton/SKILL.md +187 -0
- package/skills/vector/SKILL.md +24 -0
- package/skills/vector-helm/SKILL.md +186 -0
- package/skills/vector-operator/SKILL.md +455 -0
- package/skills/victoria-metrics/SKILL.md +35 -0
- package/skills/victoriametrics-operator/SKILL.md +248 -0
- package/skills/zitadel/SKILL.md +24 -0
- package/skills/zitadel-api/SKILL.md +962 -0
- package/skills/zitadel-helm/SKILL.md +263 -0
- package/skills/zitadel-terraform/SKILL.md +728 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
# Higress — Operator CRDs & Configuration
|
|
2
|
+
|
|
3
|
+
**Repository:** `github.com/alibaba/higress`
|
|
4
|
+
**Latest:** v2.2.2 (May 21, 2026)
|
|
5
|
+
**CNCF:** Sandbox (March 2026)
|
|
6
|
+
**License:** Apache 2.0
|
|
7
|
+
**Stars:** 8.5k
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Ingress/Gateway API/CRDs → higress-controller (Go) → Istio Pilot → xDS (LDS/RDS/CDS/EDS) → higress-gateway (Envoy + Wasm)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- **Control plane**: higress-controller (Go) watches K8s resources, converts to Istio config, pushes via xDS
|
|
16
|
+
- **Data plane**: higress-gateway (Envoy-based) handles all traffic, runs Wasm plugins, zero-downtime config reload
|
|
17
|
+
- **Three ingress interfaces**: Standard K8s Ingress, Gateway API, Istio API (all simultaneous)
|
|
18
|
+
|
|
19
|
+
## CRDs (3 custom + 1 bundled)
|
|
20
|
+
|
|
21
|
+
| CRD | API Version | Kind | Short Names | Purpose |
|
|
22
|
+
|-----|-------------|------|-------------|---------|
|
|
23
|
+
| WasmPlugin | `extensions.higress.io/v1alpha1` | `WasmPlugin` | — | Wasm plugin lifecycle & config |
|
|
24
|
+
| Http2Rpc | `networking.higress.io/v1` | `Http2Rpc` | — | HTTP-to-RPC (Dubbo/gRPC) mapping |
|
|
25
|
+
| McpBridge | `networking.higress.io/v1` | `McpBridge` | — | Multi-registry service discovery |
|
|
26
|
+
| EnvoyFilter | `networking.istio.io/v1alpha3` | `EnvoyFilter` | — | Envoy filter chain patching (bundled) |
|
|
27
|
+
|
|
28
|
+
### WasmPlugin — `extensions.higress.io/v1alpha1`
|
|
29
|
+
|
|
30
|
+
Extends Envoy with Wasm-based plugins for auth, AI proxy, rate limiting, transformation, etc.
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
apiVersion: extensions.higress.io/v1alpha1
|
|
34
|
+
kind: WasmPlugin
|
|
35
|
+
metadata:
|
|
36
|
+
name: ai-proxy
|
|
37
|
+
namespace: higress-system
|
|
38
|
+
spec:
|
|
39
|
+
# Plugin source
|
|
40
|
+
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/ai-proxy:1.0.0
|
|
41
|
+
sha256: abc123...
|
|
42
|
+
pluginName: ai-proxy
|
|
43
|
+
imagePullPolicy: IfNotPresent
|
|
44
|
+
imagePullSecret: my-registry-cred
|
|
45
|
+
|
|
46
|
+
# Plugin configuration (global)
|
|
47
|
+
pluginConfig:
|
|
48
|
+
provider:
|
|
49
|
+
type: openai
|
|
50
|
+
apiTokens:
|
|
51
|
+
- "sk-..."
|
|
52
|
+
modelMapping:
|
|
53
|
+
"gpt-4": "gpt-4o"
|
|
54
|
+
timeout: 120000
|
|
55
|
+
|
|
56
|
+
# Default config (applied when no matchRules match)
|
|
57
|
+
defaultConfig: {}
|
|
58
|
+
defaultConfigDisable: false
|
|
59
|
+
|
|
60
|
+
# Failure behavior
|
|
61
|
+
failStrategy: FAIL_CLOSE # FAIL_CLOSE | FAIL_OPEN
|
|
62
|
+
|
|
63
|
+
# Position in filter chain
|
|
64
|
+
phase: AUTHN # UNSPECIFIED_PHASE | AUTHN | AUTHZ | STATS
|
|
65
|
+
priority: 100
|
|
66
|
+
|
|
67
|
+
# Wasm VM config
|
|
68
|
+
vmConfig:
|
|
69
|
+
env:
|
|
70
|
+
- name: LOG_LEVEL
|
|
71
|
+
value: debug
|
|
72
|
+
|
|
73
|
+
# Per-route overrides
|
|
74
|
+
matchRules:
|
|
75
|
+
- domain:
|
|
76
|
+
- "api.example.com"
|
|
77
|
+
config:
|
|
78
|
+
provider:
|
|
79
|
+
type: openai
|
|
80
|
+
apiTokens:
|
|
81
|
+
- "sk-another-token"
|
|
82
|
+
configDisable: false
|
|
83
|
+
- ingress:
|
|
84
|
+
- "my-ingress"
|
|
85
|
+
routeType: HTTP
|
|
86
|
+
configDisable: true
|
|
87
|
+
- service:
|
|
88
|
+
- "llm-service.default.svc"
|
|
89
|
+
config:
|
|
90
|
+
provider:
|
|
91
|
+
type: anthropic
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### Spec Fields
|
|
95
|
+
|
|
96
|
+
| Field | Type | Default | Description |
|
|
97
|
+
|-------|------|---------|-------------|
|
|
98
|
+
| `url` | string | — | Wasm module URL (`oci://...`, `http://...`) |
|
|
99
|
+
| `sha256` | string | — | SHA256 checksum |
|
|
100
|
+
| `pluginName` | string | — | Plugin name |
|
|
101
|
+
| `pluginConfig` | object | — | Plugin config (pass-through to plugin) |
|
|
102
|
+
| `defaultConfig` | object | `{}` | Default config for unmatched routes |
|
|
103
|
+
| `defaultConfigDisable` | bool | `false` | Disable plugin by default |
|
|
104
|
+
| `failStrategy` | enum | `FAIL_CLOSE` | `FAIL_CLOSE` or `FAIL_OPEN` |
|
|
105
|
+
| `phase` | enum | — | `UNSPECIFIED_PHASE`, `AUTHN`, `AUTHZ`, `STATS` |
|
|
106
|
+
| `priority` | int | — | Ordering within same phase |
|
|
107
|
+
| `imagePullPolicy` | enum | — | `UNSPECIFIED_POLICY`, `IfNotPresent`, `Always` |
|
|
108
|
+
| `imagePullSecret` | string | — | OCI pull secret name |
|
|
109
|
+
| `verificationKey` | string | — | Plugin signature verification key |
|
|
110
|
+
| `vmConfig.env` | []EnvVar | — | Wasm VM environment variables |
|
|
111
|
+
| `matchRules[]` | []MatchRule | — | Per-route config overrides |
|
|
112
|
+
|
|
113
|
+
**MatchRule fields:**
|
|
114
|
+
|
|
115
|
+
| Field | Type | Description |
|
|
116
|
+
|-------|------|-------------|
|
|
117
|
+
| `domain[]` | []string | Match by domain name |
|
|
118
|
+
| `ingress[]` | []string | Match by Ingress resource name |
|
|
119
|
+
| `service[]` | []string | Match by K8s service name |
|
|
120
|
+
| `routeType` | enum | `HTTP` or `GRPC` |
|
|
121
|
+
| `config` | object | Plugin config for this rule |
|
|
122
|
+
| `configDisable` | bool | Disable plugin for this rule |
|
|
123
|
+
|
|
124
|
+
### Http2Rpc — `networking.higress.io/v1`
|
|
125
|
+
|
|
126
|
+
Maps HTTP endpoints to Dubbo or gRPC services.
|
|
127
|
+
|
|
128
|
+
```yaml
|
|
129
|
+
apiVersion: networking.higress.io/v1
|
|
130
|
+
kind: Http2Rpc
|
|
131
|
+
metadata:
|
|
132
|
+
name: dubbo-user-service
|
|
133
|
+
spec:
|
|
134
|
+
# Dubbo destination (oneOf: dubbo XOR grpc)
|
|
135
|
+
dubbo:
|
|
136
|
+
service: com.example.UserService
|
|
137
|
+
version: 1.0.0
|
|
138
|
+
group: prod
|
|
139
|
+
methods:
|
|
140
|
+
- serviceMethod: getUserById
|
|
141
|
+
httpPath: /api/users/:id
|
|
142
|
+
httpMethods:
|
|
143
|
+
- GET
|
|
144
|
+
headersAttach: x-request-id
|
|
145
|
+
params:
|
|
146
|
+
- paramSource: URL_PATH
|
|
147
|
+
paramKey: id
|
|
148
|
+
paramType: java.lang.Long
|
|
149
|
+
- serviceMethod: createUser
|
|
150
|
+
httpPath: /api/users
|
|
151
|
+
httpMethods:
|
|
152
|
+
- POST
|
|
153
|
+
paramFromEntireBody:
|
|
154
|
+
paramType: com.example.User
|
|
155
|
+
|
|
156
|
+
# OR gRPC destination (alternative to dubbo):
|
|
157
|
+
# grpc:
|
|
158
|
+
# proto_descriptor_str: "...base64..."
|
|
159
|
+
# proto_descriptor_file_path: /etc/proto/user.pb
|
|
160
|
+
# services:
|
|
161
|
+
# - com.example.UserService
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Spec Fields
|
|
165
|
+
|
|
166
|
+
| Field | Type | Required | Description |
|
|
167
|
+
|-------|------|----------|-------------|
|
|
168
|
+
| `dubbo.service` | string | oneOf | Dubbo service interface |
|
|
169
|
+
| `dubbo.version` | string | ✅ | Dubbo service version |
|
|
170
|
+
| `dubbo.group` | string | ❌ | Dubbo service group |
|
|
171
|
+
| `dubbo.methods[].serviceMethod` | string | ✅ | Dubbo method name |
|
|
172
|
+
| `dubbo.methods[].httpPath` | string | ✅ | HTTP path to map |
|
|
173
|
+
| `dubbo.methods[].httpMethods[]` | []string | ✅ | Allowed HTTP methods |
|
|
174
|
+
| `dubbo.methods[].headersAttach` | string | ❌ | Headers to propagate |
|
|
175
|
+
| `dubbo.methods[].params[].paramSource` | string | ✅ | `URL_PATH`, `URL_QUERY`, `REQUEST_HEADER` |
|
|
176
|
+
| `dubbo.methods[].params[].paramKey` | string | ✅ | Parameter key name |
|
|
177
|
+
| `dubbo.methods[].params[].paramType` | string | ✅ | Java type (e.g. `java.lang.Long`) |
|
|
178
|
+
| `dubbo.methods[].paramFromEntireBody.paramType` | string | ❌ | Use entire body as param |
|
|
179
|
+
| `grpc.proto_descriptor_str` | string | oneOf | Inline protobuf descriptor |
|
|
180
|
+
| `grpc.proto_descriptor_file_path` | string | ❌ | Path to proto descriptor file |
|
|
181
|
+
| `grpc.services[]` | []string | ✅ | gRPC service names |
|
|
182
|
+
|
|
183
|
+
### McpBridge — `networking.higress.io/v1`
|
|
184
|
+
|
|
185
|
+
Multi-registry service discovery for integrating external service registries.
|
|
186
|
+
|
|
187
|
+
```yaml
|
|
188
|
+
apiVersion: networking.higress.io/v1
|
|
189
|
+
kind: McpBridge
|
|
190
|
+
metadata:
|
|
191
|
+
name: default
|
|
192
|
+
namespace: higress-system
|
|
193
|
+
spec:
|
|
194
|
+
registries:
|
|
195
|
+
# Nacos 2.x (gRPC)
|
|
196
|
+
- type: nacos2
|
|
197
|
+
name: my-nacos
|
|
198
|
+
domain: nacos.example.com
|
|
199
|
+
port: 8848
|
|
200
|
+
protocol: HTTP
|
|
201
|
+
nacosNamespaceId: public
|
|
202
|
+
nacosGroups:
|
|
203
|
+
- DEFAULT_GROUP
|
|
204
|
+
nacosRefreshInterval: 5000
|
|
205
|
+
|
|
206
|
+
# Nacos 3.x (MCP auto-discovery)
|
|
207
|
+
- type: nacos3
|
|
208
|
+
name: nacos-mcp
|
|
209
|
+
domain: nacos3.example.com
|
|
210
|
+
port: 8848
|
|
211
|
+
enableMCPServer: true
|
|
212
|
+
|
|
213
|
+
# ZooKeeper
|
|
214
|
+
- type: zookeeper
|
|
215
|
+
name: my-zk
|
|
216
|
+
domain: zk.example.com
|
|
217
|
+
port: 2181
|
|
218
|
+
zkServicesPath:
|
|
219
|
+
- /dubbo
|
|
220
|
+
|
|
221
|
+
# Consul
|
|
222
|
+
- type: consul
|
|
223
|
+
name: my-consul
|
|
224
|
+
domain: consul.example.com
|
|
225
|
+
port: 8500
|
|
226
|
+
consulDatacenter: dc1
|
|
227
|
+
consulServiceTag: prod
|
|
228
|
+
|
|
229
|
+
# Static/DNS
|
|
230
|
+
- type: static
|
|
231
|
+
name: static-backends
|
|
232
|
+
domain: backend.example.com
|
|
233
|
+
port: 8080
|
|
234
|
+
|
|
235
|
+
proxies:
|
|
236
|
+
- type: http_connect
|
|
237
|
+
name: corporate-proxy
|
|
238
|
+
serverAddress: proxy.example.com
|
|
239
|
+
serverPort: 3128
|
|
240
|
+
listenerPort: 80
|
|
241
|
+
connectTimeout: 5000
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### Spec Fields
|
|
245
|
+
|
|
246
|
+
| Field | Type | Description |
|
|
247
|
+
|-------|------|-------------|
|
|
248
|
+
| `registries[]` | []Registry | Service registry configurations |
|
|
249
|
+
|
|
250
|
+
**Registry fields:**
|
|
251
|
+
|
|
252
|
+
| Field | Type | Description |
|
|
253
|
+
|-------|------|-------------|
|
|
254
|
+
| `type` | string | `nacos2`, `nacos3`, `nacos`, `zookeeper`, `consul`, `eureka`, `static`, `dns` |
|
|
255
|
+
| `name` | string | Registry name |
|
|
256
|
+
| `domain` | string | Registry host |
|
|
257
|
+
| `port` | int | Registry port |
|
|
258
|
+
| `protocol` | string | `HTTP` or `HTTPS` |
|
|
259
|
+
| `sni` | string | SNI for TLS |
|
|
260
|
+
| `nacosNamespaceId` | string | Nacos namespace ID |
|
|
261
|
+
| `nacosGroups` | []string | Nacos groups |
|
|
262
|
+
| `nacosAccessKey` | string | Nacos auth key |
|
|
263
|
+
| `nacosSecretKey` | string | Nacos auth secret |
|
|
264
|
+
| `nacosAddressServer` | string | Nacos address server |
|
|
265
|
+
| `nacosRefreshInterval` | int | Refresh interval (ms) |
|
|
266
|
+
| `zkServicesPath` | []string | ZooKeeper service paths |
|
|
267
|
+
| `consulDatacenter` | string | Consul datacenter |
|
|
268
|
+
| `consulNamespace` | string | Consul namespace |
|
|
269
|
+
| `consulServiceTag` | string | Consul service tag |
|
|
270
|
+
| `consulRefreshInterval` | int | Refresh interval (ms) |
|
|
271
|
+
| `authSecretName` | string | Secret name for registry auth |
|
|
272
|
+
| `enableMCPServer` | bool | Enable MCP server for Nacos 3.x |
|
|
273
|
+
| `allowMcpServers` | []string | Allowed MCP server addresses |
|
|
274
|
+
| `mcpServerBaseUrl` | string | MCP server base URL |
|
|
275
|
+
| `mcpServerExportDomains` | []string | Domains to export via MCP |
|
|
276
|
+
| `enableScopeMcpServers` | bool | Scope MCP servers |
|
|
277
|
+
| `vport.default` | int | Default virtual port |
|
|
278
|
+
| `vport.services` | []object | Per-service vport overrides |
|
|
279
|
+
| `metadata` | map | Extra metadata |
|
|
280
|
+
| `proxyName` | string | Proxy name |
|
|
281
|
+
|
|
282
|
+
**Proxy fields:**
|
|
283
|
+
|
|
284
|
+
| Field | Type | Description |
|
|
285
|
+
|-------|------|-------------|
|
|
286
|
+
| `type` | string | `http_connect` |
|
|
287
|
+
| `name` | string | Proxy name |
|
|
288
|
+
| `serverAddress` | string | Proxy server address |
|
|
289
|
+
| `serverPort` | int | Proxy server port |
|
|
290
|
+
| `listenerPort` | int | Local listener port |
|
|
291
|
+
| `connectTimeout` | int | Connection timeout (ms) |
|
|
292
|
+
|
|
293
|
+
### EnvoyFilter — `networking.istio.io/v1alpha3`
|
|
294
|
+
|
|
295
|
+
Bundled Istio CRD for low-level Envoy filter chain patching.
|
|
296
|
+
|
|
297
|
+
```yaml
|
|
298
|
+
apiVersion: networking.istio.io/v1alpha3
|
|
299
|
+
kind: EnvoyFilter
|
|
300
|
+
metadata:
|
|
301
|
+
name: custom-filter
|
|
302
|
+
namespace: higress-system
|
|
303
|
+
spec:
|
|
304
|
+
configPatches:
|
|
305
|
+
- applyTo: HTTP_FILTER
|
|
306
|
+
match:
|
|
307
|
+
context: GATEWAY
|
|
308
|
+
listener:
|
|
309
|
+
filterChain:
|
|
310
|
+
filter:
|
|
311
|
+
name: envoy.filters.network.http_connection_manager
|
|
312
|
+
subFilter:
|
|
313
|
+
name: envoy.filters.http.router
|
|
314
|
+
patch:
|
|
315
|
+
operation: INSERT_BEFORE
|
|
316
|
+
value:
|
|
317
|
+
name: envoy.filters.http.lua
|
|
318
|
+
typed_config:
|
|
319
|
+
"@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
|
|
320
|
+
inline_code: |
|
|
321
|
+
function envoy_on_request(request_handle)
|
|
322
|
+
-- custom logic
|
|
323
|
+
end
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Wasm Plugin System
|
|
327
|
+
|
|
328
|
+
### Plugin Categories (41 built-in)
|
|
329
|
+
|
|
330
|
+
| Category | Plugins | Count |
|
|
331
|
+
|----------|---------|-------|
|
|
332
|
+
| **AI** | ai-proxy, ai-cache, ai-token-ratelimit, ai-quota, ai-security-guard, ai-statistics, ai-rag, ai-search, ai-agent, ai-transformer, ai-prompt-template, ai-prompt-decorator, ai-intent, ai-history, ai-json-resp, ai-data-masking, ai-load-balancer, ai-image-reader, model-mapper, model-router, mcp-router, mcp-server, chatgpt-proxy | 23 |
|
|
333
|
+
| **Auth** | basic-auth, key-auth, hmac-auth, hmac-auth-apisix, jwt-auth, simple-jwt-auth, oauth/oidc, ext-auth, opa | 9 |
|
|
334
|
+
| **Security** | waf, bot-detect, cors, ip-restriction, request-block, replay-protection | 6 |
|
|
335
|
+
| **Traffic** | cluster-key-rate-limit, key-rate-limit, request-validation, traffic-tag, traffic-editor, response-cache | 6 |
|
|
336
|
+
| **Transformation** | transformer, custom-response, cache-control, de-graphql, frontend-gray, nginx-rewrite-compatible | 6 |
|
|
337
|
+
|
|
338
|
+
### Plugin Languages
|
|
339
|
+
- **Go** (69 plugins) — primary, via TinyGo + wasm-go SDK
|
|
340
|
+
- **Rust** (5), **C++**, **AssemblyScript**
|
|
341
|
+
|
|
342
|
+
### Plugin Loading
|
|
343
|
+
- **OCI images**: `oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/<name>:<version>`
|
|
344
|
+
- **HTTP distribution**: via plugin-server
|
|
345
|
+
- **SDK**: [`github.com/higress-group/wasm-go`](https://github.com/higress-group/wasm-go)
|
|
346
|
+
|
|
347
|
+
### WasmPlugin AI Proxy Example
|
|
348
|
+
|
|
349
|
+
```yaml
|
|
350
|
+
apiVersion: extensions.higress.io/v1alpha1
|
|
351
|
+
kind: WasmPlugin
|
|
352
|
+
metadata:
|
|
353
|
+
name: ai-proxy-openai
|
|
354
|
+
spec:
|
|
355
|
+
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/ai-proxy:1.0.0
|
|
356
|
+
pluginConfig:
|
|
357
|
+
provider:
|
|
358
|
+
type: openai
|
|
359
|
+
apiTokens:
|
|
360
|
+
- "sk-..."
|
|
361
|
+
modelMapping:
|
|
362
|
+
"gpt-4": "gpt-4o"
|
|
363
|
+
timeout: 120000
|
|
364
|
+
protocol: openai # or "original" for native provider protocol
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### AI Gateway Provider Options
|
|
368
|
+
|
|
369
|
+
| Provider | `type` value | Auth Method |
|
|
370
|
+
|----------|-------------|-------------|
|
|
371
|
+
| OpenAI | `openai` | `apiTokens[]` |
|
|
372
|
+
| Azure OpenAI | `azure` | `apiTokens[]` |
|
|
373
|
+
| Anthropic Claude | `claude` | `apiTokens[]` |
|
|
374
|
+
| Google Gemini | `gemini` | `apiTokens[]` |
|
|
375
|
+
| AWS Bedrock | `aws-bedrock` | IAM (env) |
|
|
376
|
+
| DeepSeek | `deepseek` | `apiTokens[]` |
|
|
377
|
+
| Moonshot | `moonshot` | `apiTokens[]` |
|
|
378
|
+
| Qwen (Tongyi) | `qwen` | `apiTokens[]` |
|
|
379
|
+
| Alibaba Bailian | `bailian` | `apiTokens[]` |
|
|
380
|
+
| Doubao | `doubao` | `apiTokens[]` |
|
|
381
|
+
| Spark (Xunfei) | `spark` | `apiTokens[]` |
|
|
382
|
+
| Cloudflare Workers AI | `cloudflare` | `apiTokens[]` |
|
|
383
|
+
| Together AI | `together` | `apiTokens[]` |
|
|
384
|
+
| OpenRouter | `openrouter` | `apiTokens[]` |
|
|
385
|
+
| Mistral | `mistral` | `apiTokens[]` |
|
|
386
|
+
| NVIDIA Triton | `nvidia-triton` | — |
|
|
387
|
+
|
|
388
|
+
### Common WasmPlugin Patterns
|
|
389
|
+
|
|
390
|
+
**Rate Limiting:**
|
|
391
|
+
```yaml
|
|
392
|
+
spec:
|
|
393
|
+
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/key-rate-limit:1.0.0
|
|
394
|
+
pluginConfig:
|
|
395
|
+
limit: 100
|
|
396
|
+
window_size: 60
|
|
397
|
+
key_source: X-Forwarded-For
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**JWT Auth:**
|
|
401
|
+
```yaml
|
|
402
|
+
spec:
|
|
403
|
+
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/jwt-auth:1.0.0
|
|
404
|
+
pluginConfig:
|
|
405
|
+
consumers:
|
|
406
|
+
- name: myapp
|
|
407
|
+
credential: myapp-secret
|
|
408
|
+
iss: https://auth.example.com
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**CORS:**
|
|
412
|
+
```yaml
|
|
413
|
+
spec:
|
|
414
|
+
url: oci://higress-registry.cn-hangzhou.cr.aliyuncs.com/plugins/cors:1.0.0
|
|
415
|
+
pluginConfig:
|
|
416
|
+
allow_origins: "https://app.example.com"
|
|
417
|
+
allow_methods: "GET,POST,PUT,DELETE"
|
|
418
|
+
allow_headers: "Content-Type,Authorization"
|
|
419
|
+
expose_headers: "X-Custom-Header"
|
|
420
|
+
max_age: 3600
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
## Common Mistakes
|
|
424
|
+
|
|
425
|
+
- **No short names defined** — WasmPlugin/Http2Rpc/McpBridge have no kubectl short names. Use full plural: `kubectl get wasmplugins`, `kubectl get http2rpcs`, `kubectl get mcpbridges`.
|
|
426
|
+
- **WasmPlugin url without OCI** — Only `oci://` and `http://` schemes supported. Don't use `docker://`.
|
|
427
|
+
- **Image pull secret** — Private OCI registries need `imagePullSecret` referencing a secret in the same namespace.
|
|
428
|
+
- **Phase ordering** — Plugins run in order: AUTHN → AUTHZ → STATS. Within same phase, lower priority runs first.
|
|
429
|
+
- **matchRules overlap** — If multiple rules match, first match wins. Order `domain` → `ingress` → `service` by priority.
|
|
430
|
+
- **Dubbo version required** — `dubbo.version` is required even if not used by the target service.
|
|
431
|
+
- **McpBridge registry name** — Each registry in `registries[]` must have a unique `name`.
|
|
432
|
+
- **Nacos namespace** — Use `nacosNamespaceId` (not `nacosNamespace` which is legacy) for Nacos multi-tenant.
|
|
433
|
+
- **EnvoyFilter complexity** — EnvoyFilter patches are powerful but break on Envoy version upgrades. Prefer WasmPlugin when possible.
|
|
434
|
+
- **Gateway API mutual exclusion** — When both Ingress and Gateway API define the same route, Gateway API takes precedence.
|
|
435
|
+
- **Fail strategy** — `FAIL_CLOSE` blocks traffic on plugin error. `FAIL_OPEN` passes through. Use `FAIL_CLOSE` for auth, `FAIL_OPEN` for observability.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# KServe — Skill Router
|
|
2
|
+
|
|
3
|
+
Pick the right sub-skill.
|
|
4
|
+
|
|
5
|
+
## Which Sub-Skill?
|
|
6
|
+
|
|
7
|
+
| User wants to... | Load skill |
|
|
8
|
+
|---|---|
|
|
9
|
+
| Manage CRDs (InferenceService, ServingRuntime, InferenceGraph, LLMInferenceService, LocalModelNode), configure predictors, storage, transformers, explainers | `kserve-operator` |
|
|
10
|
+
| Deploy, configure, upgrade KServe via Helm (10 charts, deployment modes) | `kserve-helm` |
|
|
11
|
+
|
|
12
|
+
## Quick Map
|
|
13
|
+
|
|
14
|
+
| Task | Skill |
|
|
15
|
+
|---|---|
|
|
16
|
+
| "Deploy a sklearn InferenceService with S3 model" | `kserve-operator` |
|
|
17
|
+
| "Configure a multi-node LLM serving with vLLM" | `kserve-operator` |
|
|
18
|
+
| "Create a ServingRuntime for custom Triton setup" | `kserve-operator` |
|
|
19
|
+
| "Set up an InferenceGraph ensemble pipeline" | `kserve-operator` |
|
|
20
|
+
| "Configure S3/GCS/HF storage credentials" | `kserve-operator` |
|
|
21
|
+
| "Enable LocalModelCache for NVMe model caching" | `kserve-operator` |
|
|
22
|
+
| "Deploy KServe on Kubernetes with Helm" | `kserve-helm` |
|
|
23
|
+
| "Configure Standard vs Knative deployment mode" | `kserve-helm` |
|
|
24
|
+
| "Install KServe CRDs only" | `kserve-helm` |
|
|
25
|
+
| "Set up LLMInferenceService with disaggregated prefill/decode" | `kserve-operator` |
|
|
26
|
+
| "Add a transformer for pre/post-processing" | `kserve-operator` |
|
|
27
|
+
| "Create a canary rollout for model update" | `kserve-operator` |
|
|
28
|
+
| "Configure Gateway API ingress" | `kserve-helm` |
|