# apisix-ingress-controller — 소스 컴파일형 자체 빌드 (유일한 변종) # # build-hardened-image.sh 가 source 한다. BUILD_ARGS 에 나열한 이름만 --build-arg 로 넘어간다. # 이 이미지는 소스를 직접 컴파일하므로 "베이스 OS" 선택지가 없다 — BASE_OS=source 로 호출한다: # IMAGE=apisix-ingress-controller BASE_OS=source bash scripts/build/build-hardened-image.sh # # 왜 자체 빌드하는가 → source.Dockerfile 상단 주석. apisix 카탈로그 CVE 조치(2026-08-11) # 로 도입 — 근거·경과는 MEMORY.md. DOCKERFILE=source.Dockerfile TARGET=final TAG_SLUG=security # build-hardened-image.sh 가 태그·verify.sh 전달용으로 요구하는 범용 필수값. # 스톡 2.1.0 과는 태그 슬러그(TAG_SLUG=security)로 구분되므로 버전 문자열 자체는 그대로 둔다. APP_VERSION=2.1.0 # v2.1.0 태그가 가리키는 실제 커밋(peeled commit), 2026-08-11 확인. # apisix-ingress-controller 는 cloudnative-pg 식 "release-X.Y 브랜치"가 없다(master 하나) — # master HEAD 는 태그 대비 커밋 35개 앞서 있고 신기능 커밋이 섞여 있어(2026-08-11 확인) # 최소 diff 원칙(.claude/image-authoring.md)에 맞지 않는다. 태그 그대로 두고 의존성만 올린다. SOURCE_COMMIT=f4a8dd1223573a5b72e1c7b65b37c13b49d98042 # 업스트림 Makefile 의 MIN_K8S_VERSION 기본값(ldflags 로 바이너리에 심긴다). MIN_K8S_VERSION=1.26.0 # go.mod 의 `go 1.25`/`toolchain go1.26.5` 요구(의존성 업그레이드 후 go mod tidy 가 자동 # 상향한 값, 2026-08-11 로컬 실측)를 만족하는 공식 golang 이미지 태그. 빌더 스테이지에만 # 쓰이고 최종 이미지에는 남지 않는다. # # 값은 go.mod 최소 요구가 아니라 **stdlib 차단 CVE 를 해소하는 지점**으로 정한다 — 소스를 # 안 바꿔도 CVE 데이터가 갱신되면 여기가 올라간다. 손으로 고르지 않는다: # python3 scripts/build/suggest-go-upgrades.py --reports --image apisix-ingress-controller GO_BUILDER_TAG=1.26.6-trixie # 최종 런타임 베이스 — 카탈로그는 SUSE BCI 하나만 쓴다(.claude/image-authoring.md 원칙 2). # 정적 링크 바이너리(CGO_ENABLED=0)라 패키지 매니저가 없는 가장 가벼운 bci-micro 로 충분하다. RUNTIME_BASE=registry.suse.com/bci/bci-micro:15.7 # 차단 CVE 해소에 필요한 최소 버전(2026-08-11 실측, source.Dockerfile 상단 주석 참고). # go get 이 서로 호환되는 조합으로 정리한다 — 개별 go.sum 버전을 여기 나열하지 않는다. XNET_FIX_VERSION=0.56.0 XTEXT_FIX_VERSION=0.39.0 GRPC_FIX_VERSION=1.82.1 OTEL_FIX_VERSION=1.43.0 BUILD_ARGS="SOURCE_COMMIT APP_VERSION MIN_K8S_VERSION GO_BUILDER_TAG RUNTIME_BASE XNET_FIX_VERSION XTEXT_FIX_VERSION GRPC_FIX_VERSION OTEL_FIX_VERSION"