🧠 Pod 안에서 kubectl 대신 API 호출하기
2026. 2. 22. 12:10ㆍk8s
📌 핵심 개념
kubectl get pods가 하는 일은 결국:
Kubernetes API Server에 HTTP 요청
을 보내는 것이다.
즉, Pod 안에서도:
- API Server 주소
- 인증 토큰
- CA 인증서
이 3가지만 있으면 동일한 결과를 받을 수 있다.
📦 1️⃣ Pod 안에 이미 있는 것들
Pod 내부에는 자동으로 아래 파일들이 마운트된다.
/var/run/secrets/kubernetes.io/serviceaccount/token
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
/var/run/secrets/kubernetes.io/serviceaccount/namespace
이게 바로 ServiceAccount 인증 정보다.
🌐 2️⃣ API Server 주소
Pod 안에서 API Server는 다음 환경변수로 접근 가능하다.
echo $KUBERNETES_SERVICE_HOST
echo $KUBERNETES_SERVICE_PORT
보통 이렇게 호출한다:
https://kubernetes.default.svc
🚀 3️⃣ curl로 직접 API 호출하기
Pod 안에서:
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
curl -s \
--cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt \
-H "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/test/pods
👉 이 결과는:
kubectl get pods -n test -o json
과 동일한 JSON 응답이다.
📌 네임스페이스 현재 값 가져오기
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
🔐 4️⃣ 중요한 점: RBAC 권한 필요
기본 ServiceAccount는 대부분 권한이 없다.
그래서 아래 같은 에러가 날 수 있다:
Forbidden: User "system:serviceaccount:test:default" cannot list resource "pods"
이 경우:
- Role 생성
- RoleBinding으로 ServiceAccount에 연결
해야 한다.
📄 예시: Pod 조회 권한 부여
Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: test
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: pod-reader-binding
namespace: test
subjects:
- kind: ServiceAccount
name: default
namespace: test
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io
🏗️ 전체 구조 이해
Pod
↓
ServiceAccount 토큰
↓
API Server 호출
↓
RBAC 검사
↓
JSON 응답
🎯 kubectl과 API의 관계
| kubectl | 실제 동작 |
|---|---|
| kubectl get pods | GET /api/v1/pods |
| kubectl get ns | GET /api/v1/namespaces |
| kubectl create | POST 요청 |
즉 kubectl은 단순히 API 클라이언트일 뿐이다.
🔥 실제 운영에서 사용하는 경우
- Operator 개발
- Controller 개발
- CI/CD Job
- Custom Scheduler
- 내부 자동화 Pod
📌 요약
Pod 안에서 kubectl 대신 API를 직접 호출하면 된다.
단, ServiceAccount + RBAC 권한이 필요하다.
'k8s' 카테고리의 다른 글
| 🚀 CKAD 시험 대비 – Kubernetes Job 완전 정리 (0) | 2026.02.22 |
|---|---|
| # 💾 Kubernetes PV와 PVC 완전 정리 (0) | 2026.02.22 |
| 🔐 Kubernetes NetworkPolicy 완전 정리 (0) | 2026.02.22 |
| 🌐 Kubernetes Service Type 변경 방법 & 확인 방법 (0) | 2026.02.22 |
| 🌐 Kubernetes Service를 만들면 생성되는 Endpoint의 의미 (0) | 2026.02.22 |