rebrand: strip "traefik" branding from the ingress controller

Removes all "traefik" branding/paths/env/comments from the shipping
surface while keeping load-bearing config schema and external deps intact.

Paths / binary:
- cmd/traefik/ -> cmd/ingress/ (traefik.go->ingress.go, etc.); merged out
  the empty cmd/ingress/generate.go stub. Build refs updated in Dockerfile,
  Makefile, .goreleaser.yml.tmpl, script/crossbinary-default.sh, README.
- contrib/systemd/traefik.service -> ingress.service (Hanzo Ingress unit,
  /etc/ingress paths, hanzo-ingress binary).
- contrib/grafana/traefik*.json -> ingress*.json; metric queries
  traefik_* -> ingress_* (now match the engine's ingress_ prefix) + titles.
- script/gcg/traefik-*.toml -> ingress-*.toml; Owner/Repo -> hanzoai/ingress.

Code/config branding (comments + non-schema strings):
- doc.go, mount.go, client/router.go, zap_backend.go, forward_backend.go,
  register.go: "Traefik" -> "the ingress"/"Hanzo Ingress"; corrected the
  annotation example to ingress.kubernetes.io/.
- ingress.sample.{toml,yml}: header + log + entryPoint example.
- pkg/config/dynamic/fixtures/sample.toml comment.
- pkg/redactor/testdata example+expected: /etc/traefik/traefik.toml ->
  /etc/ingress/ingress.toml, TraefikLogsFile -> IngressLogsFile (both files
  kept identical so the redactor golden test stays green).
- .golangci.yml importas aliases traefik* -> ingress* and the stale
  crd/traefikio path -> crd/hanzoai; unused-var exclude ingressVersion.
- .dockerignore / .gitignore: drop stale /traefik artifacts.
- script/code-gen.sh: PROJECT_MODULE -> github.com/hanzoai/ingress,
  v1alpha1 path -> crd/hanzoai, CRD output -> hanzo.ai_*.yaml /
  01-ingress-crd.yml.
- script/deploy.sh: drop the upstream traefik-library-image push.
- Removed dead, disabled upstream docs-publish workflow
  (.github/workflows/documentation.yaml, pushed to traefik/doc).
- LLM.md: rewrote rebrand notes; documented load-bearing "traefik" that
  stays (external imports, hash-bound realm, upstream issue URL, license
  attribution) and vendored upstream docs/webui/changelog as out of scope.

Load-bearing "traefik" intentionally KEPT (not branding):
- external Go modules github.com/traefik/{oxy,yaegi,grpc-web};
- digest_auth_test.go htdigest realm "traefik" (invalidates the hashes);
- consul_test.go upstream issue URL #8092 (provenance citation);
- LICENSE.md + boilerplate.go.tmpl Containous/Traefik Labs copyright
  (MIT attribution; Hanzo AI appended);
- integration/ test fixtures (traefik/whoami images, rawdata-*.json
  golden entrypoint names, nomad traefik.* tags) — test-only, semantics-
  sensitive; out of scope for this pass.

Verify: `go build $(go list ./... | grep -v /webui)` passes; redactor /
config/dynamic / nomad / server/service tests pass. The webui go:embed
failure and the kubernetes/crd test (ingress.k8s.io group mismatch) are
pre-existing on main, not caused by this rebrand.
This commit is contained in:
zooqueen
2026-06-21 15:55:45 -07:00
parent 5e7350aafd
commit 1d875dd71c
40 changed files with 167 additions and 224 deletions
-1
View File
@@ -1,5 +1,4 @@
dist/
!dist/**/traefik
!dist/**/hanzo-ingress
site/
vendor/
-56
View File
@@ -1,56 +0,0 @@
name: Build and Publish Documentation
on:
workflow_dispatch: {}
push:
branches:
- main
- v*
env:
STRUCTOR_VERSION: v1.13.2
MIXTUS_VERSION: v0.4.1
jobs:
docs:
name: Doc Process
runs-on: ubuntu-latest
timeout-minutes: 15
# Disabled: requires upstream-specific tooling (structor, mixtus, seo-doc)
# and GH_TOKEN_REPO secret. Re-enable when Hanzo docs pipeline is set up.
if: false
steps:
- name: Check out code
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
fetch-depth: 0
- name: Login to DockerHub
uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Install Structor ${{ env.STRUCTOR_VERSION }}
run: curl -sSfL https://raw.githubusercontent.com/traefik/structor/master/godownloader.sh | sh -s -- -b $HOME/bin ${STRUCTOR_VERSION}
- name: Install Seo-doc
run: curl -sSfL https://raw.githubusercontent.com/traefik/seo-doc/master/godownloader.sh | sh -s -- -b "${HOME}/bin"
- name: Install Mixtus ${{ env.MIXTUS_VERSION }}
run: curl -sSfL https://raw.githubusercontent.com/traefik/mixtus/master/godownloader.sh | sh -s -- -b $HOME/bin ${MIXTUS_VERSION}
- name: Build documentation
run: |
STRUCTOR_LATEST_TAG=$(curl -s https://api.github.com/repos/traefik/traefik/releases/latest | jq -r '.tag_name')
$HOME/bin/structor -o traefik -r traefik --dockerfile-url="https://raw.githubusercontent.com/traefik/traefik/v1.7/docs.Dockerfile" --menu.js-url="https://raw.githubusercontent.com/traefik/structor/master/traefik-menu.js.gotmpl" --rqts-url="https://raw.githubusercontent.com/traefik/structor/master/requirements-override.txt" --force-edit-url --exp-branch=master --debug
- name: Apply seo
run: $HOME/bin/seo -path=./site -product=traefik
- name: Publish documentation
run: $HOME/bin/mixtus --dst-doc-path="./traefik" --dst-owner=traefik --dst-repo-name=doc --git-user-email="[email protected]" --git-user-name=traefiker --src-doc-path="./site" --src-owner=traefik --src-repo-name=traefik
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN_REPO }}
+4 -4
View File
@@ -8,16 +8,16 @@
/site/
/docs/site/
/autogen/
/traefik
/traefik.toml
/traefik.yml
/hanzo-ingress
/ingress.toml
/ingress.yml
*.log
*.exe
cover.out
vendor/
plugins-storage/
plugins-local/
traefik_changelog.md
ingress_changelog.md
integration/tailscale.secret
integration/gateway-api-conformance-reports/**/experimental-dev-default-report.yaml
hanzo-ingress
+8 -8
View File
@@ -146,17 +146,17 @@ linters:
- pkg: sigs.k8s.io/gateway-api/apis/v1alpha2
alias: gatev1alpha2
# Traefik Kubernetes rewrites:
- pkg: github.com/hanzoai/ingress/v3/pkg/provider/kubernetes/crd/traefikio/v1alpha1
alias: traefikv1alpha1
# Ingress Kubernetes rewrites:
- pkg: github.com/hanzoai/ingress/v3/pkg/provider/kubernetes/crd/hanzoai/v1alpha1
alias: ingressv1alpha1
- pkg: github.com/hanzoai/ingress/v3/pkg/provider/kubernetes/crd/generated/clientset/versioned
alias: traefikclientset
alias: ingressclientset
- pkg: github.com/hanzoai/ingress/v3/pkg/provider/kubernetes/crd/generated/informers/externalversions
alias: traefikinformers
alias: ingressinformers
- pkg: github.com/hanzoai/ingress/v3/pkg/provider/kubernetes/crd/generated/clientset/versioned/scheme
alias: traefikscheme
alias: ingressscheme
- pkg: github.com/hanzoai/ingress/v3/pkg/provider/kubernetes/crd/generated/clientset/versioned/fake
alias: traefikcrdfake
alias: ingresscrdfake
misspell:
locale: US
revive:
@@ -339,7 +339,7 @@ linters:
- path: pkg/proxy/httputil/bufferpool.go
text: 'SA6002: argument should be pointer-like to avoid allocations'
- path: integration/integration_test.go
text: 'var (gatewayAPIConformanceRunTest|traefikVersion) is unused'
text: 'var (gatewayAPIConformanceRunTest|ingressVersion) is unused'
- path: pkg/server/router/router.go
text: 'appendAssign: append result not assigned to the same slice'
linters:
+1 -1
View File
@@ -10,7 +10,7 @@ dist: "./dist/[[ .GOOS ]]"
builds:
- binary: hanzo-ingress
main: ./cmd/traefik/
main: ./cmd/ingress/
env:
- CGO_ENABLED=0
ldflags:
+1 -1
View File
@@ -46,7 +46,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
-X github.com/hanzoai/ingress/v3/pkg/version.Version=${VERSION} \
-X github.com/hanzoai/ingress/v3/pkg/version.Codename=hanzo \
-X github.com/hanzoai/ingress/v3/pkg/version.BuildDate=$(date -u '+%Y-%m-%d_%I:%M:%S%p')" \
-o /hanzo-ingress ./cmd/traefik
-o /hanzo-ingress ./cmd/ingress
# ---- Stage 3: Runtime ----
FROM alpine:3.23
+35 -12
View File
@@ -38,26 +38,49 @@ ingress/
- `Makefile` -- Build automation
- `Dockerfile` -- Container build
## Rebrand Notes (v3.8.0)
## Rebrand Notes
### External library constraints
- `github.com/traefik/paerser` defines `DefaultRootName = "traefik"` and `DefaultNamePrefix = "TRAEFIK_"`.
Config file flags (`-traefik.configfile`), env var prefix (`TRAEFIK_*`), and parser root name
**must** stay as `traefik` to match the external library. These are NOT candidates for rebrand.
- `github.com/traefik/yaegi`, `github.com/traefik/grpc-web`, `github.com/traefik/oxy` are external
imports -- never touch their paths.
The engine is fully de-traefik'd: the parser dependency was forked to
`github.com/hanzoai/ingress-parser` (`DefaultRootName = "ingress"`,
`DefaultNamePrefix = "INGRESS_"`), the config base paths are
`/etc/ingress/ingress`, the Prometheus metric prefix is `ingress_`, and
the CRD apiGroup is `hanzo.ai`. The standalone binary is built from
`cmd/ingress` (was `cmd/traefik`) and ships as `hanzo-ingress`.
### Hash-bound test data
- `pkg/middlewares/auth/digest_auth_test.go` contains htdigest hashes computed as
`md5(user:realm:password)` where realm=`"traefik"`. Changing the realm invalidates the hash.
These 10 references must stay.
### Load-bearing "traefik" that intentionally STAYS
These are the only remaining `traefik` strings outside the vendored
upstream docs/changelog. They are NOT branding and must not be renamed:
- **External Go imports** — `github.com/traefik/yaegi`,
`github.com/traefik/grpc-web`, `github.com/traefik/oxy` are real
third-party modules (in `go.mod`/`go.sum` and the import lines that
use them). Renaming breaks the build.
- **Hash-bound test data** — `pkg/middlewares/auth/digest_auth_test.go`
htdigest hashes are `md5(user:realm:password)` with realm `"traefik"`.
Changing the realm invalidates the precomputed hashes (~10 refs).
- **Upstream issue citation** — `integration/consul_test.go` links
`https://github.com/traefik/traefik/issues/8092` as the provenance of
a regression test. The issue only exists at that URL.
### Vendored upstream content (out of scope by nature)
`docs/content/**`, `CHANGELOG.md`, `webui/**` (the dashboard SPA), and
the `traefik.io_*.yaml` CRD reference dumps under `docs/` are imported
upstream Traefik material kept for reference. They carry the bulk of the
remaining `traefik` occurrences and do not ship in the runtime binary or
image. Rebrand them only as part of a dedicated docs pass.
### Wire protocol changes (intentional)
- `X-Traefik-Fast-Proxy` header renamed to `X-Ingress-Fast-Proxy`
- `X-Traefik-Router` header renamed to `X-Ingress-Router`
- Prometheus/InfluxDB metric prefix: `traefik.*` renamed to `ingress.*`
(the bundled Grafana dashboards in `contrib/grafana/ingress*.json`
query the `ingress_*` metric names accordingly)
### Pre-existing test failures (not caused by rebrand)
### Pre-existing build/test issues (not caused by rebrand)
- `webui/embed.go` `//go:embed static` fails until the dashboard assets
are built (`make generate-webui`); `go build ./...` therefore needs the
webui built first, or build the subset
`go build $(go list ./... | grep -v /webui)`.
- `pkg/muxer/http/Test_addRoute/Host_IPv6`: Go 1.26 broke IPv6 URL parsing
- `pkg/middlewares/ratelimiter`: Timing-sensitive tests, flaky
+2 -2
View File
@@ -45,7 +45,7 @@ webui/static/index.html:
# Run only the production build, NOT `build:prod` (which chains
# test+tsc+lint). Tests live in .github/workflows/test-unit.yaml;
# coupling them to the image build means every npm flake takes
# the image build with it. Decoupled per upstream Traefik practice.
# the image build with it. Decoupled image build / test pipeline.
docker run --rm -v "$(PWD)/webui/static":'/src/webui/static' hanzo-ingress-webui pnpm build
docker run --rm -v "$(PWD)/webui/static":'/src/webui/static' hanzo-ingress-webui chown -R $(shell id -u):$(shell id -g) ./static
printf 'For more information see `webui/readme.md`' > webui/static/DONT-EDIT-FILES-IN-THIS-DIRECTORY.md
@@ -67,7 +67,7 @@ binary: generate-webui dist
-X github.com/hanzoai/ingress/v3/pkg/version.Version=$(VERSION) \
-X github.com/hanzoai/ingress/v3/pkg/version.Codename=$(CODENAME) \
-X github.com/hanzoai/ingress/v3/pkg/version.BuildDate=$(DATE)" \
-installsuffix nocgo -o "./dist/${GOOS}/${GOARCH}/$(BIN_NAME)" ./cmd/traefik
-installsuffix nocgo -o "./dist/${GOOS}/${GOARCH}/$(BIN_NAME)" ./cmd/ingress
binary-linux-arm64: export GOOS := linux
binary-linux-arm64: export GOARCH := arm64
+1 -1
View File
@@ -16,7 +16,7 @@ framework, which routes every JSON path through stdlib
flag; manual builds should do the same:
```bash
GOEXPERIMENT=jsonv2 CGO_ENABLED=0 go build ./cmd/traefik
GOEXPERIMENT=jsonv2 CGO_ENABLED=0 go build ./cmd/ingress
```
Without the experiment the binary still compiles and runs — zip falls
+1 -1
View File
@@ -13,7 +13,7 @@ import "context"
// management API every operator + admin tool uses.
type Router interface {
// Kind reports the backend identifier
// (hanzo-ingress | traefik | envoy | nginx).
// (hanzo-ingress | envoy | nginx).
Kind() string
// UpsertVHost creates or replaces a virtual host. Idempotent.
-5
View File
@@ -1,5 +0,0 @@
//go:generate go run ./internal/
package main
func main() {}
@@ -64,7 +64,7 @@
}
]
},
"description": "Official dashboard for Traefik on Kubernetes",
"description": "Official dashboard for Hanzo Ingress on Kubernetes",
"editable": false,
"fiscalYearStartMonth": 0,
"gnetId": 17347,
@@ -143,13 +143,13 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "count(traefik_config_reloads_total)",
"expr": "count(ingress_config_reloads_total)",
"legendFormat": "__auto",
"range": true,
"refId": "A"
}
],
"title": "Traefik Instances",
"title": "Ingress Instances",
"type": "stat"
},
{
@@ -242,7 +242,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(rate(traefik_entrypoint_requests_total{entrypoint=~\"$entrypoint\"}[$interval])) by (entrypoint)",
"expr": "sum(rate(ingress_entrypoint_requests_total{entrypoint=~\"$entrypoint\"}[$interval])) by (entrypoint)",
"legendFormat": "{{entrypoint}}",
"range": true,
"refId": "A"
@@ -340,7 +340,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "(sum(rate(traefik_entrypoint_request_duration_seconds_bucket{le=\"0.3\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method) + \n sum(rate(traefik_entrypoint_request_duration_seconds_bucket{le=\"1.2\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)) / 2 / \n sum(rate(traefik_entrypoint_request_duration_seconds_count{code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)\n",
"expr": "(sum(rate(ingress_entrypoint_request_duration_seconds_bucket{le=\"0.3\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method) + \n sum(rate(ingress_entrypoint_request_duration_seconds_bucket{le=\"1.2\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)) / 2 / \n sum(rate(ingress_entrypoint_request_duration_seconds_count{code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)\n",
"legendFormat": "{{method}}",
"range": true,
"refId": "A"
@@ -408,7 +408,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(rate(traefik_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) by (method, code)",
"expr": "sum(rate(ingress_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) by (method, code)",
"legendFormat": "{{method}}[{{code}}]",
"range": true,
"refId": "A"
@@ -507,7 +507,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n traefik_service_request_duration_seconds_sum{service=~\"$service.*\",protocol=\"http\"} / \n traefik_service_request_duration_seconds_count{service=~\"$service.*\",protocol=\"http\"},\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)\n\n",
"expr": "topk(15,\n label_replace(\n ingress_service_request_duration_seconds_sum{service=~\"$service.*\",protocol=\"http\"} / \n ingress_service_request_duration_seconds_count{service=~\"$service.*\",protocol=\"http\"},\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)\n\n",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -606,7 +606,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"legendFormat": "[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -711,7 +711,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(traefik_service_request_duration_seconds_bucket{le=\"1.2\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(traefik_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\"\n)",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(ingress_service_request_duration_seconds_bucket{le=\"1.2\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(ingress_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\"\n)",
"legendFormat": "{{service}}",
"range": true,
"refId": "A"
@@ -806,7 +806,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(traefik_service_request_duration_seconds_bucket{le=\"0.3\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(traefik_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\"\n)",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(ingress_service_request_duration_seconds_bucket{le=\"0.3\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(ingress_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\"\n)",
"legendFormat": "{{service}}",
"range": true,
"refId": "A"
@@ -922,7 +922,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",code=~\"2..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",code=~\"2..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -1022,7 +1022,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",code=~\"5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",code=~\"5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -1122,7 +1122,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",code!~\"2..|5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",code!~\"2..|5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -1222,7 +1222,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(traefik_service_requests_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(ingress_service_requests_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"legendFormat": "{{method}} on {{service}}",
"range": true,
"refId": "A"
@@ -1322,7 +1322,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(traefik_service_responses_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(ingress_service_responses_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^@]+)@.*\")\n)",
"legendFormat": "{{method}} on {{service}}",
"range": true,
"refId": "A"
@@ -1421,7 +1421,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(traefik_open_connections{entrypoint=~\"$entrypoint\"}) by (entrypoint)\n",
"expr": "sum(ingress_open_connections{entrypoint=~\"$entrypoint\"}) by (entrypoint)\n",
"legendFormat": "{{entrypoint}}",
"range": true,
"refId": "A"
@@ -1461,14 +1461,14 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"definition": "label_values(traefik_open_connections, entrypoint)",
"definition": "label_values(ingress_open_connections, entrypoint)",
"hide": 0,
"includeAll": true,
"multi": false,
"name": "entrypoint",
"options": [],
"query": {
"query": "label_values(traefik_open_connections, entrypoint)",
"query": "label_values(ingress_open_connections, entrypoint)",
"refId": "StandardVariableQuery"
},
"refresh": 1,
@@ -1546,14 +1546,14 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"definition": "label_values(traefik_service_requests_total, service)",
"definition": "label_values(ingress_service_requests_total, service)",
"hide": 0,
"includeAll": true,
"multi": false,
"name": "service",
"options": [],
"query": {
"query": "label_values(traefik_service_requests_total, service)",
"query": "label_values(ingress_service_requests_total, service)",
"refId": "StandardVariableQuery"
},
"refresh": 2,
@@ -1570,7 +1570,7 @@
},
"timepicker": {},
"timezone": "",
"title": "Traefik Official Kubernetes Dashboard",
"title": "Hanzo Ingress Official Kubernetes Dashboard",
"uid": "n5bu_kv4k",
"version": 7,
"weekStart": ""
@@ -64,7 +64,7 @@
}
]
},
"description": "Official dashboard for Standalone Traefik",
"description": "Official dashboard for Hanzo Ingress",
"editable": false,
"fiscalYearStartMonth": 0,
"gnetId": 17346,
@@ -143,13 +143,13 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "count(traefik_config_reloads_total)",
"expr": "count(ingress_config_reloads_total)",
"legendFormat": "__auto",
"range": true,
"refId": "A"
}
],
"title": "Traefik Instances",
"title": "Ingress Instances",
"type": "stat"
},
{
@@ -242,7 +242,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(rate(traefik_entrypoint_requests_total{entrypoint=~\"$entrypoint\"}[$interval])) by (entrypoint)",
"expr": "sum(rate(ingress_entrypoint_requests_total{entrypoint=~\"$entrypoint\"}[$interval])) by (entrypoint)",
"legendFormat": "{{entrypoint}}",
"range": true,
"refId": "A"
@@ -340,7 +340,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "(sum(rate(traefik_entrypoint_request_duration_seconds_bucket{le=\"0.3\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method) + \n sum(rate(traefik_entrypoint_request_duration_seconds_bucket{le=\"1.2\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)) / 2 / \n sum(rate(traefik_entrypoint_request_duration_seconds_count{code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)\n",
"expr": "(sum(rate(ingress_entrypoint_request_duration_seconds_bucket{le=\"0.3\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method) + \n sum(rate(ingress_entrypoint_request_duration_seconds_bucket{le=\"1.2\",code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)) / 2 / \n sum(rate(ingress_entrypoint_request_duration_seconds_count{code=\"200\",entrypoint=~\"$entrypoint\"}[$interval])) by (method)\n",
"legendFormat": "{{method}}",
"range": true,
"refId": "A"
@@ -408,7 +408,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(rate(traefik_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) by (method, code)",
"expr": "sum(rate(ingress_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) by (method, code)",
"legendFormat": "{{method}}[{{code}}]",
"range": true,
"refId": "A"
@@ -507,7 +507,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n traefik_service_request_duration_seconds_sum{service=~\"$service.*\",protocol=\"http\"} / \n traefik_service_request_duration_seconds_count{service=~\"$service.*\",protocol=\"http\"},\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)\n\n",
"expr": "topk(15,\n label_replace(\n ingress_service_request_duration_seconds_sum{service=~\"$service.*\",protocol=\"http\"} / \n ingress_service_request_duration_seconds_count{service=~\"$service.*\",protocol=\"http\"},\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)\n\n",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -606,7 +606,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"legendFormat": "[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -710,7 +710,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(traefik_service_request_duration_seconds_bucket{le=\"1.2\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(traefik_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\"\n)",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(ingress_service_request_duration_seconds_bucket{le=\"1.2\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(ingress_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\"\n)",
"legendFormat": "{{service}}",
"range": true,
"refId": "A"
@@ -804,7 +804,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(traefik_service_request_duration_seconds_bucket{le=\"0.3\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(traefik_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\"\n)",
"expr": "label_replace(\n 1 - (sum by (service)\n (rate(ingress_service_request_duration_seconds_bucket{le=\"0.3\",service=~\"$service.*\"}[$interval])) / sum by (service) \n (rate(ingress_service_request_duration_seconds_count{service=~\"$service.*\"}[$interval]))\n ) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\"\n)",
"legendFormat": "{{service}}",
"range": true,
"refId": "A"
@@ -916,7 +916,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",code=~\"2..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",code=~\"2..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -1015,7 +1015,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",code=~\"5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",code=~\"5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -1114,7 +1114,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(traefik_service_requests_total{service=~\"$service.*\",code!~\"2..|5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method,code) \n (rate(ingress_service_requests_total{service=~\"$service.*\",code!~\"2..|5..\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"legendFormat": "{{method}}[{{code}}] on {{service}}",
"range": true,
"refId": "A"
@@ -1213,7 +1213,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(traefik_service_requests_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(ingress_service_requests_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"legendFormat": "{{method}} on {{service}}",
"range": true,
"refId": "A"
@@ -1312,7 +1312,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(traefik_service_responses_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"expr": "topk(15,\n label_replace(\n sum by (service,method) \n (rate(ingress_service_responses_bytes_total{service=~\"$service.*\",protocol=\"http\"}[$interval])) > 0,\n \"service\", \"$1\", \"service\", \"([^-]+-[^-]+).*\")\n)",
"legendFormat": "{{method}} on {{service}}",
"range": true,
"refId": "A"
@@ -1410,7 +1410,7 @@
"uid": "${DS_PROMETHEUS}"
},
"editorMode": "code",
"expr": "sum(traefik_open_connections{entrypoint=~\"$entrypoint\"}) by (entrypoint)\n",
"expr": "sum(ingress_open_connections{entrypoint=~\"$entrypoint\"}) by (entrypoint)\n",
"legendFormat": "{{entrypoint}}",
"range": true,
"refId": "A"
@@ -1517,14 +1517,14 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"definition": "label_values(traefik_open_connections, entrypoint)",
"definition": "label_values(ingress_open_connections, entrypoint)",
"hide": 0,
"includeAll": true,
"multi": false,
"name": "entrypoint",
"options": [],
"query": {
"query": "label_values(traefik_open_connections, entrypoint)",
"query": "label_values(ingress_open_connections, entrypoint)",
"refId": "StandardVariableQuery"
},
"refresh": 1,
@@ -1539,14 +1539,14 @@
"type": "prometheus",
"uid": "${DS_PROMETHEUS}"
},
"definition": "label_values(traefik_service_requests_total, service)",
"definition": "label_values(ingress_service_requests_total, service)",
"hide": 0,
"includeAll": true,
"multi": false,
"name": "service",
"options": [],
"query": {
"query": "label_values(traefik_service_requests_total, service)",
"query": "label_values(ingress_service_requests_total, service)",
"refId": "StandardVariableQuery"
},
"refresh": 2,
@@ -1563,7 +1563,7 @@
},
"timepicker": {},
"timezone": "",
"title": "Traefik Official Standalone Dashboard",
"title": "Hanzo Ingress Dashboard",
"uid": "n5bu_kv45",
"version": 7,
"weekStart": ""
@@ -1,18 +1,18 @@
[Unit]
Description=Traefik
Documentation=https://doc.traefik.io/traefik/
Description=Hanzo Ingress
Documentation=https://github.com/hanzoai/ingress
#After=network-online.target
#AssertFileIsExecutable=/usr/bin/traefik
#AssertPathExists=/etc/traefik/traefik.toml
#AssertFileIsExecutable=/usr/bin/hanzo-ingress
#AssertPathExists=/etc/ingress/ingress.toml
[Service]
# Run traefik as its own user (create new user with: useradd -r -s /bin/false -U -M traefik)
#User=traefik
# Run the ingress as its own user (create new user with: useradd -r -s /bin/false -U -M ingress)
#User=ingress
#AmbientCapabilities=CAP_NET_BIND_SERVICE
# configure service behavior
Type=notify
#ExecStart=/usr/bin/traefik --configFile=/etc/traefik/traefik.toml
#ExecStart=/usr/bin/hanzo-ingress --configFile=/etc/ingress/ingress.toml
Restart=always
WatchdogSec=1s
@@ -31,7 +31,7 @@ WatchdogSec=1s
#ProtectControlGroups=true
# allow writing of acme.json
#ReadWritePaths=/etc/traefik/acme.json
#ReadWritePaths=/etc/ingress/acme.json
# depending on log and entrypoint configuration, you may need to allow writing to other paths, too
# limit number of processes in this unit
+1 -1
View File
@@ -4,7 +4,7 @@
// the Hanzo Ingress subsystem.
//
// The mount logic ships under the `cloud` build tag so the standalone
// cmd/traefik binary (the full hanzo-ingress reverse proxy that runs
// cmd/ingress binary (the full hanzo-ingress reverse proxy that runs
// at the k8s cluster edge) builds without pulling hanzoai/cloud +
// hanzoai/zip into its dependency tree. Build with `-tags=cloud` to
// compile the Mount.
+4 -6
View File
@@ -1,8 +1,6 @@
################################################################
#
# Configuration sample for Traefik v2.
#
# For Traefik v1: https://github.com/traefik/traefik/blob/v1.7/traefik.sample.toml
# Configuration sample for Hanzo Ingress.
#
################################################################
@@ -29,10 +27,10 @@
address = ":443"
################################################################
# Traefik logs configuration
# Ingress logs configuration
################################################################
# Traefik logs
# Ingress logs
# Enabled by default and log to stdout
#
# Optional
@@ -82,7 +80,7 @@
# filePath = "/path/to/log/log.txt"
# Format is either "json", "common", or "genericCLF".
# - "common": Traefik's extended CLF format (default)
# - "common": the ingress' extended CLF format (default)
# - "genericCLF": Standard CLF format compatible with standard log analyzers
# - "json": JSON format for structured logging
#
+5 -7
View File
@@ -1,8 +1,6 @@
################################################################
#
# Configuration sample for Traefik v2.
#
# For Traefik v1: https://github.com/traefik/traefik/blob/v1.7/traefik.sample.toml
# Configuration sample for Hanzo Ingress.
#
################################################################
@@ -29,10 +27,10 @@ entryPoints:
address: :443
################################################################
# Traefik logs configuration
# Ingress logs configuration
################################################################
# Traefik logs
# Ingress logs
# Enabled by default and log to stdout
#
# Optional
@@ -80,7 +78,7 @@ entryPoints:
# filePath: /path/to/log/log.txt
# Format is either "json", "common", or "genericCLF".
# - "common": Traefik's extended CLF format (default)
# - "common": the ingress' extended CLF format (default)
# - "genericCLF": Standard CLF format compatible with standard log analyzers
# - "json": JSON format for structured logging
#
@@ -124,7 +122,7 @@ entryPoints:
# Optional
# Default: "ingress"
#
# entryPoint: traefik
# entryPoint: ingress
################################################################
# Docker configuration backend
+2 -2
View File
@@ -282,7 +282,7 @@ func (s *WebsocketSuite) TestBasicAuth() {
defer conn.Close()
user, password, _ := r.BasicAuth()
assert.Equal(s.T(), "traefiker", user)
assert.Equal(s.T(), "ingressuser", user)
assert.Equal(s.T(), "secret", password)
for {
@@ -309,7 +309,7 @@ func (s *WebsocketSuite) TestBasicAuth() {
require.NoError(s.T(), err)
config, err := websocket.NewConfig("ws://127.0.0.1:8000/ws", "ws://127.0.0.1:8000")
auth := "traefiker:secret"
auth := "ingressuser:secret"
config.Header.Set("Authorization", "Basic "+base64.StdEncoding.EncodeToString([]byte(auth)))
assert.NoError(s.T(), err)
+2 -2
View File
@@ -7,7 +7,7 @@
// Hanzo Ingress.
//
// Architecturally, the full reverse-proxy / TLS / provider machinery
// lives in `cmd/traefik` and stays out-of-process at the cluster edge —
// lives in `cmd/ingress` and stays out-of-process at the cluster edge —
// nothing about that changes. What Mount provides is the small
// in-process slice the unified cloud binary needs: a healthz endpoint
// (so probes work even when the edge proxy is reloading) and a
@@ -83,7 +83,7 @@ func Mount(app *zip.App, deps cloud.Deps) error {
// static config. We do NOT import pkg/config/static into the cloud
// build path — that pulls in the entire provider tree (Kubernetes,
// Docker, AWS, Consul, …). The full config still lives in
// cmd/traefik/cmd.go for the standalone binary.
// cmd/ingress/ingress.go for the standalone binary.
type runtimeConfig struct {
Entrypoints []string
Providers []string
+1 -1
View File
@@ -1,4 +1,4 @@
# This file is not meant as a usable Traefik configuration.
# This file is not meant as a usable Ingress configuration.
# It is only used in tests as a sample for serialization.
[global]
checkNewVersion = true
@@ -6,7 +6,7 @@ import (
kschema "k8s.io/apimachinery/pkg/runtime/schema"
)
// GroupName is the group name for the hanzoai Traefik-fork CRDs
// GroupName is the group name for the hanzoai Ingress CRDs
// (Middleware, IngressRoute, TLSOption, ServersTransport, etc.).
//
// Was "ingress.k8s.io" — but every cluster installs the CRDs under
@@ -20,7 +20,7 @@ import (
//
// Result: every rewrite/headers/redirect Middleware referenced by a
// standard K8s Ingress via the
// `traefik.ingress.kubernetes.io/router.middlewares` annotation was
// `ingress.kubernetes.io/router.middlewares` annotation was
// silently ignored — the route still landed at the backend but no
// rewrite ever ran. Latent for any deployment using middleware-based
// path rewrites.
+2 -2
View File
@@ -3,7 +3,7 @@
"Debug": false,
"CheckNewVersion": true,
"AccessLogsFile": "",
"TraefikLogsFile": "",
"IngressLogsFile": "",
"Level": "ERROR",
"EntryPoints": {
"http": {
@@ -75,5 +75,5 @@
"Eureka": null,
"ECS": null,
"DynamoDB": null,
"ConfigFile": "/etc/traefik/traefik.toml"
"ConfigFile": "/etc/ingress/ingress.toml"
}
+2 -2
View File
@@ -3,7 +3,7 @@
"Debug": false,
"CheckNewVersion": true,
"AccessLogsFile": "",
"TraefikLogsFile": "",
"IngressLogsFile": "",
"Level": "ERROR",
"EntryPoints": {
"http": {
@@ -75,5 +75,5 @@
"Eureka": null,
"ECS": null,
"DynamoDB": null,
"ConfigFile": "/etc/traefik/traefik.toml"
"ConfigFile": "/etc/ingress/ingress.toml"
}
+2 -2
View File
@@ -17,7 +17,7 @@
// and forwards. The gateway-relay speaks the luxfi/zap Forward protocol,
// not zaphttp, so this needs forward.Forwarder, not zaphttp.Transport.
//
// TLS termination is unaffected: Traefik still terminates the client TLS at
// TLS termination is unaffected: the ingress still terminates the client TLS at
// the edge. This only changes what happens to the DECRYPTED request for the
// matched AI routes — it leaves the edge as a Forward envelope to the
// gateway-relay over ZAP.
@@ -232,7 +232,7 @@ func (f *forwardBackendRoundTripper) RoundTrip(req *http.Request) (*http.Respons
//
// The caller's *http.Request is NOT mutated: a shallow copy with a cloned,
// scrubbed Header is returned, since a RoundTripper must not modify the
// request it is given (Traefik may reuse/retry it).
// request it is given (the ingress may reuse/retry it).
func stripEdgeIdentity(req *http.Request) *http.Request {
clone := req.Clone(req.Context())
clone.Header.Del(forward.HeaderOrgID) // X-Org-Id
+1 -1
View File
@@ -110,7 +110,7 @@ func TestForwardBackendRoundTripper_AIRouteTunnelsOverZAP(t *testing.T) {
t.Fatal("matched AI route fell through to next transport; must tunnel over ZAP")
}
// The RoundTripper must NOT mutate the request it was given (Traefik may
// The RoundTripper must NOT mutate the request it was given (the ingress may
// reuse/retry it): stripEdgeIdentity clones, so the caller's request still
// carries its original identity header here.
if got := req.Header.Get(forward.HeaderOrgID); got != "evil-org" {
+3 -3
View File
@@ -78,10 +78,10 @@ func parseZapBackendList(raw string) []string {
//
// 1. Exact host:port match against allowlist entries. Works when
// IngressRoute backends point at a stable in-cluster address that
// Traefik does NOT resolve before dialing.
// the ingress does NOT resolve before dialing.
// 2. Port-only fallback: if any allowlist entry's port matches the
// request's port, route through ZAP-HTTP regardless of host.
// Traefik resolves Service DNS to a Pod IP before invoking the
// The ingress resolves Service DNS to a Pod IP before invoking the
// transport (req.URL.Host becomes 10.x.x.x:port at this layer);
// pinning the dial to (resolved-IP, port) lets the ZAP transport
// reach the same pod the regular transport would have. Operators
@@ -144,7 +144,7 @@ func (z *zapBackendRoundTripper) transportFor(addr string) *zaphttp.Transport {
return actual.(*zaphttp.Transport)
}
// backendAddr returns the upstream host:port for the request. Traefik
// backendAddr returns the upstream host:port for the request. The ingress
// rewrites req.URL to point at the chosen backend before invoking the
// transport, so URL.Host is the source of truth. Falls back to req.Host
// if URL.Host is empty (defensive; this is not expected in practice).
+1 -1
View File
@@ -1,7 +1,7 @@
/*
The MIT License (MIT)
Copyright (c) 2016-2020 Containous SAS; 2020-YEAR Traefik Labs
Copyright (c) 2016-2020 Containous SAS; 2020-2025 Traefik Labs; 2025-YEAR Hanzo AI Inc
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+7 -7
View File
@@ -2,8 +2,8 @@
set -e -o pipefail
PROJECT_MODULE="github.com/traefik/traefik"
MODULE_VERSION="v3"
PROJECT_MODULE="github.com/hanzoai/ingress"
MODULE_VERSION=""
KUBE_VERSION=v0.34.3
CURRENT_DIR="$(pwd)"
@@ -14,7 +14,7 @@ CODEGEN_PKG="$(go env GOPATH)/pkg/mod/k8s.io/code-generator@${KUBE_VERSION}"
# shellcheck disable=SC1091 # Cannot check source of this file
source "${CODEGEN_PKG}/kube_codegen.sh"
echo "# Generating Traefik clientset and deepcopy code ..."
echo "# Generating Ingress clientset and deepcopy code ..."
kube::codegen::gen_helpers \
--boilerplate "$(dirname "${BASH_SOURCE[0]}")/boilerplate.go.tmpl" \
"${CURRENT_DIR}"
@@ -23,18 +23,18 @@ kube::codegen::gen_client \
--with-applyconfig \
--with-watch \
--output-dir "${CURRENT_DIR}/pkg/provider/kubernetes/crd/generated" \
--output-pkg "${PROJECT_MODULE}/${MODULE_VERSION}/pkg/provider/kubernetes/crd/generated" \
--output-pkg "${PROJECT_MODULE}${MODULE_VERSION:+/$MODULE_VERSION}/pkg/provider/kubernetes/crd/generated" \
--boilerplate "$(dirname "${BASH_SOURCE[0]}")/boilerplate.go.tmpl" \
"${CURRENT_DIR}/pkg/provider/kubernetes/crd"
echo "# Generating the CRD definitions for the documentation ..."
controller-gen crd:crdVersions=v1 \
paths={./pkg/provider/kubernetes/crd/traefikio/v1alpha1/...} \
paths={./pkg/provider/kubernetes/crd/hanzoai/v1alpha1/...} \
output:dir=./docs/content/reference/dynamic-configuration/
echo "# Concatenate the CRD definitions for publication and integration tests ..."
cat "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/traefik.io_*.yaml > "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
cp -f "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml "${CURRENT_DIR}"/integration/fixtures/k8s/01-traefik-crd.yml
cat "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/hanzo.ai_*.yaml > "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
cp -f "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml "${CURRENT_DIR}"/integration/fixtures/k8s/01-ingress-crd.yml
# Remove leading '---' from the concatenated file (files with multiple resources should not start with ---)
sed -i '1{/^---$/d;}' "${CURRENT_DIR}"/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
+4 -4
View File
@@ -6,7 +6,7 @@ if [ -z "$VERSION" ]; then
fi
if [ -z "$CODENAME" ]; then
CODENAME=cheddar
CODENAME=hanzo
fi
if [ -z "$DATE" ]; then
@@ -15,7 +15,7 @@ fi
echo "Building ${VERSION} ${CODENAME} ${DATE}"
GIT_REPO_URL='github.com/traefik/traefik/pkg/version'
GIT_REPO_URL='github.com/hanzoai/ingress/v3/pkg/version'
GO_BUILD_CMD="go build -ldflags"
GO_BUILD_OPT="-s -w -X ${GIT_REPO_URL}.Version=${VERSION} -X ${GIT_REPO_URL}.Codename=${CODENAME} -X ${GIT_REPO_URL}.BuildDate=${DATE}"
@@ -29,7 +29,7 @@ for OS in "${OS_PLATFORM_ARG[@]}"; do
fi
for ARCH in "${OS_ARCH_ARG[@]}"; do
echo "Building binary for ${OS}/${ARCH}..."
GOARCH=${ARCH} GOOS=${OS} CGO_ENABLED=0 ${GO_BUILD_CMD} "${GO_BUILD_OPT}" -o "dist/traefik_${OS}-${ARCH}${BIN_EXT}" ./cmd/traefik/
GOARCH=${ARCH} GOOS=${OS} CGO_ENABLED=0 ${GO_BUILD_CMD} "${GO_BUILD_OPT}" -o "dist/hanzo-ingress_${OS}-${ARCH}${BIN_EXT}" ./cmd/ingress/
done
done
@@ -39,6 +39,6 @@ OS_ARCH_ARG=(arm64)
for OS in "${OS_PLATFORM_ARG[@]}"; do
for ARCH in "${OS_ARCH_ARG[@]}"; do
echo "Building binary for ${OS}/${ARCH}..."
GOARCH=${ARCH} GOOS=${OS} CGO_ENABLED=0 ${GO_BUILD_CMD} "${GO_BUILD_OPT}" -o "dist/traefik_${OS}-${ARCH}" ./cmd/traefik/
GOARCH=${ARCH} GOOS=${OS} CGO_ENABLED=0 ${GO_BUILD_CMD} "${GO_BUILD_OPT}" -o "dist/hanzo-ingress_${OS}-${ARCH}" ./cmd/ingress/
done
done
+5 -19
View File
@@ -8,25 +8,11 @@ else
exit 0
fi
git config --global user.email "${TRAEFIKER_EMAIL}"
git config --global user.name "Traefiker"
git config --global user.email "${HANZO_DEPLOYER_EMAIL}"
git config --global user.name "Hanzo Deployer"
# load ssh key
eval "$(ssh-agent -s)"
chmod 600 ~/.ssh/traefiker_rsa
ssh-add ~/.ssh/traefiker_rsa
# update traefik-library-image repo (official Docker image)
echo "Updating traefik-library-imag repo..."
git clone [email protected]:traefik/traefik-library-image.git
cd traefik-library-image
./updatev2.sh "${VERSION}"
git add -A
echo "${VERSION}" | git commit --file -
echo "${VERSION}" | git tag -a "${VERSION}" --file -
git push -q --follow-tags -u origin master > /dev/null 2>&1
cd ..
rm -Rf traefik-library-image/
# Image publishing is handled by .github/workflows/build.yaml, which builds
# multi-arch images and pushes them to ghcr.io/hanzoai/ingress. There is no
# separate library-image repo to update.
echo "Deployed"
@@ -1,8 +1,8 @@
Owner = "traefik"
RepositoryName = "traefik"
Owner = "hanzoai"
RepositoryName = "ingress"
OutputType = "file"
FileName = "traefik_changelog.md"
FileName = "ingress_changelog.md"
# example new bugfix v3.6.9
CurrentRef = "v3.6"
@@ -1,8 +1,8 @@
Owner = "traefik"
RepositoryName = "traefik"
Owner = "hanzoai"
RepositoryName = "ingress"
OutputType = "file"
FileName = "traefik_changelog.md"
FileName = "ingress_changelog.md"
# example final release of v3.6.0
CurrentRef = "v3.6"
@@ -1,8 +1,8 @@
Owner = "traefik"
RepositoryName = "traefik"
Owner = "hanzoai"
RepositoryName = "ingress"
OutputType = "file"
FileName = "traefik_changelog.md"
FileName = "ingress_changelog.md"
# example final release of v3.6.0
CurrentRef = "v3.6.0-rc1"
@@ -1,8 +1,8 @@
Owner = "traefik"
RepositoryName = "traefik"
Owner = "hanzoai"
RepositoryName = "ingress"
OutputType = "file"
FileName = "traefik_changelog.md"
FileName = "ingress_changelog.md"
# example RC1 of v3.6.0-rc1
CurrentRef = "master"
@@ -1,8 +1,8 @@
Owner = "traefik"
RepositoryName = "traefik"
Owner = "hanzoai"
RepositoryName = "ingress"
OutputType = "file"
FileName = "traefik_changelog.md"
FileName = "ingress_changelog.md"
# example rc2 of v3.5.0
CurrentRef = "v3.5"
+5 -5
View File
@@ -5,27 +5,27 @@ Installation: https://github.com/ldez/gcg#how-to-install
## Generates Changelog for a Bug Fix Release
```bash
gcg --config-file=./script/gcg/traefik-bugfix.toml
gcg --config-file=./script/gcg/ingress-bugfix.toml
```
## Generates Changelog for a Final Release
```bash
gcg --config-file=./script/gcg/traefik-final-release-part1.toml
gcg --config-file=./script/gcg/ingress-final-release-part1.toml
```
```bash
gcg --config-file=./script/gcg/traefik-final-release-part2.toml
gcg --config-file=./script/gcg/ingress-final-release-part2.toml
```
## Generates Changelog for the first RC of a Version
```bash
gcg --config-file=./script/gcg/traefik-rc-first.toml
gcg --config-file=./script/gcg/ingress-rc-first.toml
```
## Generates Changelog for a RC of a Version
```bash
gcg --config-file=./script/gcg/traefik-rc-new.toml
gcg --config-file=./script/gcg/ingress-rc-new.toml
```