[CKS] 17. Kubectl Proxy Port Forward

kubectl proxy와 port-forward로 K8s API 및 내부 서비스에 안전하게 접근하고, 복잡한 인증 절차 없이 개발 및 원격 작업을 간소화합니다.

[CKS] 17. Kubectl Proxy Port Forward
Photo by Neil Fedorowycz / Unsplash

개요

kubectl proxy 및 port-forward 명령을 사용하여 쿠버네티스 API 서버 및 내부 서비스와 안전하게 상호 작용하는 방법을 자세히 살펴봅니다.

kubeconfig 파일을 활용하면 이러한 도구를 통해 원활한 인증이 가능하며, 자격 증명을 수동으로 지정하지 않고도 클러스터 리소스에 액세스할 수 있습니다.

kubectl

kubectl을 실행할 때 명령에 인증 정보를 포함할 필요가 없습니다.

kubeconfig 파일에 필요한 자격 증명이 포함되어 있으므로 kubectl이 제어 플레인 호스트에 있든 원격 워크스테이션에 있든 쿠버네티스 클러스터의 API 서버에 연결할 수 있게 관리해주기 때문입니다.

만약 kubectl을 사용하지 않는다면 직접 상호작용하기 위한 방법은 포트를 통해 curl 요청을 보내는 것입니다.

curl http://<kube-api-server-ip>:6443 -k

-----------------------------------------------------------------

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
  "reason": "Forbidden",
  "details": {},
  "code": 403
}

현재는 인증 정보가 포함되지않았기 때문에 “Forbidden”상태를 반환합니다.

kubectl Proxy

kubectl proxy 명령어를 사용하면 기본적으로 kubeconfig 파일에 지정된 클라이언트 자격 증명과 인증서를 사용하여 포트 8001에서 로컬 프록시 서비스를 시작합니다.

kubectl proxy

이를 통해 kube-apiserver의 엔드포인트를 쿼리할 수 있습니다.

curl http://localhost:8001 -k

{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/",
    "/healthz",
    "/logs",
    "/metrics",
    "/openapi/v2",
    "/swagger-2.0.0.json"
  ]
}

이 문장은 kubectl proxy 명령어의 작동 방식을 설명합니다. 간단히 말해, 내 컴퓨터(local)에 쿠버네티스 API 서버로 연결되는 안전하고 인증된 개인 통로를 여는 기능입니다. 개발이나 디버깅 시 복잡한 인증 절차 없이 API에 쉽게 접근할 수 있도록 도와줍니다.

kubectl 프록시를 통한 클러스터 서비스 엑세스

kubectl proxy를 사용하면 클러스터 내에 배포된 서비스에도 액세스할 수 있습니다.

예를 들어, 기본 네임스페이스의 ClusterIP에서 실행되는 Nginx 서비스가 있다고 가정해 보겠습니다. NodePort나 LoadBalancer를 통해 외부에 노출되지는 않지만, 프록시를 통해 적절한 URL을 구성하여 로컬에서 액세스할 수 있습니다.

curl http://localhost:8001/api/v1/namespaces/default/services/nginx/proxy/

Port-fowarding을 통한 Cluster 서비스 엑세스

kubectl port-forward service/nginx 28080:80

curl http://localhost:28080/

포트 포워딩은 원격 클러스터에서 작업할 때 매우 귀중한 기능입니다.

마치 로컬에서 실행되는 것처럼 서비스에 직접 안전하게 액세스할 수 있기 때문입니다.