mirror of
https://github.com/k8snetworkplumbingwg/multus-cni.git
synced 2025-08-28 12:51:01 +00:00
Adds a test for plain subdirectory chaining and also using passthru CNI with auxiliaryCNIChainName
82 lines
2.8 KiB
Bash
Executable File
82 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
export PATH=${PATH}:./bin
|
|
|
|
TEST_POD_NAME="sysctl-modified"
|
|
EXPECTED_BINARIES="${EXPECTED_BINARIES:-/opt/cni/bin/ptp /opt/cni/bin/portmap /opt/cni/bin/tuning}"
|
|
EXPECTED_CNI_DIR="/etc/cni/net.d"
|
|
|
|
# Reconfigure multus
|
|
echo "Applying subdirectory chain passthru config..."
|
|
kubectl apply -f yamls/subdirectory-chain-passthru-configupdate.yml
|
|
|
|
# Restart the multus daemonset to pick up the new config
|
|
echo "Restarting Multus DaemonSet..."
|
|
kubectl rollout restart daemonset kube-multus-ds-amd64 -n kube-system
|
|
kubectl rollout status daemonset/kube-multus-ds-amd64 -n kube-system
|
|
|
|
# Debug: show CNI configs and binaries inside each Kind node
|
|
echo "Checking CNI configs and binaries on nodes..."
|
|
|
|
for node in $(kubectl get nodes --no-headers | awk '{print $1}'); do
|
|
container_name=$(docker ps --format '{{.Names}}' | grep "^${node}$")
|
|
|
|
echo "------"
|
|
echo "Node: ${node} (container: ${container_name})"
|
|
echo "Listing /opt/cni/bin contents..."
|
|
docker exec "${container_name}" ls -l /opt/cni/bin || echo "WARNING: /opt/cni/bin missing!"
|
|
|
|
echo "Checking expected binaries..."
|
|
for bin in $EXPECTED_BINARIES; do
|
|
echo "Checking for ${bin}..."
|
|
if docker exec "${container_name}" test -f "${bin}"; then
|
|
echo "SUCCESS: ${bin} found."
|
|
else
|
|
echo "FAIL: ${bin} NOT found!"
|
|
fi
|
|
done
|
|
|
|
echo "Listing /etc/cni/net.d configs..."
|
|
docker exec "${container_name}" ls -l ${EXPECTED_CNI_DIR} || echo "WARNING: ${EXPECTED_CNI_DIR} missing!"
|
|
done
|
|
echo "------"
|
|
|
|
# Deploy the daemonset that will lay down the chained CNI config
|
|
echo "Applying CNI setup DaemonSet..."
|
|
kubectl apply -f yamls/subdirectory-chaining-passthru.yml
|
|
|
|
# Wait for the daemonset pods to be ready (make sure they set up CNI config)
|
|
echo "Waiting for CNI setup DaemonSet to be Ready..."
|
|
kubectl rollout status daemonset/cni-setup-daemonset --timeout=300s
|
|
|
|
# Deploy a test pod that will get chained CNI applied
|
|
echo "Applying test pod..."
|
|
kubectl apply -f yamls/subdirectory-chaining-pod.yml
|
|
|
|
# Wait for the pod to be Ready
|
|
echo "Waiting for test pod to be Ready..."
|
|
kubectl wait --for=condition=ready pod/${TEST_POD_NAME} --timeout=300s
|
|
|
|
# Check that the sysctl got set
|
|
echo "Verifying sysctl arp_filter is set to 1 on eth0..."
|
|
|
|
SYSCTL_VALUE=$(kubectl exec ${TEST_POD_NAME} -- sysctl -n net.ipv4.conf.eth0.arp_filter)
|
|
|
|
if [ "$SYSCTL_VALUE" != "1" ]; then
|
|
echo "FAIL: net.ipv4.conf.eth0.arp_filter is not set to 1, got ${SYSCTL_VALUE}" >&2
|
|
exit 1
|
|
else
|
|
echo "SUCCESS: net.ipv4.conf.eth0.arp_filter is set correctly."
|
|
fi
|
|
|
|
# Cleanup
|
|
echo "Cleaning up test resources..."
|
|
kubectl delete -f yamls/subdirectory-chaining-pod.yml
|
|
kubectl delete -f yamls/subdirectory-chaining-passthru.yml
|
|
|
|
echo "Test completed successfully."
|
|
exit 0
|