re-enable multicluster tests (#16447)

* update refs

Signed-off-by: Daniel Hawton <daniel@hawton.org>

* re-add tests

Signed-off-by: Daniel Hawton <daniel@hawton.org>

---------

Signed-off-by: Daniel Hawton <daniel@hawton.org>
This commit is contained in:
Daniel Hawton 2025-04-29 21:55:37 +02:00 committed by GitHub
parent 78f9442d68
commit 6ef3a56712
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 634 additions and 5 deletions

View File

@ -0,0 +1,84 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090,SC2154
# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# @setup multicluster
set -e
set -u
set -o pipefail
source content/en/docs/setup/install/multicluster/common.sh
set_single_network_vars
setup_helm_repo
function install_istio_helm {
# Install Istio on the 2 clusters. Executing in
# parallel to reduce test time.
install_istio_on_cluster1_helm &
install_istio_on_cluster2_helm &
wait
}
function install_istio_on_cluster1_helm {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER1}"
snip_configure_cluster1_as_a_primary_3
snip_configure_cluster1_as_a_primary_4
}
function install_istio_on_cluster2_helm {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER2}"
snip_configure_cluster2_as_a_primary_3
snip_configure_cluster2_as_a_primary_4
}
function enable_endpoint_discovery {
snip_enable_endpoint_discovery_1
snip_enable_endpoint_discovery_2
}
time configure_trust
time install_istio_helm
time enable_endpoint_discovery
time verify_load_balancing
# @cleanup
source content/en/docs/setup/install/multicluster/common.sh
set_single_network_vars
function cleanup_cluster1_helm {
snip_cleanup_3
snip_cleanup_4
snip_delete_sample_ns_cluster_1
}
function cleanup_cluster2_helm {
snip_cleanup_5
snip_cleanup_6
snip_delete_sample_ns_cluster_2
}
function cleanup_helm {
cleanup_cluster1_helm
cleanup_cluster2_helm
snip_delete_crds
}
time cleanup_helm
# Everything should be removed once cleanup completes. Use a small
# timeout for comparing cluster snapshots before/after the test.
export VERIFY_TIMEOUT=20

View File

@ -3,7 +3,7 @@ title: Install Multi-Primary
description: Install an Istio mesh across multiple primary clusters.
weight: 10
keywords: [kubernetes,multicluster]
test: no
test: yes
owner: istio/wg-environments-maintainers
---
Follow this guide to install the Istio control plane on both `cluster1` and

View File

@ -0,0 +1,110 @@
#!/bin/bash
# shellcheck disable=SC2034,SC2153,SC2155,SC2164
# Copyright Istio Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
####################################################################################################
# WARNING: THIS IS AN AUTO-GENERATED FILE, DO NOT EDIT. PLEASE MODIFY THE ORIGINAL MARKDOWN FILE:
# docs/setup/install/multicluster/multi-primary/index.md
####################################################################################################
snip_configure_cluster1_as_a_primary_1() {
cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
EOF
}
snip_configure_cluster1_as_a_primary_2() {
istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
}
snip_configure_cluster1_as_a_primary_3() {
helm install istio-base istio/base -n istio-system --kube-context "${CTX_CLUSTER1}"
}
snip_configure_cluster1_as_a_primary_4() {
helm install istiod istio/istiod -n istio-system --kube-context "${CTX_CLUSTER1}" --set global.meshID=mesh1 --set global.multiCluster.clusterName=cluster1 --set global.network=network1
}
snip_configure_cluster2_as_a_primary_1() {
cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network1
EOF
}
snip_configure_cluster2_as_a_primary_2() {
istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
}
snip_configure_cluster2_as_a_primary_3() {
helm install istio-base istio/base -n istio-system --kube-context "${CTX_CLUSTER2}"
}
snip_configure_cluster2_as_a_primary_4() {
helm install istiod istio/istiod -n istio-system --kube-context "${CTX_CLUSTER2}" --set global.meshID=mesh1 --set global.multiCluster.clusterName=cluster2 --set global.network=network1
}
snip_enable_endpoint_discovery_1() {
istioctl create-remote-secret \
--context="${CTX_CLUSTER1}" \
--name=cluster1 | \
kubectl apply -f - --context="${CTX_CLUSTER2}"
}
snip_enable_endpoint_discovery_2() {
istioctl create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
}
snip_cleanup_3() {
helm delete istiod -n istio-system --kube-context "${CTX_CLUSTER1}"
helm delete istio-base -n istio-system --kube-context "${CTX_CLUSTER1}"
}
snip_cleanup_4() {
kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
}
snip_cleanup_5() {
helm delete istiod -n istio-system --kube-context "${CTX_CLUSTER2}"
helm delete istio-base -n istio-system --kube-context "${CTX_CLUSTER2}"
}
snip_cleanup_6() {
kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
}
snip_delete_crds() {
kubectl get crd -oname --context "${CTX_CLUSTER1}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER1}"
kubectl get crd -oname --context "${CTX_CLUSTER2}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER2}"
}

View File

@ -0,0 +1,64 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090,SC2154
# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# @setup multicluster
set -e
set -u
set -o pipefail
source content/en/docs/setup/install/multicluster/common.sh
set_single_network_vars
function install_istio_on_cluster1_istioctl {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER1}"
snip_configure_cluster1_as_a_primary_1
echo y | snip_configure_cluster1_as_a_primary_2
}
function install_istio_on_cluster2_istioctl {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER2}"
snip_configure_cluster2_as_a_primary_1
echo y | snip_configure_cluster2_as_a_primary_2
}
function install_istio_istioctl {
# Install Istio on the 2 clusters. Executing in
# parallel to reduce test time.
install_istio_on_cluster1_istioctl &
install_istio_on_cluster2_istioctl &
wait
}
function enable_endpoint_discovery {
snip_enable_endpoint_discovery_1
snip_enable_endpoint_discovery_2
}
time configure_trust
time install_istio_istioctl
time enable_endpoint_discovery
time verify_load_balancing
# @cleanup
source content/en/docs/setup/install/multicluster/common.sh
set_single_network_vars
time cleanup_istioctl
# Everything should be removed once cleanup completes. Use a small
# timeout for comparing cluster snapshots before/after the test.
export VERIFY_TIMEOUT=20

View File

@ -0,0 +1,113 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090,SC2154
# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# @setup multicluster
set -e
set -u
set -o pipefail
source content/en/docs/setup/install/multicluster/common.sh
set_multi_network_vars
setup_helm_repo
function install_istio_on_cluster1_helm {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER1}"
snip_set_the_default_network_for_cluster1_1
snip_configure_cluster1_as_a_primary_3
snip_configure_cluster1_as_a_primary_4
echo "Creating the east-west gateway"
snip_install_the_eastwest_gateway_in_cluster1_2
echo "Waiting for the east-west gateway to have an external IP"
_verify_like snip_install_the_eastwest_gateway_in_cluster1_3 "$snip_install_the_eastwest_gateway_in_cluster1_3_out"
echo "Exposing services via the east-west gateway"
snip_expose_services_in_cluster1_1
}
function install_istio_on_cluster2_helm {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER2}"
snip_set_the_default_network_for_cluster2_1
snip_configure_cluster2_as_a_primary_3
snip_configure_cluster2_as_a_primary_4
echo "Creating the east-west gateway"
snip_install_the_eastwest_gateway_in_cluster2_2
echo "Waiting for the east-west gateway to have an external IP"
_verify_like snip_install_the_eastwest_gateway_in_cluster2_3 "$snip_install_the_eastwest_gateway_in_cluster2_3_out"
echo "Exposing services via the east-west gateway"
snip_expose_services_in_cluster2_1
}
function install_istio_helm {
# Install Istio on the 2 clusters. Executing in
# parallel to reduce test time.
install_istio_on_cluster1_helm &
install_istio_on_cluster2_helm &
wait
}
function enable_endpoint_discovery {
snip_enable_endpoint_discovery_1
snip_enable_endpoint_discovery_2
}
function delete_crds_cluster_1() {
kubectl get crd -oname --context "${CTX_CLUSTER1}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER1}"
}
time delete_crds_cluster_1
time configure_trust
time install_istio_helm
time enable_endpoint_discovery
time verify_load_balancing
# @cleanup
source content/en/docs/setup/install/multicluster/common.sh
set_multi_network_vars
function cleanup_cluster1_helm {
snip_cleanup_3
snip_cleanup_4
snip_delete_sample_ns_cluster_1
}
function cleanup_cluster2_helm {
snip_cleanup_5
snip_cleanup_6
snip_delete_sample_ns_cluster_2
}
function cleanup_helm {
cleanup_cluster1_helm
cleanup_cluster2_helm
snip_delete_crds
}
time cleanup_helm
# Everything should be removed once cleanup completes. Use a small
# timeout for comparing cluster snapshots before/after the test.
export VERIFY_TIMEOUT=20

View File

@ -3,7 +3,7 @@ title: Install Multi-Primary on different networks
description: Install an Istio mesh across multiple primary clusters on different networks.
weight: 30
keywords: [kubernetes,multicluster]
test: no
test: yes
owner: istio/wg-environments-maintainers
---
Follow this guide to install the Istio control plane on both `cluster1` and

View File

@ -0,0 +1,170 @@
#!/bin/bash
# shellcheck disable=SC2034,SC2153,SC2155,SC2164
# Copyright Istio Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
####################################################################################################
# WARNING: THIS IS AN AUTO-GENERATED FILE, DO NOT EDIT. PLEASE MODIFY THE ORIGINAL MARKDOWN FILE:
# docs/setup/install/multicluster/multi-primary_multi-network/index.md
####################################################################################################
snip_set_the_default_network_for_cluster1_1() {
kubectl --context="${CTX_CLUSTER1}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER1}" label namespace istio-system topology.istio.io/network=network1
}
snip_configure_cluster1_as_a_primary_1() {
cat <<EOF > cluster1.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster1
network: network1
EOF
}
snip_configure_cluster1_as_a_primary_2() {
istioctl install --context="${CTX_CLUSTER1}" -f cluster1.yaml
}
snip_configure_cluster1_as_a_primary_3() {
helm install istio-base istio/base -n istio-system --kube-context "${CTX_CLUSTER1}"
}
snip_configure_cluster1_as_a_primary_4() {
helm install istiod istio/istiod -n istio-system --kube-context "${CTX_CLUSTER1}" --set global.meshID=mesh1 --set global.multiCluster.clusterName=cluster1 --set global.network=network1
}
snip_install_the_eastwest_gateway_in_cluster1_1() {
samples/multicluster/gen-eastwest-gateway.sh \
--network network1 | \
istioctl --context="${CTX_CLUSTER1}" install -y -f -
}
snip_install_the_eastwest_gateway_in_cluster1_2() {
helm install istio-eastwestgateway istio/gateway -n istio-system --kube-context "${CTX_CLUSTER1}" --set name=istio-eastwestgateway --set networkGateway=network1
}
snip_install_the_eastwest_gateway_in_cluster1_3() {
kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system
}
! IFS=$'\n' read -r -d '' snip_install_the_eastwest_gateway_in_cluster1_3_out <<\ENDSNIP
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.80.6.124 34.75.71.237 ... 51s
ENDSNIP
snip_expose_services_in_cluster1_1() {
kubectl --context="${CTX_CLUSTER1}" apply -n istio-system -f \
samples/multicluster/expose-services.yaml
}
snip_set_the_default_network_for_cluster2_1() {
kubectl --context="${CTX_CLUSTER2}" get namespace istio-system && \
kubectl --context="${CTX_CLUSTER2}" label namespace istio-system topology.istio.io/network=network2
}
snip_configure_cluster2_as_a_primary_1() {
cat <<EOF > cluster2.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
values:
global:
meshID: mesh1
multiCluster:
clusterName: cluster2
network: network2
EOF
}
snip_configure_cluster2_as_a_primary_2() {
istioctl install --context="${CTX_CLUSTER2}" -f cluster2.yaml
}
snip_configure_cluster2_as_a_primary_3() {
helm install istio-base istio/base -n istio-system --kube-context "${CTX_CLUSTER2}"
}
snip_configure_cluster2_as_a_primary_4() {
helm install istiod istio/istiod -n istio-system --kube-context "${CTX_CLUSTER2}" --set global.meshID=mesh1 --set global.multiCluster.clusterName=cluster2 --set global.network=network2
}
snip_install_the_eastwest_gateway_in_cluster2_1() {
samples/multicluster/gen-eastwest-gateway.sh \
--network network2 | \
istioctl --context="${CTX_CLUSTER2}" install -y -f -
}
snip_install_the_eastwest_gateway_in_cluster2_2() {
helm install istio-eastwestgateway istio/gateway -n istio-system --kube-context "${CTX_CLUSTER2}" --set name=istio-eastwestgateway --set networkGateway=network2
}
snip_install_the_eastwest_gateway_in_cluster2_3() {
kubectl --context="${CTX_CLUSTER2}" get svc istio-eastwestgateway -n istio-system
}
! IFS=$'\n' read -r -d '' snip_install_the_eastwest_gateway_in_cluster2_3_out <<\ENDSNIP
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-eastwestgateway LoadBalancer 10.0.12.121 34.122.91.98 ... 51s
ENDSNIP
snip_expose_services_in_cluster2_1() {
kubectl --context="${CTX_CLUSTER2}" apply -n istio-system -f \
samples/multicluster/expose-services.yaml
}
snip_enable_endpoint_discovery_1() {
istioctl create-remote-secret \
--context="${CTX_CLUSTER1}" \
--name=cluster1 | \
kubectl apply -f - --context="${CTX_CLUSTER2}"
}
snip_enable_endpoint_discovery_2() {
istioctl create-remote-secret \
--context="${CTX_CLUSTER2}" \
--name=cluster2 | \
kubectl apply -f - --context="${CTX_CLUSTER1}"
}
snip_cleanup_3() {
helm delete istiod -n istio-system --kube-context "${CTX_CLUSTER1}"
helm delete istio-eastwestgateway -n istio-system --kube-context "${CTX_CLUSTER1}"
helm delete istio-base -n istio-system --kube-context "${CTX_CLUSTER1}"
}
snip_cleanup_4() {
kubectl delete ns istio-system --context="${CTX_CLUSTER1}"
}
snip_cleanup_5() {
helm delete istiod -n istio-system --kube-context "${CTX_CLUSTER2}"
helm delete istio-eastwestgateway -n istio-system --kube-context "${CTX_CLUSTER2}"
helm delete istio-base -n istio-system --kube-context "${CTX_CLUSTER2}"
}
snip_cleanup_6() {
kubectl delete ns istio-system --context="${CTX_CLUSTER2}"
}
snip_delete_crds() {
kubectl get crd -oname --context "${CTX_CLUSTER1}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER1}"
kubectl get crd -oname --context "${CTX_CLUSTER2}" | grep --color=never 'istio.io' | xargs kubectl delete --context "${CTX_CLUSTER2}"
}

View File

@ -0,0 +1,88 @@
#!/usr/bin/env bash
# shellcheck disable=SC1090,SC2154
# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# @setup multicluster
set -e
set -u
set -o pipefail
source content/en/docs/setup/install/multicluster/common.sh
set_multi_network_vars
function install_istio_on_cluster1_istioctl {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER1}"
snip_set_the_default_network_for_cluster1_1
snip_configure_cluster1_as_a_primary_1
echo y | snip_configure_cluster1_as_a_primary_2
echo "Creating the east-west gateway"
snip_install_the_eastwest_gateway_in_cluster1_1
echo "Waiting for the east-west gateway to have an external IP"
_verify_like snip_install_the_eastwest_gateway_in_cluster1_3 "$snip_install_the_eastwest_gateway_in_cluster1_3_out"
echo "Exposing services via the east-west gateway"
snip_expose_services_in_cluster1_1
}
function install_istio_on_cluster2_istioctl {
echo "Installing Istio on Primary cluster: ${CTX_CLUSTER2}"
snip_set_the_default_network_for_cluster2_1
snip_configure_cluster2_as_a_primary_1
echo y | snip_configure_cluster2_as_a_primary_2
echo "Creating the east-west gateway"
snip_install_the_eastwest_gateway_in_cluster2_1
echo "Waiting for the east-west gateway to have an external IP"
_verify_like snip_install_the_eastwest_gateway_in_cluster2_3 "$snip_install_the_eastwest_gateway_in_cluster2_3_out"
echo "Exposing services via the east-west gateway"
snip_expose_services_in_cluster2_1
}
function install_istio_istioctl {
# Install Istio on the 2 clusters. Executing in
# parallel to reduce test time.
install_istio_on_cluster1_istioctl &
install_istio_on_cluster2_istioctl &
wait
}
function enable_endpoint_discovery {
snip_enable_endpoint_discovery_1
snip_enable_endpoint_discovery_2
}
time configure_trust
time install_istio_istioctl
time enable_endpoint_discovery
time verify_load_balancing
# @cleanup
source content/en/docs/setup/install/multicluster/common.sh
set_multi_network_vars
time cleanup_istioctl
# Everything should be removed once cleanup completes. Use a small
# timeout for comparing cluster snapshots before/after the test.
export VERIFY_TIMEOUT=20

2
go.mod
View File

@ -10,7 +10,7 @@ replace github.com/imdario/mergo => github.com/imdario/mergo v0.3.5
require (
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
golang.org/x/sync v0.12.0
istio.io/istio v0.0.0-20250425103452-b5e12208b460
istio.io/istio v0.0.0-20250429153437-582e8cb8e737
k8s.io/apimachinery v0.32.3
k8s.io/client-go v0.32.3
)

4
go.sum
View File

@ -535,8 +535,8 @@ istio.io/api v1.26.0-alpha.0.0.20250418093427-399a2989a851 h1:dkPyjj4KgzhWeIpiaB
istio.io/api v1.26.0-alpha.0.0.20250418093427-399a2989a851/go.mod h1:DTVGH6CLXj5W8FF9JUD3Tis78iRgT1WeuAnxfTz21Wg=
istio.io/client-go v1.26.0-alpha.0.0.20250418094024-8e9539052994 h1:oq79orVNuTrci1u15Gxi2wMRE/YOeWOPj8Zmi5uT9LU=
istio.io/client-go v1.26.0-alpha.0.0.20250418094024-8e9539052994/go.mod h1:1nRkn8XmI8AZVKElaLsC79jrVqS+PPIu1EczNvmGst8=
istio.io/istio v0.0.0-20250425103452-b5e12208b460 h1:kKtIesl1MgogjVLp1O9ZeyVAIfhG8WCo+H8gHSfJWrs=
istio.io/istio v0.0.0-20250425103452-b5e12208b460/go.mod h1:/XkOXJQYhuNBNG1F9MjVwtdIKPUW/eluopLuY8MhVH0=
istio.io/istio v0.0.0-20250429153437-582e8cb8e737 h1:8vYSDEfpbjwRn+q78xQfNzp1AhF2RzjpR1mdpLAN0Ig=
istio.io/istio v0.0.0-20250429153437-582e8cb8e737/go.mod h1:/XkOXJQYhuNBNG1F9MjVwtdIKPUW/eluopLuY8MhVH0=
k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY=