#!/bin/sh # ---- # File: mesh-basic.sh # Description: Script to test the cluster mesh on our cilium deployments # Author: Sergio Talens-Oliag # Copyright: (c) 2023 Sergio Talens-Oliag # ---- # REF: https://docs.cilium.io/en/stable/network/clustermesh/services/ # ---- set -e # Compute WORK_DIR SCRIPT="$(readlink -f "$0")" SCRIPT_DIR="$(dirname "$SCRIPT")" WORK_DIR_RELPATH="." WORK_DIR="$(readlink -f "$SCRIPT_DIR/$WORK_DIR_RELPATH")" # VARIABLES NAMESPACE="mesh-test" SERVICE="svc/rebel-base" DEPLOYMENT_RB="deployment/rebel-base" DEPLOYMENT_XW="deployment/x-wing" YAML_DIR="$WORK_DIR/mesh-test" GSC1_YAML="$YAML_DIR/cluster1.yaml" GSC2_YAML="$YAML_DIR/cluster2.yaml" ACCESS_TEST_LOOPS="7" access_test() { for ctx in "$CTX1" "$CTX2"; do echo "Running $ACCESS_TEST_LOOPS tests from '$ctx'" counter=0 while [ "$counter" -lt "$ACCESS_TEST_LOOPS" ]; do kubectl --context "$ctx" -n "$NAMESPACE" exec -ti "$DEPLOYMENT_XW" \ -- curl rebel-base counter="$((counter + 1))" done done } create() { for cn in "1" "2"; do echo "Creating Global Service on Cluster $cn" create_namespace "$cn" deploy_objects "$cn" done } create_namespace() { case "$1" in 1) ctx="$CTX1";; 2) ctx="$CTX2";; *) echo "Unknown cluster number '$1'"; exit 1;; esac kubectl --context="$ctx" create ns "$NAMESPACE" || true } deploy_objects() { case "$1" in 1) ctx="$CTX1"; yaml="$GSC1_YAML";; 2) ctx="$CTX2"; yaml="$GSC2_YAML";; *) echo "Unknown cluster number '$1'"; exit 1;; esac sed -e "s/Cluster-/$CTOOL-cluster-/" "$yaml" | kubectl --context="$ctx" -n "$NAMESPACE" apply -f - } delete() { for cn in "1" "2"; do echo "Deleting Global Service on Cluster $cn" delete_objects "$cn" || true delete_namespace "$cn" done } delete_deployment() { case "$1" in 1) ctx="$CTX1";; 2) ctx="$CTX2";; *) echo "Unknown cluster number '$1'"; exit 1;; esac echo "Deleting '$DEPLOYMENT_RB' on Cluster $1" kubectl --context="$ctx" -n "$NAMESPACE" delete "$DEPLOYMENT_RB" || true } delete_namespace() { case "$1" in 1) ctx="$CTX1";; 2) ctx="$CTX2";; *) echo "Unknown cluster number '$1'"; exit 1;; esac kubectl --context="$ctx" delete ns "$NAMESPACE" || true } delete_objects() { case "$1" in 1) ctx="$CTX1"; yaml="$GSC1_YAML";; 2) ctx="$CTX2"; yaml="$GSC2_YAML";; *) echo "Unknown cluster number '$1'"; exit 1;; esac sed -e "s/Cluster-/$CTOOL-cluster-/" "$yaml" | kubectl --context="$ctx" -n "$NAMESPACE" delete -f - } get_cilium_annotations() { for ctx in "$CTX1" "$CTX2"; do echo "Service '$SERVICE' cilium annotations on '$ctx'" kubectl --context "$ctx" -n "$NAMESPACE" get "$SERVICE" -o yaml | sed -ne 's/^ service.cilium.io/- service.cilium.io/p' done } status() { for ctx in "$CTX1" "$CTX2"; do echo "Mesh test status on '$ctx'" echo "" kubectl --context "$ctx" -n "$NAMESPACE" get all echo "" done } wait_for_deployments() { for ctx in "$CTX1" "$CTX2"; do for _deployment in "$DEPLOYMENT_RB" "$DEPLOYMENT_XW"; do echo "Waiting for '$_deployment' to be ready on '$ctx'" kubectl wait --context="$ctx" -n "$NAMESPACE" "$_deployment" \ --for condition=Available=True --timeout=90s done done } service_affinity_default(){ kubectl --context="$1" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/affinity- } service_affinity_local(){ kubectl --context="$1" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/affinity="local" --overwrite } service_affinity_none(){ kubectl --context="$1" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/affinity="none" --overwrite } service_affinity_remote(){ kubectl --context="$1" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/affinity="remote" --overwrite } service_shared_default(){ case "$1" in 1) ctx="$CTX1";; 2) ctx="$CTX2";; *) echo "Unknown cluster number '$1'"; exit 1;; esac kubectl --context="$ctx" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/shared- } service_shared_false(){ case "$1" in 1) ctx="$CTX1";; 2) ctx="$CTX2";; *) echo "Unknown cluster number '$1'"; exit 1;; esac kubectl --context="$ctx" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/shared="false" --overwrite } service_shared_true(){ case "$1" in 1) ctx="$CTX1";; 2) ctx="$CTX2";; *) echo "Unknown cluster number '$1'"; exit 1;; esac kubectl --context="$ctx" -n "$NAMESPACE" annotate "$SERVICE" \ service.cilium.io/shared="true" --overwrite } usage() { cat <