updated_at: 2025-05-24 09:52

Yaml의 ports

서비스를 생성하는 설정을 보면 아래와 같이 port, targetPort, nodePort를 설정하게 됩니다.
아래에서 사용한 서비스 타입은 Nodeport이며 클러스터 외부에서 클러스터 내부로 접근이 가능하도록 트래픽을 중개하는 역할을 하는 서비스 입니다.

service ports

  • NodePort type 예
apiVersion: v1
kind: Service
metadata:
  name: nodeport-service
spec:
  type: NodePort
  selector:
    app: nginx-for-svc
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30000
  • nodePort: 외부에서 Node로 접근이 가능하게 하기 위해 사용하는 포트입니다.
  • port: 외부에서 들어온 트래픽을 서비스를 통해 내부 클러스터의 "80 port"를 통해 전달하도록 합니다.
  • targetPort: 그 후 서비스는 targetPort 로 설정한 클러스터 내부의 컨테이너에게 "8080 port"로 요청을 전달하겠죠

즉 nodePort(외부에서 Node로 접근) -> port(containerPort port) -> targetPort(실제 서비스 port)

container ports

그럼 파드 내의 컨테이너에서는 어떤 설정을 통해 사용하는 포트를 결정할까요?

// pods-sample.yaml

apiVersion: v1
kind: Pod
metadata:
  name: simple-pod
  labels:
    app: nginx-for-service
spec:
  containers:
  - name: simple-pod
    image: nginx
    ports:
    - containerPort: 80

"spec.containers[].ports[].containerPort" 에서 설정한 부분이 컨테이너에서 listen하고 있는 포트가 됩니다

  • service의 targetPort 와 container의 containerPort 가 일치하여야 합니다.
  • ClusterIP type 서비스를 사용하는 경우에는 외부에서 트래픽을 받을 수 없기 때문에 nodePort 사용할 수 없습니다.
평점을 남겨주세요
평점 : 2.5
총 투표수 : 1

질문 및 답글