Skip to content

Commit 46d0b2c

Browse files
committed
ci: forge kubeconfig from service-account
1 parent de96cea commit 46d0b2c

File tree

6 files changed

+103
-61
lines changed

6 files changed

+103
-61
lines changed

pkg/liqoctl/test/network/setup/namespace.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func RemoveNamespace(ctx context.Context, cl *client.Client) error {
7474
if err := cl.Consumer.Delete(ctx, ns); err != nil {
7575
return err
7676
}
77-
timeout, cancel := context.WithTimeout(ctx, 1*time.Minute)
77+
timeout, cancel := context.WithTimeout(ctx, 10*time.Minute)
7878
defer cancel()
7979
if err := wait.PollUntilContextCancel(timeout, 1*time.Second, true, func(ctx context.Context) (done bool, err error) {
8080
if err := cl.Consumer.Get(ctx, ctrlclient.ObjectKeyFromObject(ns), ns); err != nil {

test/e2e/cruise/apiserverinteraction/apiserver_interaction_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ var _ = Describe("Liqo E2E", func() {
9797
_, err := util.EnforceNamespace(ctx, testContext.Clusters[0].NativeClient, testContext.Clusters[0].Cluster, namespaceName)
9898
Expect(err).ToNot(HaveOccurred())
9999

100+
By("Ensuring virtual nodes are ready")
101+
Eventually(func() bool {
102+
return util.CheckVirtualNodes(ctx, testContext.Clusters[0].NativeClient, clustersRequired)
103+
}, timeout, interval).Should(BeTrue())
104+
100105
Expect(util.OffloadNamespace(testContext.Clusters[0].KubeconfigPath, namespaceName,
101106
"--pod-offloading-strategy", "Remote")).To(Succeed())
102107
time.Sleep(2 * time.Second)

test/e2e/pipeline/infra/kubeadm/pre-requirements.sh

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
# POD_CIDR_OVERLAPPING -> the pod CIDR of the clusters is overlapping
1919
# CLUSTER_TEMPLATE_FILE -> the file where the cluster template is stored
2020

21-
set -e # Fail in case of error
22-
set -o nounset # Fail if undefined variables are used
23-
set -o pipefail # Fail if one of the piped commands fails
21+
set -e # Fail in case of error
22+
set -o nounset # Fail if undefined variables are used
23+
set -o pipefail # Fail if one of the piped commands fails
2424

2525
error() {
2626
local sourcefile=$1
@@ -43,3 +43,5 @@ install_kubectl "${OS}" "${ARCH}" "${K8S_VERSION}"
4343
install_helm "${OS}" "${ARCH}"
4444

4545
install_clusterctl "${OS}" "${ARCH}"
46+
47+
generate_kubeconfig

test/e2e/pipeline/infra/kubeadm/setup.sh

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
# CLUSTER_TEMPLATE_FILE -> the file where the cluster template is stored
2020
# CNI -> the CNI plugin used
2121

22-
set -e # Fail in case of error
23-
set -o nounset # Fail if undefined variables are used
24-
set -o pipefail # Fail if one of the piped commands fails
22+
set -e # Fail in case of error
23+
set -o nounset # Fail if undefined variables are used
24+
set -o pipefail # Fail if one of the piped commands fails
2525

2626
error() {
27-
local sourcefile=$1
28-
local lineno=$2
29-
echo "An error occurred at $sourcefile:$lineno."
27+
local sourcefile=$1
28+
local lineno=$2
29+
echo "An error occurred at $sourcefile:$lineno."
3030
}
3131
trap 'error "${BASH_SOURCE}" "${LINENO}"' ERR
3232

@@ -38,7 +38,7 @@ WORKDIR=$(dirname "$FILEPATH")
3838
source "$WORKDIR/../../utils.sh"
3939

4040
# shellcheck disable=SC1091
41-
# shellcheck source=../cni.sh
41+
# shellcheck source=../cni.sh
4242
source "$WORKDIR/../cni.sh"
4343

4444
export K8S_VERSION=${K8S_VERSION:-"1.29.7"}
@@ -56,17 +56,17 @@ export POD_CIDR_OVERLAPPING=${POD_CIDR_OVERLAPPING:-"false"}
5656

5757
TARGET_NAMESPACE="liqo-ci"
5858

59-
for i in $(seq 1 "${CLUSTER_NUMBER}");
60-
do
59+
for i in $(seq 1 "${CLUSTER_NUMBER}"); do
6160
CAPI_CLUSTER_NAME=$(forge_clustername "${i}")
62-
if [[ ${POD_CIDR_OVERLAPPING} != "true" ]]; then
63-
# this should avoid the ipam to reserve a pod CIDR of another cluster as local external CIDR causing remapping
64-
export POD_CIDR="10.$((i * 10)).0.0/16"
65-
fi
66-
echo "Creating cluster ${CAPI_CLUSTER_NAME}"
61+
if [[ ${POD_CIDR_OVERLAPPING} != "true" ]]; then
62+
# this should avoid the ipam to reserve a pod CIDR of another cluster as local external CIDR causing remapping
63+
export POD_CIDR="10.$((i * 10)).0.0/16"
64+
fi
65+
echo "Creating cluster ${CAPI_CLUSTER_NAME}"
6766
POD_CIDR_ESC_1=$(echo $POD_CIDR | cut -d'/' -f1)
6867
POD_CIDR_ESC_2=$(echo $POD_CIDR | cut -d'/' -f2)
6968
POD_CIDR_ESC="${POD_CIDR_ESC_1}\/${POD_CIDR_ESC_2}"
69+
7070
clusterctl generate cluster "${CAPI_CLUSTER_NAME}" \
7171
--kubernetes-version "$K8S_VERSION" \
7272
--control-plane-machine-count 1 \
@@ -75,19 +75,18 @@ do
7575
--infrastructure kubevirt | sed "s/10.243.0.0\/16/$POD_CIDR_ESC/g" | ${KUBECTL} apply -f -
7676
done
7777

78-
for i in $(seq 1 "${CLUSTER_NUMBER}");
79-
do
78+
for i in $(seq 1 "${CLUSTER_NUMBER}"); do
8079
CAPI_CLUSTER_NAME=$(forge_clustername "${i}")
8180
if [[ ${POD_CIDR_OVERLAPPING} != "true" ]]; then
82-
# this should avoid the ipam to reserve a pod CIDR of another cluster as local external CIDR causing remapping
83-
export POD_CIDR="10.$((i * 10)).0.0/16"
84-
fi
81+
# this should avoid the ipam to reserve a pod CIDR of another cluster as local external CIDR causing remapping
82+
export POD_CIDR="10.$((i * 10)).0.0/16"
83+
fi
8584
echo "Waiting for cluster ${CAPI_CLUSTER_NAME} to be ready"
8685
"${KUBECTL}" wait --for condition=Ready=true -n "$TARGET_NAMESPACE" "clusters.cluster.x-k8s.io/${CAPI_CLUSTER_NAME}" --timeout=-1s
8786

8887
echo "Getting kubeconfig for cluster ${CAPI_CLUSTER_NAME}"
8988
mkdir -p "${TMPDIR}/kubeconfigs"
90-
clusterctl get kubeconfig -n "$TARGET_NAMESPACE" "${CAPI_CLUSTER_NAME}" > "${TMPDIR}/kubeconfigs/liqo_kubeconf_${i}"
89+
clusterctl get kubeconfig -n "$TARGET_NAMESPACE" "${CAPI_CLUSTER_NAME}" >"${TMPDIR}/kubeconfigs/liqo_kubeconf_${i}"
9190

9291
CURRENT_CONTEXT=$("${KUBECTL}" config current-context --kubeconfig "${TMPDIR}/kubeconfigs/liqo_kubeconf_${i}")
9392
"${KUBECTL}" config set contexts."${CURRENT_CONTEXT}".namespace default --kubeconfig "${TMPDIR}/kubeconfigs/liqo_kubeconf_${i}"
@@ -102,8 +101,7 @@ do
102101
install_metrics_server "${TMPDIR}/kubeconfigs/liqo_kubeconf_${i}"
103102
done
104103

105-
for i in $(seq 1 "${CLUSTER_NUMBER}");
106-
do
104+
for i in $(seq 1 "${CLUSTER_NUMBER}"); do
107105
echo "Waiting for cluster ${CAPI_CLUSTER_NAME} CNI to be ready"
108106
"wait_${CNI}" "${TMPDIR}/kubeconfigs/liqo_kubeconf_${i}"
109107
done

test/e2e/pipeline/utils.sh

Lines changed: 71 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,34 @@ waitandretry() {
3636
fi
3737
}
3838

39-
function setup_arch_and_os(){
39+
function setup_arch_and_os() {
4040
ARCH=$(uname -m)
4141
case $ARCH in
42-
armv5*) ARCH="armv5";;
43-
armv6*) ARCH="armv6";;
44-
armv7*) ARCH="arm";;
45-
aarch64) ARCH="arm64";;
46-
x86) ARCH="386";;
47-
x86_64) ARCH="amd64";;
48-
i686) ARCH="386";;
49-
i386) ARCH="386";;
50-
*) echo "Error architecture '${ARCH}' unknown"; exit 1 ;;
42+
armv5*) ARCH="armv5" ;;
43+
armv6*) ARCH="armv6" ;;
44+
armv7*) ARCH="arm" ;;
45+
aarch64) ARCH="arm64" ;;
46+
x86) ARCH="386" ;;
47+
x86_64) ARCH="amd64" ;;
48+
i686) ARCH="386" ;;
49+
i386) ARCH="386" ;;
50+
*)
51+
echo "Error architecture '${ARCH}' unknown"
52+
exit 1
53+
;;
5154
esac
5255

53-
OS=$(uname |tr '[:upper:]' '[:lower:]')
56+
OS=$(uname | tr '[:upper:]' '[:lower:]')
5457
case "$OS" in
5558
# Minimalist GNU for Windows
56-
"mingw"*) OS='windows'; return ;;
59+
"mingw"*)
60+
OS='windows'
61+
return
62+
;;
5763
esac
5864
}
5965

60-
61-
function check_supported_arch_and_os(){
66+
function check_supported_arch_and_os() {
6267
local supported=$1
6368
local os=$2
6469
local arch=$3
@@ -89,8 +94,7 @@ function install_kubectl() {
8994
version=$(curl -L -s https://dl.k8s.io/release/stable.txt)
9095
fi
9196

92-
if ! command -v "${KUBECTL}" &> /dev/null
93-
then
97+
if ! command -v "${KUBECTL}" &>/dev/null; then
9498
echo "WARNING: kubectl could not be found. Downloading and installing it locally..."
9599
echo "Downloading https://dl.k8s.io/release/${version}/bin/${os}/${arch}/kubectl"
96100
if ! curl --fail -Lo "${KUBECTL}" "https://dl.k8s.io/release/${version}/bin/${os}/${arch}/kubectl"; then
@@ -114,8 +118,7 @@ function install_helm() {
114118

115119
HELM_VERSION="v3.15.3"
116120

117-
if ! command -v "${HELM}" &> /dev/null
118-
then
121+
if ! command -v "${HELM}" &>/dev/null; then
119122
echo "WARNING: helm could not be found. Downloading and installing it locally..."
120123
if ! curl --fail -Lo "./helm-${HELM_VERSION}-${os}-${arch}.tar.gz" "https://get.helm.sh/helm-${HELM_VERSION}-${os}-${arch}.tar.gz"; then
121124
echo "Error: Unable to download helm for '${os}-${arch}'"
@@ -159,27 +162,24 @@ function install_gcloud() {
159162
cd -
160163

161164
#Login to gcloud
162-
echo "${GCLOUD_KEY}" | base64 -d > "${BINDIR}/gke_key_file.json"
165+
echo "${GCLOUD_KEY}" | base64 -d >"${BINDIR}/gke_key_file.json"
163166
"${GCLOUD}" auth activate-service-account --key-file="${BINDIR}/gke_key_file.json"
164167
"${GCLOUD}" components install gke-gcloud-auth-plugin
165168
}
166169

167170
function install_az() {
168171
local os=$1
169172

170-
if ! command -v az &> /dev/null
171-
then
172-
echo "Azure CLI could not be found. Downloading and installing..."
173-
if [[ "${os}" == "linux" ]]
174-
then
175-
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
176-
elif [[ "${os}" == "darwin" ]]
177-
then
178-
brew update && brew install azure-cli
179-
else
180-
echo "Error: Azure CLI is not supported on ${os}"
181-
exit 1
182-
fi
173+
if ! command -v az &>/dev/null; then
174+
echo "Azure CLI could not be found. Downloading and installing..."
175+
if [[ "${os}" == "linux" ]]; then
176+
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
177+
elif [[ "${os}" == "darwin" ]]; then
178+
brew update && brew install azure-cli
179+
else
180+
echo "Error: Azure CLI is not supported on ${os}"
181+
exit 1
182+
fi
183183
fi
184184

185185
echo "Azure CLI version:"
@@ -206,8 +206,7 @@ function wait_kyverno() {
206206
local kubeconfig=$1
207207

208208
# Wait for the kyverno deployments to be ready
209-
if ! waitandretry 5s 2 "${KUBECTL} rollout status deployment -n kyverno --kubeconfig ${kubeconfig}"
210-
then
209+
if ! waitandretry 5s 2 "${KUBECTL} rollout status deployment -n kyverno --kubeconfig ${kubeconfig}"; then
211210
echo "Failed to wait for kyverno deployments to be ready"
212211
exit 1
213212
fi
@@ -221,3 +220,41 @@ function install_clusterctl() {
221220
sudo install -o root -g root -m 0755 clusterctl /usr/local/bin/clusterctl
222221
clusterctl version
223222
}
223+
224+
function generate_kubeconfig() {
225+
# Ensure .kube directory exists
226+
mkdir -p "${HOME}/.kube"
227+
228+
# Get service account details
229+
SA_TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
230+
SA_CA_CERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
231+
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
232+
233+
echo "SA_TOKEN: ${SA_TOKEN}"
234+
echo "SA_CA_CERT: ${SA_CA_CERT}"
235+
echo "NAMESPACE: ${NAMESPACE}"
236+
237+
# Get the Kubernetes API server address
238+
KUBERNETES_SERVICE_HOST=${KUBERNETES_SERVICE_HOST:-kubernetes.default.svc}
239+
KUBERNETES_SERVICE_PORT=${KUBERNETES_SERVICE_PORT:-443}
240+
241+
# Create kubeconfig
242+
"${KUBECTL}" config set-cluster default-cluster \
243+
--server=https://"${KUBERNETES_SERVICE_HOST}":"${KUBERNETES_SERVICE_PORT}" \
244+
--certificate-authority="${SA_CA_CERT}" \
245+
--embed-certs=true \
246+
--kubeconfig="${HOME}/.kube/config"
247+
248+
"${KUBECTL}" config set-credentials default-user \
249+
--token="${SA_TOKEN}" \
250+
--kubeconfig="${HOME}/.kube/config"
251+
252+
"${KUBECTL}" config set-context default-context \
253+
--cluster=default-cluster \
254+
--user=default-user \
255+
--namespace="${NAMESPACE}" \
256+
--kubeconfig="${HOME}/.kube/config"
257+
258+
"${KUBECTL}" config use-context default-context \
259+
--kubeconfig="${HOME}/.kube/config"
260+
}

test/e2e/testutils/apiserver/create.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ const (
4141
)
4242

4343
var (
44-
image = "bitnami/kubectl"
44+
image = "alpine/kubectl"
4545
)
4646

4747
func init() {

0 commit comments

Comments
 (0)