Kubernetes Curl Pod ile Debug (Troubleshooting)
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.