POD içinden Kubernetes Api ye erişmek

H. Alperen Selcuk
3 min readJul 8, 2021

bir pod içinden apiye nasıl erişilir onu anlatmaya çalışacağım.

kubernetes üzerinde API ye erişerek bir bilgi almak istiyorsunuz. bu işi de bir POD a yaptırmak istiyorsunuz, bunun için o POD un cluster a erişmesi gerekiyor bununla ilgili bir çalışma yapacağım.

ilk olarak clusterımızı ayağa kaldıralım. ben lokalimde minikube kullanacağım.

kuberentes içinde ilk iş bir role yaratalım, sadece podlar hakkında bilgi alması yeterli olduğundan pod-reader diye yaratalım.

kubectl create role pod-reader --verb=get --verb=list --resource=pods

declarative olarak da göstermem gerekirse aşağıda şekilde yaml file apply edilebilir.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list

ben sonraki işlemleri imperative şekilde yapacağım.

devamında bir service account yaratalım.

kubectl create sa pod-reader-sa -n default

devamında da role u service account a bind edeceğim.

kubectl create rolebinding pod-reader-binding --role=pod-reader --serviceaccount=default:pod-reader-sa --namespace=default

kullanacağım pod içinde service accountumuzu belirtiyoruz. nginx image ini seçtim.

apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
name: nginx
serviceccount: pod-reader-sa

bu şekilde yarattığımız zaman pod un içinde secrets de service-account umuz için bir token ve certificate oluşacn pod içinde bunu çekip bir variablelara atayalım.

APISERVER=https://kubernetes.default.svcSERVICEACCOUNT=/var/run/secrets/kubernetes.io/serviceaccountNAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)CACERT=${SERVICEACCOUNT}/ca.crtTOKEN=$(cat ${SERVICEACCOUNT}/token)

bunlardan sonra API ya aşağıdaki komut satırılı ile kolayca erişebiliriz,

curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api

bu şekilde bir çıktı elimize geçecek, bundan sonra istediğimiz bilgiyi json formatında çekebiliriz. mesela podlarla ilgili bilgi almak istersek aşağıdaki şekilde çekebiliriz.

curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api/v1/namespaces/default/pods

tadımlık bir yazı olsun istedim.

h.a.s.

--

--