mirror of
https://hubproxy.babadafafafafa.cn/https://github.com/kube-vip/kube-vip.git
synced 2026-09-20 08:03:47 +08:00
go.mod requires go >= 1.26.4 but unit-tests-docker ran golang:1.25.6 with GOTOOLCHAIN=local and failed before running any test. Bump to 1.26.6 and stop leaving a root-owned coverage.out behind on Linux hosts while preserving the test exit status. Signed-off-by: Maximilian Rink <maximilian.rink@telekom.de>
189 lines
9.1 KiB
Makefile
189 lines
9.1 KiB
Makefile
SHELL := /bin/sh
|
|
|
|
# The name of the executable (default is current directory name)
|
|
TARGET := kube-vip
|
|
.DEFAULT_GOAL := $(TARGET)
|
|
|
|
# These will be provided to the target
|
|
VERSION := v1.2.3
|
|
|
|
BUILD := `git rev-parse HEAD`
|
|
|
|
# Operating System Default (LINUX)
|
|
TARGETOS=linux
|
|
|
|
# Use linker flags to provide version/build settings to the target
|
|
LDFLAGS=-ldflags "-s -w -X=main.Version=$(VERSION) -X=main.Build=$(BUILD) -extldflags -static"
|
|
DOCKERTAG ?= $(VERSION)
|
|
REPOSITORY ?= docker.io/plndr
|
|
GO_VERSION := 1.26.6
|
|
K8S_VERSION ?= v1.35.0
|
|
GINKGO_ARGS ?=
|
|
GINKGO_PROCS ?=
|
|
GINKGO_PARALLEL := $(if $(GINKGO_PROCS),--procs=$(GINKGO_PROCS),-p)
|
|
BUILDX_CACHE_FLAGS ?=
|
|
|
|
.PHONY: all build clean install uninstall simplify check run e2e-tests unit-tests integration-tests unit-tests-docker integration-tests-docker
|
|
|
|
all: check install
|
|
|
|
$(TARGET):
|
|
@go build $(LDFLAGS) -o $(TARGET)
|
|
|
|
build: $(TARGET)
|
|
@true
|
|
|
|
clean:
|
|
@rm -f $(TARGET)
|
|
|
|
install:
|
|
@echo Building and Installing project
|
|
@go install $(LDFLAGS)
|
|
|
|
uninstall: clean
|
|
@rm -f $$(which ${TARGET})
|
|
|
|
demo:
|
|
@cd demo
|
|
@docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x --push -t $(REPOSITORY)/$(TARGET):$(DOCKERTAG) .
|
|
@echo New Multi Architecture Docker image created
|
|
@cd ..
|
|
|
|
## Remote (push of images)
|
|
# This build a local docker image (x86 only) for quick testing
|
|
|
|
dockerx86Dev:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 --push -t $(REPOSITORY)/$(TARGET):dev .
|
|
@echo New single x86 Architecture Docker image created
|
|
|
|
dockerx86Iptables:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 -f ./Dockerfile_iptables --push -t $(REPOSITORY)/$(TARGET):dev .
|
|
@echo New single x86 Architecture Docker image created
|
|
|
|
dockerx86IptablesLocal:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 -f ./Dockerfile_iptables -t $(REPOSITORY)/$(TARGET):$(DOCKERTAG) .
|
|
@echo New single x86 Architecture Docker image created
|
|
|
|
dockerx86:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 --push -t $(REPOSITORY)/$(TARGET):$(DOCKERTAG) .
|
|
@echo New single x86 Architecture Docker image created
|
|
|
|
docker:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x --push -t $(REPOSITORY)/$(TARGET):$(DOCKERTAG) .
|
|
@echo New Multi Architecture Docker image created
|
|
|
|
## Local (docker load of images)
|
|
# This will build a local docker image (x86 only), use make dockerLocal for all architectures
|
|
dockerx86Local:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 --load -t $(REPOSITORY)/$(TARGET):$(DOCKERTAG) $(BUILDX_CACHE_FLAGS) .
|
|
@echo New Multi Architecture Docker image created
|
|
|
|
dockerx86Action:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 --load -t $(REPOSITORY)/$(TARGET):action $(BUILDX_CACHE_FLAGS) .
|
|
@echo New Multi Architecture Docker image created
|
|
|
|
dockerx86ActionIPTables:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64 -f ./Dockerfile_iptables --load -t $(REPOSITORY)/$(TARGET):action $(BUILDX_CACHE_FLAGS) .
|
|
@echo New Multi Architecture Docker image created
|
|
|
|
dockerLocal:
|
|
@-rm ./kube-vip
|
|
@docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x --load -t $(REPOSITORY)/$(TARGET):$(DOCKERTAG) .
|
|
@echo New Multi Architecture Docker image created
|
|
|
|
simplify:
|
|
@gofmt -s -l -w *.go pkg cmd
|
|
|
|
check:
|
|
go mod tidy
|
|
test -z "$(git status --porcelain)"
|
|
test -z $(shell gofmt -l *.go pkg cmd) || echo "[WARN] Fix formatting issues with 'make simplify'"
|
|
golangci-lint run
|
|
go vet ./...
|
|
|
|
run: install
|
|
@$(TARGET)
|
|
|
|
manifests:
|
|
@make build
|
|
@mkdir -p ./docs/manifests/$(VERSION)/
|
|
@./kube-vip manifest pod --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services > ./docs/manifests/$(VERSION)/kube-vip-arp.yaml
|
|
@./kube-vip manifest pod --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services --enableLoadBalancer > ./docs/manifests/$(VERSION)/kube-vip-arp-lb.yaml
|
|
@./kube-vip manifest pod --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --bgp --controlplane --services > ./docs/manifests/$(VERSION)/kube-vip-bgp.yaml
|
|
@./kube-vip manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services --inCluster > ./docs/manifests/$(VERSION)/kube-vip-arp-ds.yaml
|
|
@./kube-vip manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services --inCluster --enableLoadBalancer > ./docs/manifests/$(VERSION)/kube-vip-arp-ds-lb.yaml
|
|
@./kube-vip manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --bgp --leaderElection --controlplane --services --inCluster > ./docs/manifests/$(VERSION)/kube-vip-bgp-ds.yaml
|
|
@./kube-vip manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --bgp --leaderElection --controlplane --services --inCluster > ./docs/manifests/$(VERSION)/kube-vip-bgp-em-ds.yaml
|
|
@-rm ./kube-vip
|
|
|
|
manifest-test:
|
|
docker run $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest pod --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services
|
|
docker run $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest pod --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services --enableLoadBalancer
|
|
docker run $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest pod --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --bgp --controlplane --services
|
|
docker run $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services --inCluster
|
|
docker run $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --leaderElection --controlplane --services --inCluster --enableLoadBalancer
|
|
docker run $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest daemonset --interface eth0 --vip 192.168.0.1 --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --bgp --leaderElection --controlplane --services --inCluster
|
|
|
|
unit-tests:
|
|
go test -race ./...
|
|
|
|
unit-tests-docker:
|
|
docker run --rm -w /kube-vip -v $$(pwd):/kube-vip -v kube-vip-gomod-cache:/go/pkg/mod -v kube-vip-gobuild-cache:/root/.cache/go-build golang:$(GO_VERSION) sh -c "make unit-tests; status=$$?; chmod 666 coverage.out 2>/dev/null || true; exit $$status"
|
|
|
|
integration-tests:
|
|
go test -tags=integration,e2e -v ./pkg/etcd
|
|
|
|
e2e-tests-arp: get-whoami
|
|
GOMAXPROCS=4 TEST_MODE=arp K8S_IMAGE_PATH=kindest/node:$(K8S_VERSION) E2E_IMAGE_PATH=$(REPOSITORY)/$(TARGET):$(DOCKERTAG) go run github.com/onsi/ginkgo/v2/ginkgo --tags=e2e -v $(GINKGO_PARALLEL) $(GINKGO_ARGS) ./testing/e2e
|
|
|
|
e2e-tests-rt: get-whoami
|
|
GOMAXPROCS=4 TEST_MODE=rt K8S_IMAGE_PATH=kindest/node:$(K8S_VERSION) E2E_IMAGE_PATH=$(REPOSITORY)/$(TARGET):$(DOCKERTAG) go run github.com/onsi/ginkgo/v2/ginkgo --tags=e2e -v $(GINKGO_PARALLEL) $(GINKGO_ARGS) ./testing/e2e
|
|
|
|
e2e-tests-bgp: get-whoami get-gobgp
|
|
GOMAXPROCS=4 TEST_MODE=bgp K8S_IMAGE_PATH=kindest/node:$(K8S_VERSION) E2E_IMAGE_PATH=$(REPOSITORY)/$(TARGET):$(DOCKERTAG) go run github.com/onsi/ginkgo/v2/ginkgo --tags=e2e -v $(GINKGO_PARALLEL) $(GINKGO_ARGS) ./testing/e2e
|
|
|
|
e2e-tests: e2e-tests-arp e2e-tests-rt e2e-tests-bgp
|
|
|
|
service-tests:
|
|
$(MAKE) -C testing/e2e/e2e dockerLocal
|
|
E2E_IMAGE_PATH=$(REPOSITORY)/$(TARGET):$(DOCKERTAG) go run ./testing/services -Services -simple -deployments -leaderActive -leaderFailover -localDeploy -electionFaults -egress -egressIPv6 -dualStack -egressInternal
|
|
|
|
trivy: dockerx86ActionIPTables
|
|
docker run -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:0.47.0 \
|
|
image \
|
|
--format table \
|
|
--exit-code 1 \
|
|
--ignore-unfixed \
|
|
--vuln-type 'os,library' \
|
|
--severity 'CRITICAL,HIGH' \
|
|
$(REPOSITORY)/$(TARGET):action
|
|
|
|
kind-quick:
|
|
echo "Standing up your cluster"
|
|
kind create cluster --config ./testing/kind/kind.yaml --name kube-vip
|
|
kubectl apply -f https://kube-vip.io/manifests/rbac.yaml
|
|
kubectl create configmap --namespace kube-system kubevip --from-literal range-global=172.18.100.10-172.18.100.30
|
|
kubectl apply -f https://raw.githubusercontent.com/kube-vip/kube-vip-cloud-provider/main/manifest/kube-vip-cloud-controller.yaml
|
|
kind load docker-image --name kube-vip $(REPOSITORY)/$(TARGET):$(DOCKERTAG)
|
|
docker run --network host --rm $(REPOSITORY)/$(TARGET):$(DOCKERTAG) manifest daemonset --services --inCluster --image "$(REPOSITORY)/$(TARGET):$(DOCKERTAG)" --arp --servicesElection --interface eth0 | kubectl apply -f -
|
|
|
|
kind-reload:
|
|
kind load docker-image $(REPOSITORY)/$(TARGET):$(DOCKERTAG) --name services
|
|
kubectl rollout restart -n kube-system daemonset/kube-vip-ds
|
|
|
|
get-gobgp:
|
|
mkdir -p bin
|
|
wget -nc --directory-prefix=bin https://github.com/osrg/gobgp/releases/download/v4.6.0/gobgp_4.6.0_linux_amd64.tar.gz
|
|
tar -xvzf bin/gobgp_4.6.0_linux_amd64.tar.gz -C bin
|
|
|
|
get-whoami:
|
|
docker pull ghcr.io/traefik/whoami:v1.11
|