Pod 컨테이너간 통신1
- Pod 안에 서로 다른 컨테이너끼리 localhost로 통신
- 하나의 Pod에 서로 다른 포트로 컨테이너 2개
- 서로 다른 Pod끼리 Pod IP로 통신
- Pod A의 컨테이너에서 Pod B의 컨테이너로 요청 전송/응답
흐름
- Pod 선언과 환경 변수 설정
- Pod 생성/배포
- Pod IP 할당 및 컨테이너 실행 확인
- 컨테이너 환경 변수 목록 확인
- 컨테이너 간 localhost 통신
- 다른 Pod의 Pod IP로 통신
- 포트포워딩을 통해 각 컨테이너로 요청/응답 확인
실습 설정 개요
- 각 컨테이너의 엔드포인트
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/sky, /tree, /rose, /hello엔드포인트응답
const POD_IP = process.env.POD_IP
const NODE_NAME = process.env.NODE_NAME
const NAMESPACE = process.env.NAMESPACE
app.get('/sky', (req, res) => {
res.render('sky', { podIp: POD_IP, nodeName: NODE_NAME, namespace: NAMESPACE })
})
app.get('/hello', (req, res) => {
res.json("Hello, I'm Sky.")
})
app.listen(PORT, () => {
console.log(`Server is running on ${PORT}`)
})
- blue-app 컨테이너 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
name: blue-green-app
spec:
containers:
- name: blue-app
image: yoonjeong/blue-app:1.0
ports:
- containerPort: 8080
resources:
limits:
memory: 64Mi
cpu: 250m
- green-app 컨테이너 설정
1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Pod
metadata:
name: blue-green-app
spec:
containers:
- name: green-app
image: yoonjeong/blue-app:1.0
ports:
- containerPort: 8081
- red-app 컨테이너 설정
1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: Pod
metadata:
name: red-app
spec:
containers:
- name: blue-app
image: yoonjeong/blue-app:1.0
ports:
- containerPort: 8080
각 환경변수 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
명령어
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Pod 생성:
kubectl apply ‒f <yaml파일경로>
# Pod 실행및IP 확인:
kubectl get pod ‒o wide
# Pod 종료:
kubectl delete pod --all or 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 <podip>:<
container-port>
# 컨테이너로그출력:
kubectl logs <pod-name> <container-name>
# 컨테이너IP 확인:
kubectl exec <pod-name> -c <container-name> -- ifconfig eth0
# 컨테이너환경변수확인:
kubectl exec <pod-name> -- printenv
# 포트포워딩:
kubectl port-forward <pod-name> <host-port>:<container-port>