Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
projects/.DS_Store
projects/ysy/kong-watcher/.DS_Store
72 changes: 72 additions & 0 deletions projects/ysy/kong-watcher/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# .dockerignore for Kong eBPF Monitor

# Git 관련 파일
.git
.gitignore
.gitattributes

# 문서 파일
*.md
README.md
CHANGELOG.md
LICENSE

# IDE 설정 파일
.vscode/
.idea/
*.swp
*.swo
*~

# OS 생성 파일
.DS_Store
Thumbs.db

# 빌드 아티팩트
kong-watcher
*.o
*.so
*.a
bpf_*.go
kprobe_*.go
uprobe_*.go

# 테스트 파일
*_test.go
test/
tests/

# 로그 파일
*.log
logs/

# 임시 파일
tmp/
temp/
*.tmp

# 개발 도구 설정
Makefile
.dockerignore

# Kubernetes 매니페스트 (빌드에 불필요)
*.yaml
*.yml
!go.mod
!go.sum

# 개발 환경 설정
.env
.env.local
.env.development
.env.test
.env.production

# 패키지 매니저
node_modules/
vendor/

# 백업 파일
*.bak
*.backup
*.orig
122 changes: 122 additions & 0 deletions projects/ysy/kong-watcher/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Kong Gateway eBPF Monitor - Linux 전용 Dockerfile
# Linux 환경에서만 빌드 및 실행 가능 (eBPF는 Linux 커널 전용)

# 빌드 스테이지
FROM golang:1.23-alpine AS builder

# 빌드 인수 설정
ARG TARGETOS=linux
ARG TARGETARCH=amd64
ARG BUILDPLATFORM
ARG VERSION=1.0.0
ARG COMMIT_SHA=unknown

# Go 환경 변수 설정
ENV GOOS=${TARGETOS}
ENV GOARCH=${TARGETARCH}
ENV CGO_ENABLED=1
ENV GO111MODULE=on
ENV GOPROXY=direct
ENV GOSUMDB=off
ENV BPF_CFLAGS="-O2 -g -Wall -Werror"

# eBPF 빌드를 위한 필수 패키지 설치 (Alpine Linux)
RUN apk add --no-cache \
clang \
llvm \
linux-headers \
make \
git \
ca-certificates \
build-base \
musl-dev \
zlib-dev \
elfutils-dev \
&& rm -rf /var/cache/apk/*

# 작업 디렉토리 설정
WORKDIR /app

# Go 모듈 파일 복사 및 의존성 다운로드
COPY go.mod go.sum ./
RUN go mod download

# 소스 코드 복사
COPY . .

# eBPF 헤더 파일 확인
RUN echo "=== eBPF Headers Check ===" && \
ls -la headers/ && \
echo "=== Headers content preview ===" && \
head -10 headers/vmlinux.h

# eBPF 코드 생성 및 빌드 (Linux amd64 전용)
RUN echo "=== Generating eBPF code for ${TARGETOS}/${TARGETARCH} ===" && \
GOOS=linux GOARCH=amd64 go generate ./... && \
echo "=== eBPF code generation completed ===" && \
ls -la *.go

# Go 애플리케이션 빌드
RUN echo "=== Building Go application ===" && \
go build \
-ldflags="-s -w -X main.version=${VERSION} -X main.commit=${COMMIT_SHA}" \
-o kong-watcher \
*.go && \
echo "=== Build completed successfully ==="

# 빌드 결과 확인
RUN echo "=== Build verification ===" && \
ls -la kong-watcher && \
file kong-watcher && \
echo "=== Binary info ===" && \
ldd kong-watcher || echo "Static binary or ldd not available"

# 실행 스테이지 - 사이드카 컨테이너용 최적화
FROM alpine:3.19

# 메타데이터 라벨
LABEL maintainer="Kong eBPF Monitor Team" \
description="Kong Gateway eBPF Monitor Sidecar Container" \
version="${VERSION}" \
org.opencontainers.image.title="kong-gateway-ebpf-monitor" \
org.opencontainers.image.description="eBPF-based Kong Gateway traffic monitoring sidecar" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.source="https://github.com/your-org/kong-watcher" \
org.opencontainers.image.os="linux" \
org.opencontainers.image.arch="amd64"

# 사이드카 실행을 위한 필수 패키지 설치
RUN apk add --no-cache \
ca-certificates \
libc6-compat \
procps \
&& rm -rf /var/cache/apk/*

# 작업 디렉토리 설정
WORKDIR /app

# 빌드된 바이너리 복사
COPY --from=builder /app/kong-watcher .

# 바이너리 권한 설정
RUN chmod +x /app/kong-watcher

# 사이드카 컨테이너용 사용자 생성
RUN addgroup -g 1001 -S kong-monitor && \
adduser -u 1001 -S kong-monitor -G kong-monitor

# 사이드카 컨테이너는 privileged 모드로 실행되므로 root 사용
# USER kong-monitor:kong-monitor

# 사이드카 컨테이너용 헬스체크
HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \
CMD pgrep kong-watcher > /dev/null || exit 1

# 사이드카 컨테이너용 환경 변수 설정
ENV LOG_LEVEL=info \
ENABLE_JSON_LOG=false \
STATS_INTERVAL=30s \
KONG_PROCESS_NAME=kong

# 실행 명령
ENTRYPOINT ["/app/kong-watcher"]
69 changes: 69 additions & 0 deletions projects/ysy/kong-watcher/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Kong Gateway eBPF Monitor Makefile
# Docker buildx를 활용한 멀티 아키텍처 빌드 및 푸시

# 변수 설정
IMG ?= harbor.ops.action.cloudz.co.kr/apim/kong-watcher:0.0.1
VERSION ?= 1.0.0
COMMIT_SHA ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")

.PHONY: build push buildx clean help

# 기본 타겟
all: buildx

# Docker 이미지 빌드 (로컬)
build:
@echo "🏗️ Building Docker image..."
docker build \
--build-arg BUILDPLATFORM=linux/amd64 \
--build-arg TARGETOS=linux \
--build-arg TARGETARCH=amd64 \
--build-arg VERSION=$(VERSION) \
--build-arg COMMIT_SHA=$(COMMIT_SHA) \
-t $(IMG) \
.

# Docker 이미지 푸시
push:
@echo "📤 Pushing Docker image..."
docker push $(IMG)

# Docker buildx를 활용한 멀티 아키텍처 빌드 및 푸시
buildx:
@echo "🚀 Building and pushing multi-architecture image..."
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-arg BUILDPLATFORM=linux/amd64 \
--build-arg TARGETOS=linux \
--build-arg TARGETARCH=amd64 \
--build-arg VERSION=$(VERSION) \
--build-arg COMMIT_SHA=$(COMMIT_SHA) \
--tag $(IMG) \
--push \
.

# 정리
clean:
@echo "🧹 Cleaning up..."
docker rmi $(IMG) 2>/dev/null || true

# 도움말
help:
@echo "Kong Gateway eBPF Monitor - Docker Build"
@echo ""
@echo "Available targets:"
@echo " build - Build Docker image locally"
@echo " push - Push Docker image to registry"
@echo " buildx - Build and push multi-architecture image (default)"
@echo " clean - Clean up local Docker images"
@echo " help - Show this help message"
@echo ""
@echo "Variables:"
@echo " IMG - Docker image name (default: $(IMG))"
@echo " VERSION - Version tag (default: $(VERSION))"
@echo " COMMIT_SHA - Git commit SHA (default: $(COMMIT_SHA))"
@echo ""
@echo "Examples:"
@echo " make buildx"
@echo " make buildx IMG=my-registry.com/kong-watcher:v1.0.0"
@echo " make buildx VERSION=2.0.0"
Loading