데이터를 걷는 선비

[Kubernetes] Port-forwarding(포트포워딩) 실습 본문

Cloud/Container

[Kubernetes] Port-forwarding(포트포워딩) 실습

세미제로 2024. 1. 25. 14:01

https://semizero.tistory.com/59

 

[Kubernetes] 서비스 Port 유형 정리

[순서] 1) 서비스란?? 2) 포트(Port) 유형 정리 3) 서비스의 유형 3-1) ClusterIP (기본 형태) 3-2) NodePort 3-3) LoadBalancer 3-4) ExternalName 4) CLI 명령어로 파드에 서비스 정의하기 1) 서비스란?? 쿠버네티스 환경

semizero.tistory.com

지난 포스트에 이어 쿠버네티스 서비스가 배포되어 있는 상황에서, 포트 포워딩을 통해 로컬 호스트에서 서비스에 접속해보는 실습을 진행해 보겠습니다.


현재 구동되고 있는 서비스 정보 확인하기

  • 현재 쿠버네티스를 통해 서비스가 배포되어 있다고 가정해봅시다.
  • 해당 서비스를 제공하는 포트 번호를 알아내기 위해서는 yaml 파일을 확인하든가, 아니면 kubectl get service 명령어를 통해 확인할 수 있습니다.
  • 아래 예시는 Flask를 이용한 웹 API 서버를 쿠버네티스를 이용해 배포한 후, 포트 포워딩을 통해 로컬호스트에서 Flask 서버에 접속해보는 과정입니다!

- Flask API 서버 코드

from flask import Flask

app = Flask(__name__)
host_addr = "0.0.0.0"
host_port = 80

@app.route('/')
def hello():
    return "try /ping!"

@app.route('/ping')
def ping():
    return {'response': 'pong'}
   

if __name__ == "__main__":
    app.run(debug=True, 
            host=host_addr,
            port=host_port)

- yaml 파일 확인

» cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  ...
spec:
  ...
  template:
    ...
    spec:
      containers:
        - name: flask-api-container
          image: <이미지 저장소>:<이미지 태그>
          imagePullPolicy: Always
          ports:
            - containerPort: 80 # 서버 프로그램에 접속하기 위한 포트 번호
---
apiVersion: v1
kind: Service
metadata:
  ...
spec:
  ports:
    - port: 3000 # 이 서비스를 3000번 포트로 제공하겠음!
      protocol: TCP
      targetPort: 80 # 이 서비스에 접속하면 배포된 서버의 80번 포트로 연결됨!
  selector:
    app: flask-api-server

- kubectl get service로 확인

» kubectl get service
NAME                TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
flask-api-service   ClusterIP   10.xxx.xxx.xxx   <none>        3000/TCP   27m
...

포트 포워딩(port-forwarding)

이제 로컬 호스트에서 위 서비스에 접속해보겠습니다

- 로컬호스트의 가용 포트 중 하나를 서비스 포트에 연결

# 로컬호스트의 가용 포트 중 하나를 서비스 포트에 연결
# 이 경우 kubectl이 로컬호스트의 가용 포트 번호를 랜덤으로 지정하여 포트 포워딩합니다(대체로 높은 번호의 포트).
» kubectl port-forward service/flask-api-service :3000
Forwarding from 127.0.0.1:56210 -> 80
Forwarding from [::1]:56210 -> 80

- 로컬호스트의 포트 하나를 지정하여 서비스 포트에 연결

# 로컬호스트의 포트 하나를 지정하여 서비스 포트에 연결
» kubectl port-forward service/flask-api-service 12345:3000
Forwarding from 127.0.0.1:12345 -> 80
Forwarding from [::1]:12345 -> 80
  • 두 번째 명령어인 kubectl port-forward service/flask-api-service 12345:3000의 결과를 통해 볼 수 있듯이, 서비스의 3000번 포트를 로컬 호스트의 12345번 포트와 연결하면 서비스의 3000번 포트는 서버의 80번 포트로 port-forward하므로 결과적으로 로컬 호스트의 12345번 포트와 서버의 80번 포트가 연결된 것을 확인할 수 있습니다.
  • 이 터미널은 포트 포워딩 상태를 유지하는 중이므로 다른 커맨드 명령어를 입력할 수 없어서, 브라우저나 새로운 터미널 창을 열어 접속이 잘 되는지 테스트합니다.

- 터미널을 종료하지 않은 상태에서 localhost:12345에 접속

터미널에서 새로운 연결을 감지

'Cloud > Container' 카테고리의 다른 글

[Kubernetes] 서비스 Port 유형 정리  (0) 2024.01.25
[Docker] Docker Image와 Dockerfile  (0) 2023.05.01
[Docker] 도커 설치와 기본 명령어  (1) 2023.05.01
Comments