Kubernetes 기초 (5) - Pod & Pod, 컨테이너들간의 통신

이것저것 개발자·2022년 4월 25일
0

kubernetes 기초

목록 보기
5/16

하나의 Pod 안에서 서로 다른 컨테이너들 끼리 localhost로 통신

하나의 Pod에 서로 다른 포트로 컨테이너 2개를 선언

서로 다른 Pod 끼리 Pod IP로 통신

Pod A에 있는 컨테이너 -> Pod B에 있는 컨테이너로 요청 전송/응답 확인


실습

blue, green, red 3개의 앱이 있다는 가정하에
blue와 green은 같은 Pod안에
red는 다른 Pod에 구현될 예정

blue-app 컨테이너 설정

apiVersion: v1
kind: Pod
metadata:
	name: blue-green-app
spec:
	constainer:
    - name: blue-app
      image: simon/blue-app:1.0
      ports:
      - containerPort: 8080
      resources:
      	limits:
        	memory: 64Mi
            cpu: 250m

green-app 컨테이너 설정

apiVersion: v1
kind: Pod
metadata:
	name: blue-green-app
spec:
	constainer:
    - name: green-app
      image: simon/green-app:1.0
      ports:
      - containerPort: 8081

red-app 컨테이너 설정

apiVersion: v1
kind: Pod
metadata:
	name: red-app
spec:
	constainer:
    - name: red-app
      image: simon/red-app:1.0
      ports:
      - containerPort: 8080

공통 환경변수 설정

spec:
	containers:
    - env:
    	- name: NODE_NAME
          valueFrom :
          	fieldRef:
            	fieldPath: spec.nodeName
        - name: NAMESPACE
          valueFrom :
          	fieldRef:
            	fieldPath: metadata.namespace
        - name: POD_IP
          valueFrom :
          	fieldRef:
            	fieldPath: status.podIP
             

사용할 명령어

# Pod 생성
kubectl apply -f <yaml 파일 경로>

# Pod 실행 및 IP 확인
kubectl get pod -o wide

# Pod 종료
kubectl delete pod --all
kubectl delete pod <pod-name>

# 컨테이너 간 통신
kubectl exec <pod-name> -c <container-name> --curl -s localhost:<container-port>

# Pod 간 통신
kubectl exec <pod-name> -c <container-name> --curl -s <pod-id>:<container-port>

# 컨테이너 로그 출력
kubectl logs <pod-name> <container-name>

# 컨테이너 IP 확인
kubectl exec <pod-name> -c <container-name> --ifconfig eth0

# 컨테이너 환경변수 확인
kubectl exec <pod-name> --printenv

# 포트 포워딩
kubectl portforward <pod-name> <host-port>:<container-port>

완성된 yaml 파일

apiVersion: v1
kind: Pod
metadata:
  name: blue-green-app
spec:
  containers:
    - name: blue-app
      image: simon/blue-app:1.0
      ports:
        - containerPort: 8080
      env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
      resources:
        limits:
          memory: '64Mi'
          cpu: '250m'
    - name: green-app
      image: simon/green-app:1.0
      ports:
        - containerPort: 8081
      env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: POD_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP

apply 명령어를 통해 정상적으로 생성이 되었다면

get pod 으로 상태 확인

같은 방법으로 red-app도 생성

logs 명령어로 blue-app의 로그 확인

exec ~~~ 명령어로 blue-app에 전달된 환경변수 확인

blue -> green 으로 curl 요청

blue -> red 으로 curl 요청 (다른 Pod)

profile
조호영, Developing something

0개의 댓글