third_party/linux: build using unhermetic rule

This replaces ad-hoc genrules (for the node Linux image and the ktest
image) with a real Bazel rule with an attached transition which ensures
we end up with the same-ish configurations for all builds of an image.

This reduces rebuilds of the ktest Linux kernel, from three down to one.

Before: https://drive.google.com/file/d/1c6VmY2bqx9Pgs61TOUfgMi8Sn0WQeobu/view

After: https://drive.google.com/file/d/13eO1rLhoBCMMRUKrmJz8QnhdAR3ctIGb/view

We also drive-by fix the Kubernetes CTS test suite to run on a single-node
Cluster (instead of failing early due to that being currently reworked).

Test Plan: Build system refactor, following existing test.

X-Origin-Diff: phab/D761
GitOrigin-RevId: b5545ac5fd402fbf0340d941a90b9ea6ea0b6d43
diff --git a/metropolis/test/ktest/BUILD b/metropolis/test/ktest/BUILD
index cfbce55..e994c48 100644
--- a/metropolis/test/ktest/BUILD
+++ b/metropolis/test/ktest/BUILD
@@ -1,5 +1,6 @@
 load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
 load("//metropolis/node/build/kconfig-patcher:kconfig-patcher.bzl", "kconfig_patch")
+load("//third_party/linux:def.bzl", "linux_image")
 
 go_library(
     name = "go_default_library",
@@ -18,7 +19,7 @@
 
 kconfig_patch(
     name = "testing-config",
-    src = "//third_party/linux:kernel-config",
+    src = "//third_party/linux:linux-metropolis.config",
     out = "testing.config",
     override_configs = {
         # Unlock command line
@@ -33,27 +34,15 @@
     },
 )
 
-genrule(
+linux_image(
     name = "linux-testing",
-    srcs = [
-        "@linux//:all",
-        ":testing-config",
+    image_format = "vmlinux",
+    kernel_config = ":testing-config",
+    # This image is directly used by the ktest macro, thus it needs a pretty
+    # wide visibility.
+    visibility = [
+        "//metropolis:__subpackages__",
     ],
-    outs = [
-        "linux-testing.elf",
-    ],
-    cmd = """
-    DIR=external/linux
-
-    mkdir $$DIR/.bin
-
-    cp $(location :testing-config) $$DIR/.config
-
-    (cd $$DIR && make -j $$(nproc) vmlinux >/dev/null)
-
-    cp $$DIR/vmlinux $@
-    """,
-    visibility = ["//metropolis:__subpackages__"],
 )
 
 filegroup(