Kubernetes Nginx pod, service YAML작성 및 파드간 통신

Kubernetes Nginx pod, service YAML작성 및 파드간 통신, 안녕하세요! 이번 포스팅에서는 Kubernetes YAML 파일을 사용하여 Nginx 웹 서버를 배포하고 외부에 노출하는 방법에 대해 알아보겠습니다.

deployment YAML 파일

먼저, Nginx 웹 서버를 배포하기 위한 Deployment YAML 파일입니다. 이 파일은 하나의 Replication Controller를 정의하며, 노드 선택자(nodeSelector)를 사용하여 특정 노드에 파드를 스케줄링할 수 있습니다.

사전에 key=storage라는 라벨을 노드에 붙혀 놓았습니다.

# example)
#       nodeSelector:
#       key: storage

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-web
  template:
    metadata:
      name: nginx-web
      labels:
        app: nginx-web
    spec:
      containers:
      - image: nginx
        name: nginx-web
        ports:
        - containerPort: 80
      nodeSelector:
       key: storage

Service YAML

다음으로, 배포한 Nginx 웹 서버를 외부로 노출하기 위한 Service YAML 파일입니다. 이 파일은 LoadBalancer 유형의 서비스로 설정되어 있어 외부에서 접근 가능하며, 특정 IP 주소로 노출되도록 설정되어 있습니다.

apiVersion: v1
kind: Service
metadata:
  name: nginx-web
  labels:
    name: nginx-web
spec:
  type: LoadBalancer
  loadBalancerIP: 10.2.3.116
  ports:
    - port: 80
      targetPort: 80
      name: http
  selector:
   app: nginx-web

(service flow )

client -> http://10.2.3.116:80 ->

[service:pod]

selector({(app:nginx-web):(app:nginx-web)}

pod:container

클라이언트가 로드밸런스의 external IP의 특정 포트로 데이터를 요청하면 그에 해당하는 service에 매핑된 selector, app:nginx-web이라는 파드를 찾아서 데이터를 보낸다. 그리고 해당 파드는 80포트로 들어온 요청을 컨테이너 80포트로 전달하여 최종 컨테이너 안에 있는 nginx.index가 나타난다.

그리고 서비스 간(파드끼리)의 통신을 할 때

이때, 같은 namespace 내의 서비스는 http://<Service name>:<Service Port>로, 다른 namespace 내의 서비스는 http://<Service name>.<namespace>.svc.cluster.local:<Service Port>로 접근할 수 있습니다.

이렇게 작성된 YAML 파일과 설명을 통해 Nginx 웹 서버를 Kubernetes 클러스터에 배포하고 외부로 노출하는 과정을 자세히 알아보았습니다. 블로그를 통해 더 많은 Kubernetes 관련 정보를 확인해보세요!

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다