DevOps

[k8s] 쿠버네티스 연결 담당 서비스

cumo 2025. 4. 9. 14:23

 

지금까지는 쿠버네티스 클러스터 내부의 Pod를 사용하였다.
클러스터 외부에서 내부로 접속하는 방법 실습 진행.

 

1. 노드포트 서비스 이용

노드포트 구성도

 

1.1 디플로이먼트 파드 생성

kubectl create deploy np-pods --image=httpd

 

1.2 노드포트 생성

kubectl create -f nodeport.yaml

 

Pod 오브젝트 스펙

apiVersion: v1               # Kubernetes API 버전 (v1은 core API 그룹)
kind: Service                # 객체의 종류: Service (서비스)
metadata:
  name: np-svc              # 서비스 이름 (np-svc)
spec:
  selector:
    app: np-pods            # 이 서비스가 연결할 Pod의 라벨 셀렉터
  ports:
    - name: http            # 포트 이름 (선택 사항, 관리를 위한 이름)
      protocol: TCP         # 프로토콜 (TCP 또는 UDP)
      port: 80              # 클러스터 내부에서 접근할 서비스 포트
      targetPort: 80        # 실제 Pod에서 서비스할 포트
      nodePort: 30000       # 외부에서 접근할 노드 포트 (30000~32767 범위)
  type: NodePort

1.3 접속 확인

생성된 30000포트를 통해 노드로 접속이 가능한 것을 확인

 

1.4 삭제

kubectl delete -f nodeport.yaml

 


실습

매니패스트 파일로 echo-hname 디플로이먼트를 생성하되,
3개의 파드가 출력되도록 하고 이미지는 sysnet4admin/echo-hname을 사용

 

[root@k8scp ~]# vim nodedeploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo-name
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx

    spec:
      containers:
      - name: np-pods
        image: sysnet4admin/echo-hname
[root@k8scp ~]# vim nodeport.yaml
apiVersion: v1               # Kubernetes API 버전 (v1은 core API 그룹)
kind: Service                # 객체의 종류: Service (서비스)
metadata:
  name: np-svc             # 서비스 이름 (np-svc)
spec:
  selector:
    app: nginx    # 이 서비스가 연결할 Pod의 라벨 셀렉터

  ports:
    - name: http            # 포트 이름 (선택 사항, 관리를 위한 이름)
      protocol: TCP         # 프로토콜 (TCP 또는 UDP)
      port: 80              # 클러스터 내부에서 접근할 서비스 포트
      targetPort: 80        # 실제 Pod에서 서비스할 포트
      nodePort: 30001       # 외부에서 접근할 노드 포트 (30000~32767 범위)
  type: NodePort            # 서비스 타입 (NodePort는 외부에서 접근 가능)

 

과부화 테스트

$i=0; while($true)
{
  % { $i++; write-host -NoNewline "$i $_ " }
  (Invoke-RestMethod "http://3.35") -replace "`n", " "
}