m/n/kubernetes: introduce feature gate infra

This introduces centralized infrastructure to control feature gates in K8s.

It includes a test to make sure that we do not keep outdated flags in there.

Change-Id: Ife251cbd5210bc8b3757bb3829e91bcdb2e6fdfb
Reviewed-on: https://review.monogon.dev/c/monogon/+/3664
Reviewed-by: Tim Windelschmidt <tim@monogon.tech>
Tested-by: Jenkins CI
diff --git a/metropolis/node/kubernetes/BUILD.bazel b/metropolis/node/kubernetes/BUILD.bazel
index 787a9c7..9f51ba0 100644
--- a/metropolis/node/kubernetes/BUILD.bazel
+++ b/metropolis/node/kubernetes/BUILD.bazel
@@ -1,4 +1,4 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
 
 go_library(
     name = "kubernetes",
@@ -7,6 +7,7 @@
         "apiserver.go",
         "controller-manager.go",
         "csi.go",
+        "feature_gates.go",
         "kubelet.go",
         "labelmaker.go",
         "provisioner.go",
@@ -62,6 +63,7 @@
         "@io_k8s_client_go//tools/record",
         "@io_k8s_client_go//tools/reference",
         "@io_k8s_client_go//util/workqueue",
+        "@io_k8s_component_base//featuregate",
         "@io_k8s_kubelet//config/v1beta1",
         "@io_k8s_kubelet//pkg/apis/pluginregistration/v1:pluginregistration",
         "@io_k8s_kubernetes//plugin/pkg/admission/security/podsecurity",
@@ -73,3 +75,13 @@
         "@org_golang_x_sys//unix",
     ],
 )
+
+go_test(
+    name = "kubernetes_test",
+    srcs = ["feature_gates_test.go"],
+    embed = [":kubernetes"],
+    deps = [
+        "@io_k8s_apiserver//pkg/util/feature",
+        "@io_k8s_component_base//featuregate",
+    ],
+)