Kubernetes 관리자는 클러스터와의 상호작용을 간소화하고 효율적으로 하기 위해 다양한 도구를 사용합니다. 그 중에서도 Kubectl 유틸리티는 Kubernetes API 서버와 상호작용할 수 있게 해주는 중요한 역할을 합니다. 이번 글에서는 Kubectl 프록시와 포트 포워드를 사용하여 클러스터와 통신하는 방법에 대해 자세히 알아보겠습니다.
Kubectl 유틸리티는 Kubernetes 클러스터와 상호작용하기 위한 필수 도구입니다. 시스템의 Kube 구성 파일에는 클러스터와 API 서버에 접근하고 상호작용하는 데 필요한 사용자 세부 정보와 자격 증명이 포함되어 있어 명령줄에서 인증 메커니즘을 별도로 제공할 필요가 없습니다. 이를 통해 노트북, VM, 개인 서버, 퍼블릭 클라우드 환경 등 어디서든 Kubectl 유틸리티를 사용하여 로컬에서 Kubernetes 클러스터를 관리할 수 있습니다.
Kubectl 프록시는 로컬에서 Kubernetes API 서버에 접근할 수 있도록 도와주는 유틸리티입니다. 기본적으로 로컬 호스트의 포트 8001에서 프록시 서비스를 시작하며, Kube 구성 파일의 자격 증명과 인증서를 사용하여 클러스터에 접근합니다. 이를 통해 curl 명령을 사용할 때 인증서 지정 없이 API 서버에 접근할 수 있습니다.
프록시는 로컬 컴퓨터에서만 실행되며 기본적으로 127.0.0.1 루프백 주소에서의 트래픽만 허용합니다. 따라서 노트북 외부에서는 접근할 수 없습니다.
Kubectl 프록시를 사용하면 Kubernetes API 서버에 모든 종류의 API 요청을 보낼 수 있을 뿐만 아니라 클러스터 내에서 실행 중인 모든 서비스로 요청을 프록시할 수 있습니다. 예를 들어, nginx 서비스가 클러스터 IP 타입으로 설정되어 클러스터 내에서만 접근 가능할 때, 프록시를 통해 외부에서 접근할 수 있습니다.
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
$ curl http://localhost:8001/api/v1/namespaces/default/services/nginx/proxy/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>
</p>
<p>
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.
</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
포트 포워드는 로컬 호스트의 포트를 Kubernetes 클러스터 내의 서비스의 포트로 포워드하는 기능을 제공합니다. 이를 통해 로컬에서 원격 클러스터의 서비스를 사용할 수 있습니다. 예를 들어, 로컬 호스트의 포트 28080을 클러스터 내의 nginx 서비스의 포트 80으로 포워드할 수 있습니다. 이를 위해 다음 명령을 사용합니다:
$ kubectl port-forward service/nginx 28080:80
$ curl http://localhost:28080/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>
</p>
<p>
<a href="http://nginx.org/">nginx.org</a>.<br/>
<a href="http://nginx.com/">nginx.com</a>.
</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
이제 로컬 호스트의 포트 28080으로 curl 요청을 보내면 해당 요청은 클러스터 내의 nginx 서비스로 포워드됩니다.
Kubectl 프록시와 포트 포워드는 Kubernetes 클러스터와의 상호작용을 단순화하고 효율적으로 만드는 중요한 도구입니다. 프록시는 클러스터 내의 서비스에 접근할 수 있게 해주며, 포트 포워드는 로컬 호스트의 포트를 원격 클러스터의 서비스 포트로 포워드하여 마치 로컬에서 실행 중인 것처럼 사용할 수 있게 합니다.