Loop through kubern...
 
Notifications
Clear all

Loop through kubernetes ingress and invoke curl

Raju
 Raju
(@raju)
Member Admin

Loop through Kubernetes Ingress and Invoke curl

Here is a bash script that can loop through the hosts in a Kubernetes ingress and invoke the curl command for each host to send a request and capture the response code:

#!/bin/bash

# Set the ingress name and namespace
ingress_name="my-ingress"
namespace="default"

# Get the list of hosts for the ingress
hosts=$(kubectl get ingress "$ingress_name" -n "$namespace" -o jsonpath='{.spec.rules[*].host}')

# Loop through each host and send a request with curl
for host in $hosts; do
  # Send the request and capture the response code
  response_code=$(curl -s -o /dev/null -w "%{http_code}" "http://$host")

  # Print the host and response code
  echo "Host: $host, Response code: $response_code"
done

 

This script uses the kubectl command to get the list of hosts for the specified ingress. It then loops through each host and sends a request using the curl command to get the response code. The script prints the host and the response code for each request.

You can run this script by saving it to a file (e.g. check_ingress_hosts.sh) and running it with the bash command

bash check_ingress_hosts.sh

 

Note that this script assumes that the ingress is in the default namespace. You will need to modify the namespace variable in the script to specify the correct namespace if your ingress is in a different namespace. Additionally, you may need to modify the curl command in the script to specify a different URL or request method if needed.

This topic was modified 2 years ago 2 times by Raju
Quote
Topic starter Posted : 04/12/2022 9:15 pm
Topic Tags
Raju
 Raju
(@raju)
Member Admin

To query kubernetes endpoints for all services in a namespace, use the following command:

kubectl get endpoints -n <namespace>

To invoke a curl command for each service endpoint, use the following command:

for endpoint in $(kubectl get endpoints -n <namespace> -o jsonpath='{.items[*].subsets[*].addresses[*].ip}'); 
do curl  http://$endpoint;  
done

Replace <namespace> with the name of the namespace where the services are located. This will iterate through all endpoints in the specified namespace and execute a curl command on each endpoint.

ReplyQuote
Topic starter Posted : 05/12/2022 4:23 am
Share: