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,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: harbor-terraform
|
|
3
|
+
description: Use when managing Harbor infrastructure as code with Terraform — projects, robot accounts, registries, replication rules, retention policies, webhooks, users, groups, system config, and the goharbor/terraform-provider-harbor.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Harbor Terraform Provider
|
|
7
|
+
|
|
8
|
+
Provider: `goharbor/harbor`. Latest: **v3.12.0** (Jun 4, 2026). Registry: `v3.11.6` (Apr 22, 2026). Source: `github.com/goharbor/terraform-provider-harbor`.
|
|
9
|
+
|
|
10
|
+
Tested against: Harbor 2.13–2.15, Terraform 1.12–1.14.
|
|
11
|
+
|
|
12
|
+
## Provider Config
|
|
13
|
+
|
|
14
|
+
```hcl
|
|
15
|
+
terraform {
|
|
16
|
+
required_providers {
|
|
17
|
+
harbor = {
|
|
18
|
+
source = "goharbor/harbor"
|
|
19
|
+
version = "~> 3.11"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
provider "harbor" {
|
|
25
|
+
url = "https://harbor.example.com"
|
|
26
|
+
username = "admin"
|
|
27
|
+
password = var.harbor_password
|
|
28
|
+
insecure = false # Verify TLS (default: true — must explicitly set false)
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Auth Methods
|
|
33
|
+
| Method | Fields | Env Var |
|
|
34
|
+
|--------|--------|---------|
|
|
35
|
+
| Basic | `username` + `password` | `HARBOR_USERNAME`, `HARBOR_PASSWORD` |
|
|
36
|
+
| Bearer Token | `bearer_token` | — |
|
|
37
|
+
| OIDC Session | `session_id` | `HARBOR_SESSION_ID` |
|
|
38
|
+
|
|
39
|
+
`api_version` (default: 2) — use 1 for Harbor pre-2.0. `robot_prefix` — auto-detected via admin API unless explicitly set.
|
|
40
|
+
|
|
41
|
+
## Resources (20)
|
|
42
|
+
|
|
43
|
+
### Projects
|
|
44
|
+
|
|
45
|
+
```hcl
|
|
46
|
+
resource "harbor_project" "myapp" {
|
|
47
|
+
name = "myapp"
|
|
48
|
+
public = false
|
|
49
|
+
vulnerability_scanning = true
|
|
50
|
+
vulnerability_scanner = "Trivy" # v3.11.6+: per-project scanner override
|
|
51
|
+
enable_content_trust = true # Notary
|
|
52
|
+
enable_content_trust_cosign = false # Cosign signatures
|
|
53
|
+
auto_sbom_generation = true # Harbor 2.11+ SBOM on push
|
|
54
|
+
storage_quota = 100 # GB
|
|
55
|
+
deployment_security = "high" # Block images >= this severity
|
|
56
|
+
cve_allowlist = ["CVE-1234"]
|
|
57
|
+
force_destroy = false # Allow destroy even with repos
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# Proxy cache project
|
|
61
|
+
resource "harbor_registry" "dockerhub" {
|
|
62
|
+
provider_name = "docker-hub"
|
|
63
|
+
name = "dockerhub-proxy"
|
|
64
|
+
endpoint_url = "https://hub.docker.com"
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
resource "harbor_project" "proxy" {
|
|
68
|
+
name = "docker-proxy"
|
|
69
|
+
registry_id = harbor_registry.dockerhub.registry_id
|
|
70
|
+
proxy_speed_kb = -1
|
|
71
|
+
proxy_cache_local_on_not_found = true # Harbor 2.15.1+
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Robot Accounts
|
|
76
|
+
|
|
77
|
+
```hcl
|
|
78
|
+
# System-level
|
|
79
|
+
resource "harbor_robot_account" "system" {
|
|
80
|
+
name = "ci-system"
|
|
81
|
+
description = "System-level CI robot"
|
|
82
|
+
level = "system"
|
|
83
|
+
secret = random_password.robot.result
|
|
84
|
+
permissions {
|
|
85
|
+
kind = "project"
|
|
86
|
+
namespace = "*" # All projects
|
|
87
|
+
access {
|
|
88
|
+
resource = "repository"
|
|
89
|
+
action = "pull"
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
# Project-level
|
|
95
|
+
resource "harbor_robot_account" "deploy" {
|
|
96
|
+
name = "ci-deploy"
|
|
97
|
+
description = "Deploy robot for myapp"
|
|
98
|
+
level = "project"
|
|
99
|
+
permissions {
|
|
100
|
+
kind = "project"
|
|
101
|
+
namespace = harbor_project.myapp.name
|
|
102
|
+
access {
|
|
103
|
+
resource = "repository"
|
|
104
|
+
action = "pull"
|
|
105
|
+
}
|
|
106
|
+
access {
|
|
107
|
+
resource = "repository"
|
|
108
|
+
action = "push"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Replication
|
|
115
|
+
|
|
116
|
+
```hcl
|
|
117
|
+
resource "harbor_replication" "backup" {
|
|
118
|
+
name = "replicate-to-dr"
|
|
119
|
+
description = "Replicate myapp to DR site"
|
|
120
|
+
registry_id = harbor_registry.dr.registry_id
|
|
121
|
+
destination = "harbor"
|
|
122
|
+
filters {
|
|
123
|
+
name_filter = "myapp/**"
|
|
124
|
+
resource = "image"
|
|
125
|
+
}
|
|
126
|
+
trigger {
|
|
127
|
+
type = "event_based"
|
|
128
|
+
override = true
|
|
129
|
+
target_events = ["imageUpload", "imageDelete"]
|
|
130
|
+
}
|
|
131
|
+
enabled = true
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Retention Policies
|
|
136
|
+
|
|
137
|
+
```hcl
|
|
138
|
+
resource "harbor_retention_policy" "main" {
|
|
139
|
+
scope = harbor_project.myapp.id
|
|
140
|
+
rule {
|
|
141
|
+
tag_selectors {
|
|
142
|
+
kind = "doublestar"
|
|
143
|
+
decoration = "matches"
|
|
144
|
+
pattern = "**"
|
|
145
|
+
extras = jsonencode({untagged: true})
|
|
146
|
+
}
|
|
147
|
+
scope_selectors {
|
|
148
|
+
kind = "project"
|
|
149
|
+
decoration = "repoMatches"
|
|
150
|
+
pattern = "**"
|
|
151
|
+
}
|
|
152
|
+
action = "retain"
|
|
153
|
+
template = "always"
|
|
154
|
+
params = jsonencode({num_latest_per_artifact: 10})
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### System Configuration
|
|
160
|
+
|
|
161
|
+
```hcl
|
|
162
|
+
resource "harbor_config_system" "cfg" {
|
|
163
|
+
project_creation_restriction = "adminonly"
|
|
164
|
+
robot_token_expiration = 30
|
|
165
|
+
robot_name_prefix = "harbor@"
|
|
166
|
+
storage_per_project = 100
|
|
167
|
+
notification_enable = true
|
|
168
|
+
banner_notification = "Production Harbor - no test data"
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
resource "harbor_config_auth" "auth" {
|
|
172
|
+
auth_mode = "oidc_auth"
|
|
173
|
+
oidc_name = "dex"
|
|
174
|
+
oidc_endpoint = "https://dex.example.com"
|
|
175
|
+
oidc_client_id = "harbor"
|
|
176
|
+
oidc_client_secret = var.oidc_secret
|
|
177
|
+
oidc_scope = "openid,profile,email,groups"
|
|
178
|
+
oidc_verify_cert = true
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
resource "harbor_config_security" "sec" {
|
|
182
|
+
cve_allowlist = ["CVE-2024-1234", "CVE-2025-5678"]
|
|
183
|
+
expires_at = "1893456000"
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Other Resources
|
|
188
|
+
|
|
189
|
+
| Resource | Purpose |
|
|
190
|
+
|----------|---------|
|
|
191
|
+
| `harbor_garbage_collection` | GC schedule, workers, untagged deletion |
|
|
192
|
+
| `harbor_group` | User groups (LDAP/internal/OIDC) |
|
|
193
|
+
| `harbor_immutable_tag_rule` | Immutable tag rules per repo/project |
|
|
194
|
+
| `harbor_interrogation_services` | Default scanner config (Trivy/Clair) |
|
|
195
|
+
| `harbor_label` | Labels (global or project-scoped) |
|
|
196
|
+
| `harbor_preheat_instance` | P2P preheat instances |
|
|
197
|
+
| `harbor_project_member_group` | Group membership with role |
|
|
198
|
+
| `harbor_project_member_user` | User membership with role |
|
|
199
|
+
| `harbor_project_webhook` | Webhook policies |
|
|
200
|
+
| `harbor_purge_audit_log` | Audit log purge schedule |
|
|
201
|
+
| `harbor_tasks` | Scan policy schedule |
|
|
202
|
+
| `harbor_user` | Internal users |
|
|
203
|
+
|
|
204
|
+
## Data Sources (8)
|
|
205
|
+
|
|
206
|
+
| Data Source | Purpose |
|
|
207
|
+
|-------------|---------|
|
|
208
|
+
| `harbor_groups` | Look up groups by name/LDAP DN |
|
|
209
|
+
| `harbor_project` | Look up single project |
|
|
210
|
+
| `harbor_projects` | Look up multiple projects |
|
|
211
|
+
| `harbor_project_member_groups` | List member groups |
|
|
212
|
+
| `harbor_project_member_users` | List member users |
|
|
213
|
+
| `harbor_registry` | Look up registry by name |
|
|
214
|
+
| `harbor_robot_accounts` | List/filter robot accounts |
|
|
215
|
+
| `harbor_users` | Look up users |
|
|
216
|
+
|
|
217
|
+
## Importing Existing Resources
|
|
218
|
+
|
|
219
|
+
```hcl
|
|
220
|
+
terraform import harbor_project.main /projects/1
|
|
221
|
+
terraform import harbor_robot_account.system /robots/123
|
|
222
|
+
terraform import harbor_label.main /labels/1
|
|
223
|
+
terraform import harbor_user.main /users/42
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Common Mistakes
|
|
227
|
+
|
|
228
|
+
- **Robot secret not stored in state** — `secret` is sensitive. Use `random_password` resource and `secret = resource.random_password.robot.result`.
|
|
229
|
+
- **`force_destroy` required for non-empty projects** — Set to `true` to delete projects that still contain repos.
|
|
230
|
+
- **OIDC session_id is experimental** — Will be deprecated when Harbor provides a better auth method. Prefer `bearer_token` or basic auth.
|
|
231
|
+
- **Robot prefix auto-detection** — Requires admin API access. Without it, set `robot_prefix` explicitly in provider config.
|
|
232
|
+
- **`registry_id` vs `id`** — The `harbor_registry` resources expose `.registry_id` (int), not `.id`. Use `.registry_id` when referencing in projects.
|
|
233
|
+
- **v3.12.0 not on registry yet** — Latest on Terraform Registry is v3.11.6. Use `source = "goharbor/harbor"` + version constraint if depending on v3.12.0 features (per-project scanner, proxy cache local-on-not-found).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Higress — 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 (WasmPlugin, Http2Rpc, McpBridge), configure Wasm plugins, AI Gateway, service discovery | `higress-operator` |
|
|
10
|
+
| Deploy, configure, upgrade Higress via Helm | `higress-helm` |
|
|
11
|
+
|
|
12
|
+
## Quick Map
|
|
13
|
+
|
|
14
|
+
| Task | Skill |
|
|
15
|
+
|---|---|
|
|
16
|
+
| "Deploy a WasmPlugin for AI proxy" | `higress-operator` |
|
|
17
|
+
| "Configure Http2Rpc for Dubbo service" | `higress-operator` |
|
|
18
|
+
| "Set up Nacos service discovery with McpBridge" | `higress-operator` |
|
|
19
|
+
| "Deploy Higress on Kubernetes with Helm" | `higress-helm` |
|
|
20
|
+
| "Configure AI Gateway with OpenAI provider" | `higress-operator` |
|
|
21
|
+
| "Set up Gateway API support" | `higress-helm` |
|
|
22
|
+
| "Enable Redis for AI caching" | `higress-helm` |
|
|
23
|
+
| "Configure OIDC/OAuth via Wasm plugin" | `higress-operator` |
|
|
24
|
+
| "Set up Prometheus monitoring" | `higress-helm` |
|
|
25
|
+
| "Create a rate-limiting WasmPlugin" | `higress-operator` |
|
|
26
|
+
| "Connect to ZooKeeper registry" | `higress-operator` |
|
|
27
|
+
| "Enable Wasm plugin server" | `higress-helm` |
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# Higress — Helm Chart
|
|
2
|
+
|
|
3
|
+
**Repo:** `https://higress.io/helm-charts`
|
|
4
|
+
**Charts:** `higress`, `higress-core`, `higress-console`
|
|
5
|
+
**Latest:** 2.2.2
|
|
6
|
+
**Images:** `higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/` (hub)
|
|
7
|
+
|
|
8
|
+
## Quick Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
helm repo add higress.io https://higress.io/helm-charts
|
|
12
|
+
helm repo update
|
|
13
|
+
|
|
14
|
+
helm install higress higress.io/higress \
|
|
15
|
+
-n higress-system --create-namespace
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Minimal Gateway-Only
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
helm install higress higress.io/higress -n higress-system \
|
|
22
|
+
--create-namespace \
|
|
23
|
+
--set global.o11y.enabled=false \
|
|
24
|
+
--set controller.replicas=1 \
|
|
25
|
+
--set gateway.replicas=2
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Charts Overview
|
|
29
|
+
|
|
30
|
+
### `higress` (umbrella)
|
|
31
|
+
|
|
32
|
+
Deploys everything: `higress-core` + `higress-console` + optional o11y stack.
|
|
33
|
+
|
|
34
|
+
| Sub-component | Chart | Enabled by default |
|
|
35
|
+
|--------------|-------|-------------------|
|
|
36
|
+
| Gateway + Controller + Pilot | `higress-core` | ✅ |
|
|
37
|
+
| Web UI Console | `higress-console` | ✅ |
|
|
38
|
+
| Redis (AI caching, rate limiting) | included | ❌ (`global.enableRedis`) |
|
|
39
|
+
| Grafana + Prometheus + Loki | included | ❌ (`global.o11y.enabled`) |
|
|
40
|
+
| Plugin Server | included | ❌ (`global.enablePluginServer`) |
|
|
41
|
+
|
|
42
|
+
### `higress-core`
|
|
43
|
+
|
|
44
|
+
Core engine only: controller, gateway, pilot, optional Redis.
|
|
45
|
+
|
|
46
|
+
### `higress-console`
|
|
47
|
+
|
|
48
|
+
Web UI dashboard only (requires `higress-core` for backend).
|
|
49
|
+
|
|
50
|
+
## Global Configuration
|
|
51
|
+
|
|
52
|
+
| Parameter | Default | Description |
|
|
53
|
+
|-----------|---------|-------------|
|
|
54
|
+
| `global.hub` | `higress-registry.cn-hangzhou.cr.aliyuncs.com` | Image registry |
|
|
55
|
+
| `global.imagePullPolicy` | `""` | Image pull policy |
|
|
56
|
+
| `global.imagePullSecrets` | `[]` | Image pull secrets |
|
|
57
|
+
| `global.ingressClass` | `higress` | IngressClass to watch |
|
|
58
|
+
| `global.watchNamespace` | `""` | Restrict to single namespace |
|
|
59
|
+
| `global.enableH3` | `false` | Enable HTTP/3 (QUIC) |
|
|
60
|
+
| `global.enableIPv6` | `false` | Enable IPv6 |
|
|
61
|
+
| `global.enableProxyProtocol` | `false` | Proxy protocol |
|
|
62
|
+
| `global.enableRedis` | `false` | Deploy Redis for AI caching |
|
|
63
|
+
| `global.enablePluginServer` | `false` | Deploy Wasm plugin server |
|
|
64
|
+
| `global.enableIstioAPI` | `true` | Watch Istio CRDs |
|
|
65
|
+
| `global.enableGatewayAPI` | `true` | Watch Gateway API CRDs |
|
|
66
|
+
| `global.enableInferenceExtension` | `false` | Gateway API Inference Extension |
|
|
67
|
+
| `global.enableStatus` | `true` | Update Ingress status field |
|
|
68
|
+
| `global.local` | `false` | Local/kind cluster mode |
|
|
69
|
+
| `global.o11y.enabled` | `false` | Deploy observability stack |
|
|
70
|
+
| `global.logging.level` | `default:info` | Log level |
|
|
71
|
+
| `global.defaultResources` | `{cpu: 10m}` | Default resource requests |
|
|
72
|
+
| `global.priorityClassName` | `""` | Priority class |
|
|
73
|
+
| `global.multiCluster.enabled` | `true` | Multi-cluster support |
|
|
74
|
+
| `global.multiCluster.clusterName` | `""` | Cluster name |
|
|
75
|
+
|
|
76
|
+
## Gateway
|
|
77
|
+
|
|
78
|
+
| Parameter | Default | Description |
|
|
79
|
+
|-----------|---------|-------------|
|
|
80
|
+
| `gateway.name` | `higress-gateway` | Gateway deployment name |
|
|
81
|
+
| `gateway.replicas` | `2` | Pod count |
|
|
82
|
+
| `gateway.kind` | `Deployment` | `Deployment` or `DaemonSet` |
|
|
83
|
+
| `gateway.image` | `gateway` | Image name (hub/gateway) |
|
|
84
|
+
| `gateway.tag` | `""` (chart appVersion) | Image tag |
|
|
85
|
+
| `gateway.httpPort` | `80` | HTTP port |
|
|
86
|
+
| `gateway.httpsPort` | `443` | HTTPS port |
|
|
87
|
+
| `gateway.hostNetwork` | `false` | Host networking |
|
|
88
|
+
| `gateway.service.type` | `LoadBalancer` | Service type (`None` disables) |
|
|
89
|
+
| `gateway.service.loadBalancerIP` | `""` | Static LB IP |
|
|
90
|
+
| `gateway.service.loadBalancerClass` | `""` | LB class |
|
|
91
|
+
| `gateway.service.loadBalancerSourceRanges` | `[]` | LB source ranges |
|
|
92
|
+
| `gateway.service.externalTrafficPolicy` | `""` | External traffic policy |
|
|
93
|
+
| `gateway.autoscaling.enabled` | `false` | HPA |
|
|
94
|
+
| `gateway.autoscaling.minReplicas` | `1` | HPA min |
|
|
95
|
+
| `gateway.autoscaling.maxReplicas` | `5` | HPA max |
|
|
96
|
+
| `gateway.resources` | `{cpu: 2, mem: 2Gi}` | Container resources |
|
|
97
|
+
| `gateway.metrics.enabled` | `false` | PodMonitor/VMPodScrape |
|
|
98
|
+
| `gateway.metrics.provider` | `monitoring.coreos.com` | CRD provider |
|
|
99
|
+
| `gateway.metrics.podMonitorSelector` | `{release: kube-prome}` | PodMonitor selector |
|
|
100
|
+
| `gateway.rollingMaxSurge` | `100%` | Rolling update max surge |
|
|
101
|
+
| `gateway.rollingMaxUnavailable` | `25%` | Rolling update max unavailable |
|
|
102
|
+
| `gateway.nodeSelector` | `{}` | Node selector |
|
|
103
|
+
| `gateway.tolerations` | `[]` | Tolerations |
|
|
104
|
+
| `gateway.affinity` | `{}` | Affinity |
|
|
105
|
+
| `gateway.topologySpreadConstraints` | `[]` | Topology spread |
|
|
106
|
+
| `gateway.automaticHttps.enabled` | `true` | Let's Encrypt auto HTTPS |
|
|
107
|
+
| `gateway.automaticHttps.email` | `""` | Let's Encrypt email |
|
|
108
|
+
|
|
109
|
+
## Controller
|
|
110
|
+
|
|
111
|
+
| Parameter | Default | Description |
|
|
112
|
+
|-----------|---------|-------------|
|
|
113
|
+
| `controller.name` | `higress-controller` | Controller deployment name |
|
|
114
|
+
| `controller.replicas` | `1` | Pod count |
|
|
115
|
+
| `controller.image` | `higress` | Image name (hub/higress) |
|
|
116
|
+
| `controller.tag` | `""` | Image tag |
|
|
117
|
+
| `controller.service.type` | `ClusterIP` | Service type |
|
|
118
|
+
| `controller.resources` | `{cpu: 500m/1, mem: 2Gi}` | Resource requests/limits |
|
|
119
|
+
| `controller.autoscaling.enabled` | `false` | HPA |
|
|
120
|
+
| `controller.autoscaling.minReplicas` | `1` | HPA min |
|
|
121
|
+
| `controller.autoscaling.maxReplicas` | `5` | HPA max |
|
|
122
|
+
| `controller.automaticHttps.enabled` | `true` | Auto HTTPS |
|
|
123
|
+
| `controller.automaticHttps.email` | `""` | Let's Encrypt email |
|
|
124
|
+
| `controller.nodeSelector` | `{}` | Node selector |
|
|
125
|
+
| `controller.tolerations` | `[]` | Tolerations |
|
|
126
|
+
| `controller.affinity` | `{}` | Affinity |
|
|
127
|
+
|
|
128
|
+
## Pilot (Istiod)
|
|
129
|
+
|
|
130
|
+
| Parameter | Default | Description |
|
|
131
|
+
|-----------|---------|-------------|
|
|
132
|
+
| `pilot.image` | `pilot` | Image name (hub/pilot) |
|
|
133
|
+
| `pilot.tag` | `""` | Image tag |
|
|
134
|
+
| `pilot.traceSampling` | `1.0` | Trace sampling rate |
|
|
135
|
+
| `pilot.resources` | `{cpu: 500m, mem: 2Gi}` | Resources |
|
|
136
|
+
| `pilot.env.PILOT_ENABLE_METADATA_EXCHANGE` | `false` | Disable metadata exchange |
|
|
137
|
+
| `pilot.keepaliveMaxServerConnectionAge` | `30m` | xDS max connection age |
|
|
138
|
+
|
|
139
|
+
## Redis (Optional)
|
|
140
|
+
|
|
141
|
+
| Parameter | Default | Description |
|
|
142
|
+
|-----------|---------|-------------|
|
|
143
|
+
| `redis.redis.name` | `redis-stack-server` | Redis deployment |
|
|
144
|
+
| `redis.redis.image` | `redis-stack-server` | Image name |
|
|
145
|
+
| `redis.redis.tag` | `7.4.0-v3` | Image tag |
|
|
146
|
+
| `redis.redis.replicas` | `1` | Replicas |
|
|
147
|
+
| `redis.redis.password` | `""` | Password (empty = none) |
|
|
148
|
+
| `redis.redis.service.port` | `6379` | Service port |
|
|
149
|
+
| `redis.redis.persistence.enabled` | `false` | Enable PVC |
|
|
150
|
+
| `redis.redis.persistence.size` | `1Gi` | PVC size |
|
|
151
|
+
|
|
152
|
+
## Plugin Server (Optional)
|
|
153
|
+
|
|
154
|
+
| Parameter | Default | Description |
|
|
155
|
+
|-----------|---------|-------------|
|
|
156
|
+
| `pluginServer.name` | `higress-plugin-server` | Plugin server name |
|
|
157
|
+
| `pluginServer.replicas` | `2` | Pod count |
|
|
158
|
+
| `pluginServer.image` | `plugin-server` | Image name |
|
|
159
|
+
| `pluginServer.tag` | `""` | Image tag |
|
|
160
|
+
| `pluginServer.service.port` | `80` | Service port |
|
|
161
|
+
| `pluginServer.resources` | `{cpu: 200m/500m, mem: 128Mi/256Mi}` | Resources |
|
|
162
|
+
|
|
163
|
+
## Console (UI)
|
|
164
|
+
|
|
165
|
+
| Parameter | Default | Description |
|
|
166
|
+
|-----------|---------|-------------|
|
|
167
|
+
| `image.repository` | `higress/console` | Console image |
|
|
168
|
+
| `image.tag` | `""` | Image tag |
|
|
169
|
+
| `replicaCount` | `1` | Replicas |
|
|
170
|
+
| `service.port` | `8080` | Service port |
|
|
171
|
+
| `ingress.enabled` | `false` | Expose via Ingress |
|
|
172
|
+
| `ingress.domain` | `console.higress.io` | Console domain |
|
|
173
|
+
| `ingress.tlsSecretName` | `""` | TLS secret |
|
|
174
|
+
| `admin.username` | `admin` | Admin user |
|
|
175
|
+
| `admin.password` | `""` | Admin password |
|
|
176
|
+
| `chat.enabled` | `false` | AI chat in console |
|
|
177
|
+
| `chat.endpoint` | `""` | Chat API endpoint |
|
|
178
|
+
|
|
179
|
+
## O11y (Observability)
|
|
180
|
+
|
|
181
|
+
| Parameter | Default | Description |
|
|
182
|
+
|-----------|---------|-------------|
|
|
183
|
+
| `global.o11y.enabled` | `false` | Enable all o11y |
|
|
184
|
+
| `global.o11y.grafana.replicas` | `1` | Grafana replicas |
|
|
185
|
+
| `global.o11y.grafana.storage` | `1Gi` | Grafana PVC |
|
|
186
|
+
| `global.o11y.prometheus.replicas` | `1` | Prometheus replicas |
|
|
187
|
+
| `global.o11y.prometheus.storage` | `1Gi` | Prometheus PVC |
|
|
188
|
+
| `global.o11y.loki.replicas` | `1` | Loki replicas |
|
|
189
|
+
| `global.o11y.loki.storage` | `1Gi` | Loki PVC |
|
|
190
|
+
|
|
191
|
+
## Production Values Example
|
|
192
|
+
|
|
193
|
+
```yaml
|
|
194
|
+
global:
|
|
195
|
+
ingressClass: higress
|
|
196
|
+
enableGatewayAPI: true
|
|
197
|
+
enableIstioAPI: true
|
|
198
|
+
enableRedis: true
|
|
199
|
+
enablePluginServer: true
|
|
200
|
+
o11y:
|
|
201
|
+
enabled: true
|
|
202
|
+
priorityClassName: system-cluster-critical
|
|
203
|
+
|
|
204
|
+
gateway:
|
|
205
|
+
replicas: 3
|
|
206
|
+
kind: Deployment
|
|
207
|
+
service:
|
|
208
|
+
type: LoadBalancer
|
|
209
|
+
externalTrafficPolicy: Local
|
|
210
|
+
resources:
|
|
211
|
+
requests:
|
|
212
|
+
cpu: 2
|
|
213
|
+
memory: 2Gi
|
|
214
|
+
limits:
|
|
215
|
+
cpu: 4
|
|
216
|
+
memory: 4Gi
|
|
217
|
+
autoscaling:
|
|
218
|
+
enabled: true
|
|
219
|
+
minReplicas: 3
|
|
220
|
+
maxReplicas: 10
|
|
221
|
+
targetCPUUtilizationPercentage: 80
|
|
222
|
+
metrics:
|
|
223
|
+
enabled: true
|
|
224
|
+
provider: monitoring.coreos.com
|
|
225
|
+
affinity:
|
|
226
|
+
podAntiAffinity:
|
|
227
|
+
requiredDuringSchedulingIgnoredDuringExecution:
|
|
228
|
+
- labelSelector:
|
|
229
|
+
matchExpressions:
|
|
230
|
+
- key: app
|
|
231
|
+
operator: In
|
|
232
|
+
values:
|
|
233
|
+
- higress-gateway
|
|
234
|
+
topologyKey: kubernetes.io/hostname
|
|
235
|
+
|
|
236
|
+
controller:
|
|
237
|
+
replicas: 2
|
|
238
|
+
resources:
|
|
239
|
+
requests:
|
|
240
|
+
cpu: 500m
|
|
241
|
+
memory: 1Gi
|
|
242
|
+
limits:
|
|
243
|
+
cpu: 2
|
|
244
|
+
memory: 4Gi
|
|
245
|
+
autoscaling:
|
|
246
|
+
enabled: true
|
|
247
|
+
minReplicas: 2
|
|
248
|
+
maxReplicas: 5
|
|
249
|
+
|
|
250
|
+
redis:
|
|
251
|
+
redis:
|
|
252
|
+
persistence:
|
|
253
|
+
enabled: true
|
|
254
|
+
size: 10Gi
|
|
255
|
+
storageClass: ssd
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## IngressClass Configuration
|
|
259
|
+
|
|
260
|
+
```yaml
|
|
261
|
+
global:
|
|
262
|
+
ingressClass: higress # default
|
|
263
|
+
|
|
264
|
+
# Special: watch nginx Ingress resources (migration mode)
|
|
265
|
+
# ingressClass: nginx
|
|
266
|
+
# - watches both "nginx" class AND no-class Ingress resources
|
|
267
|
+
# - enables smooth migration from ingress-nginx
|
|
268
|
+
|
|
269
|
+
# Special: watch all Ingress resources
|
|
270
|
+
# ingressClass: ""
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Gateway API Integration
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
helm install higress higress.io/higress -n higress-system \
|
|
277
|
+
--set global.enableGatewayAPI=true
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Requires Gateway API CRDs installed:
|
|
281
|
+
```bash
|
|
282
|
+
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.4.0/standard-install.yaml
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## AI Gateway + Redis
|
|
286
|
+
|
|
287
|
+
```bash
|
|
288
|
+
helm install higress higress.io/higress -n higress-system \
|
|
289
|
+
--set global.enableRedis=true \
|
|
290
|
+
--set global.enablePluginServer=true
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Upgrading
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
helm repo update
|
|
297
|
+
helm upgrade higress higress.io/higress -n higress-system \
|
|
298
|
+
--values values.yaml \
|
|
299
|
+
--version 2.2.2
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Uninstalling
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
helm uninstall higress -n higress-system
|
|
306
|
+
kubectl delete namespace higress-system
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**Note:** CRDs persist after uninstall. Remove manually:
|
|
310
|
+
```bash
|
|
311
|
+
kubectl delete crd wasmplugins.extensions.higress.io
|
|
312
|
+
kubectl delete crd http2rpcs.networking.higress.io
|
|
313
|
+
kubectl delete crd mcpbridges.networking.higress.io
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Common Mistakes
|
|
317
|
+
|
|
318
|
+
- **Hub region** — Default hub is in China (`cn-hangzhou`). Use `us-west-1.cr.aliyuncs.com` for NA, `ap-southeast-7.cr.aliyuncs.com` for SEA. Set `global.hub` before install.
|
|
319
|
+
- **Gateway API CRDs missing** — Setting `global.enableGatewayAPI=true` without installing Gateway API CRDs causes controller errors.
|
|
320
|
+
- **IngressClass == nginx** — Setting `ingressClass: nginx` makes Higress watch nginx-class Ingresses. Remove or change to `higress` after migration.
|
|
321
|
+
- **Redis for AI features** — AI caching, token rate limiting, and quota require `global.enableRedis=true`. Without Redis, these plugins fail.
|
|
322
|
+
- **Plugin Server for OCI plugins** — If using `url: oci://...` in WasmPlugin, ensure `global.enablePluginServer=true` or have direct OCI registry access.
|
|
323
|
+
- **Standalone console ingress** — `higress-console` needs `ingress.enabled=true` and a domain for external access. Default is ClusterIP only.
|
|
324
|
+
- **Gateway metrics** — `gateway.metrics.enabled=true` creates PodMonitor. Requires prometheus-operator or VictoriaMetrics operator CRDs.
|
|
325
|
+
- **Controller readiness** — Controller uses `/ready` on port 8888. Ensure network policies allow this.
|
|
326
|
+
- **HostNetwork gateway** — `gateway.hostNetwork=true` binds host ports 80/443. Requires host port availability and potential security implications.
|
|
327
|
+
- **autoscaling/v2 API** — `global.autoscalingv2API` (default: true) uses `autoscaling/v2`. If your cluster is older, set to false.
|
|
328
|
+
- **alpn h2** — `global.disableAlpnH2: false` (default) enables HTTP/2 ALPN. Set true if clients don't support HTTP/2.
|