Kubernetes Curl Pod ile Debug (Troubleshooting)
2 min read

Kubernetes Curl Pod ile Debug (Troubleshooting)

Kubernetes curl podu ile cluster network testlerinizi yapabilirsiniz. Bu yazıda nasıl curl podu oluşturabileceğinizi bulacaksınız.
Kubernetes Curl Pod ile Debug (Troubleshooting)
Photo by Shubham Dhage / Unsplash

Kubernetes ortamlarında bir Pod’un ağ iletişim sorunlarını anlamak ve çözmek, operasyonel süreçlerin önemli bir parçasıdır. Bu noktada curl gibi araçlar, hızlı ve etkili bir şekilde hata ayıklamaya yardımcı olur. Bu yazıda, curl komutunu kullanarak Kubernetes Pod’larında nasıl debug yapılacağını inceleyeceğiz.

Cluster'daki bir uygulamayı test etmek istediğimizde ilk aklımıza gelen genellikle curl uygulamasıdır. Fakat test etmek istediğiniz uygulamanın container shell erişimi kısıtlanmışsa veya curl paketi yoksa ve kurulmasına izin verilmiyorsa ne yaparsınız?

Bu durumda en temiz yöntem, yeni bir curl içeren pod ayağa kaldırmak olacaktır. Nasıl yapacağımızı ise hızlıca görelim.

1. Curl ile Debug

Curl, Pod’dan dış dünyaya yapılan HTTP/HTTPS taleplerini test etmek için kullanılır. Örneğin, bir Pod’dan başka bir servise erişimi test etmek için aşağıdaki komut çalıştırılabilir:

curl -v http://<hedef-servis>:<port>

Bu testi yapabilmek için ise curl kurmamız gerekiyor. Curl içeren bir podu aşağıda başlık halinde verdiğim iki yöntemle hazırlayabiliriz. Fakat öncesinde bir curl image'ine ihtiyacımız var.

Kullanabileceğimiz popüler curl imagelerini şu şekilde listeleyebiliriz:

Image Registry Notlar
curlimages/curl Docker Hub Resmi curl image'i. Düzenli güncellemeleri alıyor ve boyutu 5MB'dan daha düşük ✅ ✅
alpine/curl Docker Hub Alpine bazlı bir curl image'i. Tercih edilebilir
redhat/ubi8 Docker Hub Red Hat Universal base image'i. Temel olarak Red Hat Enterprise Linux'un container'a çevrilmiş versiyonu. (Ve curl'u içeriyor.)

Biz bu yazıda curlimages/curl image'ini kullanacağız.

1.1. Imperative Yöntem ile Curl Pod Kurulumu

Eğer hızlı bir teste ihtiyacınız varsa ve kubectl elinizin altındaysa, aşağıdaki komut ile curl pod'u hemen ayağa kaldırıp terminaline bağlanabilirsiniz.

kubectl run mycurlpod --image=curlimages/curl -i --tty -- sh

Ardından terminalden çıkana kadar curl komutlarını çalıştırabilirsiniz.

Fakat ihtiyacınız tek seferlik bir curl isteği atmaksa terminale bağlanmakla uğraşmayacağınız şu komutu da tercih edebilirsiniz. Tabi öncesinde podun ayakta olması gerekiyor

kubectl run mycurlpod --image=curlimages/curl --restart=Never -- sleep infinity
kubectl exec -it mycurlpod -- curl -L -v http://<hedef-servis>:<port>

1.2. Declarative Yöntem ile Curl Pod Kurulumu

Declarative methodla curl podu hazırlayabilmek için tek yapmamız gereken pod manifest dosyasını oluşturmak ve apply etmek. Bunun için aşağıdaki yaml dosyasını kullanabilirsiniz:

apiVersion: v1
kind: Pod
metadata:
  name: mycurlpod
spec:
  containers:
  - name: main
    image: curlimages/curl
    command: ["sleep", "infinity"]

Yukarıdaki manifesti bir dosyaya yazdıktan sonra (ör: mycurlpod.yaml) apply edebiliriz.

kubectl apply -f mycurlpod.yaml

Pod'umuz hazır olduktan sonra ya terminale bağlanarak ya da direkt tek seferlik komut ile curl sorgularınızı atabilirsiniz.