Skip to content

Commit 26b0440

Browse files
authored
Merge pull request #579 from jkh52/cross-compile
Change Dockerfiles (and make targets) to use cross-compile.
2 parents 8ff71dc + 74ea854 commit 26b0440

File tree

8 files changed

+50
-37
lines changed

8 files changed

+50
-37
lines changed

.github/workflows/e2e.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ jobs:
3636
run: |
3737
mkdir _output
3838
39-
docker build -t gcr.io/k8s-staging-kas-network-proxy/proxy-agent:master -f artifacts/images/agent-build.Dockerfile --build-arg GO_TOOLCHAIN=${{ env.GO_TOOLCHAIN }} --build-arg GO_VERSION=${{ env.GO_VERSION }} --build-arg BASEIMAGE=${{ env.BASEIMAGE }} .
40-
docker save gcr.io/k8s-staging-kas-network-proxy/proxy-agent:master > _output/konnectivity-agent.tar
41-
docker build -t gcr.io/k8s-staging-kas-network-proxy/proxy-server:master -f artifacts/images/server-build.Dockerfile --build-arg GO_TOOLCHAIN=${{ env.GO_TOOLCHAIN }} --build-arg GO_VERSION=${{ env.GO_VERSION }} --build-arg BASEIMAGE=${{ env.BASEIMAGE }} .
42-
docker save gcr.io/k8s-staging-kas-network-proxy/proxy-server:master > _output/konnectivity-server.tar
39+
make docker-build/proxy-agent-amd64 REGISTRY=gcr.io/k8s-staging-kas-network-proxy TAG=local BASEIMAGE=${{ env.BASEIMAGE }}
40+
docker save gcr.io/k8s-staging-kas-network-proxy/proxy-agent-amd64:local > _output/konnectivity-agent.tar
41+
make docker-build/proxy-server-amd64 REGISTRY=gcr.io/k8s-staging-kas-network-proxy TAG=local BASEIMAGE=${{ env.BASEIMAGE }}
42+
docker save gcr.io/k8s-staging-kas-network-proxy/proxy-server-amd64:local > _output/konnectivity-server.tar
4343
4444
- uses: actions/upload-artifact@v2
4545
with:
@@ -150,8 +150,8 @@ jobs:
150150
# preload konnectivity images
151151
docker load --input konnectivity-server.tar
152152
docker load --input konnectivity-agent.tar
153-
/usr/local/bin/kind load docker-image gcr.io/k8s-staging-kas-network-proxy/proxy-server:master --name ${{ env.KIND_CLUSTER_NAME}}
154-
/usr/local/bin/kind load docker-image gcr.io/k8s-staging-kas-network-proxy/proxy-agent:master --name ${{ env.KIND_CLUSTER_NAME}}
153+
/usr/local/bin/kind load docker-image gcr.io/k8s-staging-kas-network-proxy/proxy-server-amd64:local --name ${{ env.KIND_CLUSTER_NAME}}
154+
/usr/local/bin/kind load docker-image gcr.io/k8s-staging-kas-network-proxy/proxy-agent-amd64:local --name ${{ env.KIND_CLUSTER_NAME}}
155155
kubectl apply -f examples/kind/konnectivity-server.yaml
156156
kubectl apply -f examples/kind/konnectivity-agent-ds.yaml
157157

Makefile

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,14 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
# ARCH specifies the golang target platform, for docker build
16+
# targetes. It is supported for backward compatibility, but prefer
17+
# BUILDARCH and TARGETARCH.
1518
ARCH ?= amd64
19+
# BUILDARCH specifies the golang build platform, for docker build targets.
20+
BUILDARCH ?= amd64
21+
# TARGETARCH specifies the golang target platform, for docker build targets.
22+
TARGETARCH ?= $(ARCH)
1623
ARCH_LIST ?= amd64 arm arm64 ppc64le s390x
1724
RELEASE_ARCH_LIST = amd64 arm64
1825
# The output type could either be docker (local), or registry.
@@ -201,53 +208,53 @@ docker-push: docker-push/proxy-agent docker-push/proxy-server
201208
.PHONY: docker-build/proxy-agent
202209
docker-build/proxy-agent: cmd/agent/main.go proto/agent/agent.pb.go buildx-setup
203210
@[ "${TAG}" ] || ( echo "TAG is not set"; exit 1 )
204-
echo "Building proxy-agent for ${ARCH}"
205-
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(ARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg ARCH=$(ARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/agent-build.Dockerfile -t ${AGENT_FULL_IMAGE}-$(ARCH):${TAG}
211+
echo "Building proxy-agent with ${BUILDARCH} for ${TARGETARCH}"
212+
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(TARGETARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg BUILDARCH=$(BUILDARCH) --build-arg TARGETARCH=$(TARGETARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/agent-build.Dockerfile -t ${AGENT_FULL_IMAGE}-$(TARGETARCH):${TAG}
206213

207214
.PHONY: docker-push/proxy-agent
208215
docker-push/proxy-agent: docker-build/proxy-agent
209216
@[ "${DOCKER_CMD}" ] || ( echo "DOCKER_CMD is not set"; exit 1 )
210-
${DOCKER_CMD} push ${AGENT_FULL_IMAGE}-$(ARCH):${TAG}
217+
${DOCKER_CMD} push ${AGENT_FULL_IMAGE}-$(TARGETARCH):${TAG}
211218

212219
.PHONY: docker-build/proxy-server
213220
docker-build/proxy-server: cmd/server/main.go proto/agent/agent.pb.go buildx-setup
214221
@[ "${TAG}" ] || ( echo "TAG is not set"; exit 1 )
215-
echo "Building proxy-server for ${ARCH}"
216-
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(ARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg ARCH=$(ARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/server-build.Dockerfile -t ${SERVER_FULL_IMAGE}-$(ARCH):${TAG}
222+
echo "Building proxy-server with ${BUILDARCH} for ${TARGETARCH}"
223+
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(TARGETARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg BUILDARCH=$(BUILDARCH) --build-arg TARGETARCH=$(TARGETARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/server-build.Dockerfile -t ${SERVER_FULL_IMAGE}-$(TARGETARCH):${TAG}
217224

218225
.PHONY: docker-push/proxy-server
219226
docker-push/proxy-server: docker-build/proxy-server
220227
@[ "${DOCKER_CMD}" ] || ( echo "DOCKER_CMD is not set"; exit 1 )
221-
${DOCKER_CMD} push ${SERVER_FULL_IMAGE}-$(ARCH):${TAG}
228+
${DOCKER_CMD} push ${SERVER_FULL_IMAGE}-$(TARGETARCH):${TAG}
222229

223230
.PHONY: docker-build/proxy-test-client
224231
docker-build/proxy-test-client: cmd/test-client/main.go proto/agent/agent.pb.go buildx-setup
225232
@[ "${TAG}" ] || ( echo "TAG is not set"; exit 1 )
226-
echo "Building proxy-test-client for ${ARCH}"
227-
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(ARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg ARCH=$(ARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/test-client-build.Dockerfile -t ${TEST_CLIENT_FULL_IMAGE}-$(ARCH):${TAG}
233+
echo "Building proxy-test-client with ${BUILDARCH} for ${TARGETARCH}"
234+
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(TARGETARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg BUILDARCH=$(BUILDARCH) --build-arg TARGETARCH=$(TARGETARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/test-client-build.Dockerfile -t ${TEST_CLIENT_FULL_IMAGE}-$(TARGETARCH):${TAG}
228235

229236
.PHONY: docker-push/proxy-test-client
230237
docker-push/proxy-test-client: docker-build/proxy-test-client
231238
@[ "${DOCKER_CMD}" ] || ( echo "DOCKER_CMD is not set"; exit 1 )
232-
${DOCKER_CMD} push ${TEST_CLIENT_FULL_IMAGE}-$(ARCH):${TAG}
239+
${DOCKER_CMD} push ${TEST_CLIENT_FULL_IMAGE}-$(TARGETARCH):${TAG}
233240

234241
.PHONY: docker-build/http-test-server
235242
docker-build/http-test-server: cmd/test-server/main.go buildx-setup
236243
@[ "${TAG}" ] || ( echo "TAG is not set"; exit 1 )
237-
echo "Building http-test-server for ${ARCH}"
238-
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(ARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg ARCH=$(ARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/test-server-build.Dockerfile -t ${TEST_SERVER_FULL_IMAGE}-$(ARCH):${TAG}
244+
echo "Building http-test-server with ${BUILDARCH} for ${TARGETARCH}"
245+
${DOCKER_CMD} buildx build . --pull --output=type=$(OUTPUT_TYPE) --platform linux/$(TARGETARCH) --build-arg GO_TOOLCHAIN=$(GO_TOOLCHAIN) --build-arg GO_VERSION=$(GO_VERSION) --build-arg BUILDARCH=$(BUILDARCH) --build-arg TARGETARCH=$(TARGETARCH) --build-arg BASEIMAGE=$(BASEIMAGE) -f artifacts/images/test-server-build.Dockerfile -t ${TEST_SERVER_FULL_IMAGE}-$(TARGETARCH):${TAG}
239246

240247
.PHONY: docker-push/http-test-server
241248
docker-push/http-test-server: docker-build/http-test-server
242249
@[ "${DOCKER_CMD}" ] || ( echo "DOCKER_CMD is not set"; exit 1 )
243-
${DOCKER_CMD} push ${TEST_SERVER_FULL_IMAGE}-$(ARCH):${TAG}
250+
${DOCKER_CMD} push ${TEST_SERVER_FULL_IMAGE}-$(TARGETARCH):${TAG}
244251

245252
## --------------------------------------
246253
## Docker — All ARCH
247254
## --------------------------------------
248255

249256
# As `docker buildx` is time and resource consuming, if not necessary, building specific arch images,
250-
# like `make docker-build-arch-aamd64`, is recommended.
257+
# like `make docker-build-arch-amd64`, is recommended.
251258
.PHONY: docker-build-all
252259
docker-build-all: $(addprefix docker-build-arch-,$(ARCH_LIST))
253260

@@ -261,16 +268,16 @@ docker-build-arch-%:
261268
$(MAKE) docker-build/proxy-server-$*
262269

263270
docker-build/proxy-agent-%:
264-
$(MAKE) ARCH=$* docker-build/proxy-agent
271+
$(MAKE) TARGETARCH=$* docker-build/proxy-agent
265272

266273
docker-push/proxy-agent-%:
267-
$(MAKE) ARCH=$* docker-push/proxy-agent
274+
$(MAKE) TARGETARCH=$* docker-push/proxy-agent
268275

269276
docker-build/proxy-server-%:
270-
$(MAKE) ARCH=$* docker-build/proxy-server
277+
$(MAKE) TARGETARCH=$* docker-build/proxy-server
271278

272279
docker-push/proxy-server-%:
273-
$(MAKE) ARCH=$* docker-push/proxy-server
280+
$(MAKE) TARGETARCH=$* docker-push/proxy-server
274281

275282
.PHONY: docker-push-manifest/proxy-agent
276283
docker-push-manifest/proxy-agent: ## Push the fat manifest docker image.

artifacts/images/agent-build.Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# Build the proxy-agent binary
22

3+
ARG BUILDARCH
34
ARG GO_TOOLCHAIN
45
ARG GO_VERSION
56
ARG BASEIMAGE
67

7-
FROM ${GO_TOOLCHAIN}:${GO_VERSION} as builder
8+
FROM --platform=linux/${BUILDARCH} ${GO_TOOLCHAIN}:${GO_VERSION} as builder
89

910
# Copy in the go src
1011
WORKDIR /go/src/sigs.k8s.io/apiserver-network-proxy
@@ -26,8 +27,8 @@ COPY proto/ proto/
2627

2728

2829
# Build
29-
ARG ARCH
30-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o proxy-agent sigs.k8s.io/apiserver-network-proxy/cmd/agent
30+
ARG TARGETARCH
31+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o proxy-agent sigs.k8s.io/apiserver-network-proxy/cmd/agent
3132

3233
FROM ${BASEIMAGE}
3334

artifacts/images/server-build.Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# Build the proxy-server binary
22

3+
ARG BUILDARCH
34
ARG GO_TOOLCHAIN
45
ARG GO_VERSION
56
ARG BASEIMAGE
67

7-
FROM ${GO_TOOLCHAIN}:${GO_VERSION} as builder
8+
FROM --platform=linux/${BUILDARCH} ${GO_TOOLCHAIN}:${GO_VERSION} as builder
89

910
# Copy in the go src
1011
WORKDIR /go/src/sigs.k8s.io/apiserver-network-proxy
@@ -25,8 +26,8 @@ COPY cmd/ cmd/
2526
COPY proto/ proto/
2627

2728
# Build
28-
ARG ARCH
29-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o proxy-server sigs.k8s.io/apiserver-network-proxy/cmd/server
29+
ARG TARGETARCH
30+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o proxy-server sigs.k8s.io/apiserver-network-proxy/cmd/server
3031

3132
FROM ${BASEIMAGE}
3233

artifacts/images/test-client-build.Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# Build the client binary
22

3+
ARG BUILDARCH
34
ARG GO_TOOLCHAIN
45
ARG GO_VERSION
56
ARG BASEIMAGE
67

7-
FROM ${GO_TOOLCHAIN}:${GO_VERSION} as builder
8+
FROM --platform=linux/${BUILDARCH} ${GO_TOOLCHAIN}:${GO_VERSION} as builder
89

910
# Copy in the go src
1011
WORKDIR /go/src/sigs.k8s.io/apiserver-network-proxy
@@ -25,8 +26,8 @@ COPY cmd/ cmd/
2526
COPY proto/ proto/
2627

2728
# Build
28-
ARG ARCH
29-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o proxy-test-client sigs.k8s.io/apiserver-network-proxy/cmd/test-client
29+
ARG TARGETARCH
30+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o proxy-test-client sigs.k8s.io/apiserver-network-proxy/cmd/test-client
3031

3132
FROM ${BASEIMAGE}
3233

artifacts/images/test-server-build.Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
# Build the http test server binary
22

3+
ARG BUILDARCH
34
ARG GO_TOOLCHAIN
45
ARG GO_VERSION
56
ARG BASEIMAGE
67

7-
FROM ${GO_TOOLCHAIN}:${GO_VERSION} as builder
8+
FROM --platform=linux/${BUILDARCH} ${GO_TOOLCHAIN}:${GO_VERSION} as builder
89

910
# Copy in the go src
1011
WORKDIR /go/src/sigs.k8s.io/apiserver-network-proxy
@@ -24,8 +25,8 @@ COPY pkg/ pkg/
2425
COPY cmd/ cmd/
2526

2627
# Build
27-
ARG ARCH
28-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o http-test-server sigs.k8s.io/apiserver-network-proxy/cmd/test-server
28+
ARG TARGETARCH
29+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} go build -mod=vendor -v -a -ldflags '-extldflags "-static"' -o http-test-server sigs.k8s.io/apiserver-network-proxy/cmd/test-server
2930

3031
FROM ${BASEIMAGE}
3132

examples/kind/konnectivity-agent-ds.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ spec:
3636
dnsPolicy: ClusterFirstWithHostNet
3737
containers:
3838
- name: konnectivity-agent-container
39-
image: gcr.io/k8s-staging-kas-network-proxy/proxy-agent:master
39+
image: gcr.io/k8s-staging-kas-network-proxy/proxy-agent-amd64:local
40+
imagePullPolicy: Never
4041
resources:
4142
requests:
4243
cpu: 50m

examples/kind/konnectivity-server.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ spec:
5555
hostNetwork: true
5656
containers:
5757
- name: konnectivity-server-container
58-
image: gcr.io/k8s-staging-kas-network-proxy/proxy-server:master
58+
image: gcr.io/k8s-staging-kas-network-proxy/proxy-server-amd64:local
59+
imagePullPolicy: Never
5960
resources:
6061
requests:
6162
cpu: 1m

0 commit comments

Comments
 (0)