DevOps/Kubernetes

Deployment의 파드가 서비스의 대상이 되려면

100win10 2022. 3. 30. 23:37

Kubernetes 환경에서 특정 파드를 서비스 대상으로 지정하려면, Service와 Pod 간의 라벨 셀렉터 설정이 정확히 일치해야 한다. 이를 통해 Service는 지정된 라벨을 가진 Pod로 트래픽을 라우팅할 수 있다.

Service 정의 예제

아래는 Kubernetes Service의 YAML 정의 예제이다. 이 Service는 특정 라벨을 가진 Pod를 대상으로 트래픽을 전달한다.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: test-app
  name: test-app
  namespace: default
spec:
  ports:
    - port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: test-app
    deploy: 20200625
  type: ClusterIP

Service 라벨 셀렉터
위 정의에서 selector 필드는 app과 deploy 라벨을 가진 Pod를 대상으로 한다. 즉, 이 Service는 다음 두 라벨을 모두 가진 Pod로 트래픽을 전달한다:

 

 

  • app: test-app
  • deploy: 20200625


Pod 라벨 예제

 

다음은 위 Service의 대상이 되는 Pod의 예제이다. 이 Pod는 app과 deploy 라벨을 모두 가지고 있어야 한다.

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    app: test-app
    deploy: 20200625
spec:
  containers:
    - name: example-container
      image: example-image:latest

 

위 Pod 정의에서 app과 deploy 라벨이 모두 존재하므로, 이 Pod는 해당 Service의 대상으로 지정된다.

라벨이 일치하지 않는 경우
만약 Pod가 app 라벨만 가지고 있고 deploy 라벨을 가지고 있지 않다면, 이 Pod는 Service의 대상이 되지 않는다. 예를 들어, 다음과 같은 Pod는 app 라벨만 가지고 있기 때문에 Service의 트래픽을 전달받지 못한다.

 

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    app: test-app
spec:
  containers:
    - name: example-container
      image: example-image:latest

 

 

Kubernetes에서 Service가 특정 Pod로 트래픽을 전달하려면, Service의 selector 필드에 명시된 라벨이 Pod의 라벨과 정확히 일치해야 한다. 이 예제에서 Service는 app과 deploy 라벨을 모두 요구하므로, 해당 라벨을 가진 Pod만이 서비스 대상이 된다. 이를 통해 Kubernetes 클러스터 내에서 정확한 라벨 매칭을 통해 안정적인 서비스 배포와 관리를 할 수 있다.