How to Run curl Command From Within a Kubernetes Pod?
Ever needed to fetch data or test connectivity from within a Kubernetes pod? The curl command becomes your trusty companion in these situations. This guide explores different approaches to execute curl commands directly from within your Kubernetes pod, empowering you to diagnose issues and interact with external services effectively.
What are Kubernetes Pods?
A Kubernetes pod is the most basic unit for deploying applications. It encapsulates one or more containers that share storage (volumes) and network resources. Additionally, a pod specification defines how these containers will run.
What is kubectl?
kubectl is the command-line tool that acts as your interface for interacting with Kubernetes clusters. It empowers you to deploy and manage applications, inspect and modify cluster resources, and view logs for your applications running on Kubernetes.
Creating Kubernetes Pods: Imperative vs. Declarative Approaches
Imperative Approach
Imperative Approach: This approach utilizes the kubectl run command. It's a quick way to launch a pod, as seen in the following example:
kubectl run mynginx --image=nginx --port=80 --limits=memory=128Mi,cpu=500m
This command creates a pod named mynginx using the Nginx image, exposes it on port 80, and sets resource limits for memory and CPU.
Declarative Approach (Preferred)
This method offers a more structured and reusable approach. You define a YAML file (e.g., definition.yaml) specifying the desired pod configuration and then apply it using kubectl apply.
apiVersion: v1
kind: Pod
metadata:
name: mynginx
labels:
name: mynginx
spec:
containers:
- name: mynginx
image: nginx
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 80
Once you have the YAML file ready, use the following command to create the pod:
kubectl apply -f definition.yaml
Both approaches have the same output, the only difference is that declarative is reusable which makes it the preferred way.
Verifying Pod Creation
After creating the pod using either approach, you can confirm its existence using the kubectl get pods command.
kubectl get pods

This will display information about your running pods, including their name, status, and container details.
Accessing and Interacting with Pods
To execute commands within containers of a pod, you can access their shell. Here's how:
kubectl exec -it mynginx -- /bin/sh

This command opens an interactive shell session within the mynginx container. Now, you can run various commands inside the container, such as using curl to interact with web servers.
Alternative: Running Commands without Shell Access
One we run command, we get access to mynginx shell. Any further command will be executed inside this, we can run curl command here.
curl localhost

Similarly, we can try with different urls,
curl https://example.com

Or download a file
curl -O https://example.com/file.zip

Alternatively without directly accessing the shell, we can run commands on our pods.
kubectl exec -it mynginx -- [command-to-run]
kubectl exec -it mynginx -- curl localhost