네트워킹 테스트하기
이 실습에서는 Calico 클러스터를 직접 테스트하면서 네트워킹이 올바르게 동작하는지 확인해 봅니다. Pod끼리 ping을 주고받고, 노드의 라우팅 테이블을 살펴보고, 여러 IP 풀을 오가는 주소 할당까지 차례로 검증합니다. 수동으로 Calico를 구축한 "the hard way" 과정의 마지막 단계에서, 지금까지 만든 클러스터가 기대한 대로 동작하는지 눈으로 확인하는 시간이 될 겁니다.
출처: 문서
본문
이 실습에서는 Calico 클러스터를 테스트하여 네트워킹이 올바르게 동작함을 확인합니다.
Pod 간 ping 테스트
busybox 인스턴스 3개를 생성합니다.
kubectl create deployment pingtest --image=busybox --replicas=3 -- sleep infinity
IP 주소를 확인합니다.
kubectl get pods --selector=app=pingtest --output=wide
결과
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pingtest-b4b6f8cf-b5z78 1/1 Running 0 3m28s 192.168.38.128 ip-172-31-37-123 <none> <none>
pingtest-b4b6f8cf-jmzq6 1/1 Running 0 3m28s 192.168.45.193 ip-172-31-40-217 <none> <none>
pingtest-b4b6f8cf-rn9nm 1/1 Running 0 3m28s 192.168.60.64 ip-172-31-45-29 <none> <none>
두 번째와 세 번째 Pod의 IP 주소를 적어 둔 다음, 첫 번째 Pod로 접속(exec)합니다. 예를 들면 다음과 같습니다.
kubectl exec -ti pingtest-b4b6f8cf-b5z78 -- sh
Pod 내부에서 나머지 두 Pod의 IP 주소로 ping을 보냅니다. 예를 들면 다음과 같습니다.
ping 192.168.45.193 -c 4
결과
PING 192.168.45.193 (192.168.45.193): 56 data bytes
64 bytes from 192.168.45.193: seq=0 ttl=62 time=1.847 ms
64 bytes from 192.168.45.193: seq=1 ttl=62 time=0.684 ms
64 bytes from 192.168.45.193: seq=2 ttl=62 time=0.488 ms
64 bytes from 192.168.45.193: seq=3 ttl=62 time=0.442 ms
--- 192.168.45.193 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.442/0.865/1.847 ms
라우트 확인
노드 중 하나에서 pingtest Pod들의 IP 주소로 가는 라우트가 존재하는지 확인합니다. 예를 들면 다음과 같습니다.
ip route get 192.168.38.128
결과
192.168.38.128 via 172.31.37.123 dev eth0 src 172.31.42.47 uid 1000
cache
이 예시에서 via 172.31.37.123은 해당 Pod IP의 next-hop을 나타내며, 예상대로 Pod가 스케줄된 노드의 IP 주소와 일치합니다.
서로 다른 풀에서의 IPAM 할당
앞서 두 개의 IP 풀을 만들었지만 하나는 비활성화(disabled) 상태로 두었던 것을 기억하실 겁니다.
calicoctl get ippools -o wide
결과
NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR
pool1 192.168.0.0/18 true Never Never false all()
pool2 192.168.192.0/19 true Never Never true all()
두 번째 풀을 활성화합니다.
calicoctl apply -f - <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool2
spec:
cidr: 192.168.192.0/19
ipipMode: Never
natOutgoing: true
disabled: false
nodeSelector: all()
EOF
pool2에서 주소를 받도록 명시적으로 요청하는 Pod를 생성합니다.
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
name: pingtest-pool2
annotations:
cni.projectcalico.org/ipv4pools: "[\"pool2\"]"
spec:
containers:
- args:
- sleep
- infinity
image: busybox
imagePullPolicy: Always
name: pingtest
EOF
pool2의 IP 주소를 할당받았는지 확인합니다.
kubectl get pod pingtest-pool2 -o wide
결과
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pingtest-pool2 1/1 Running 0 75s 192.168.219.0 ip-172-31-45-29 <none> <none>
기존 pingtest Pod 중 하나에서 해당 IP 주소로 ping을 보냅니다.
ping 192.168.219.0 -c 4
결과
PING 192.168.219.0 (192.168.219.0): 56 data bytes
64 bytes from 192.168.219.0: seq=0 ttl=62 time=0.524 ms
64 bytes from 192.168.219.0: seq=1 ttl=62 time=0.459 ms
64 bytes from 192.168.219.0: seq=2 ttl=62 time=0.505 ms
64 bytes from 192.168.219.0: seq=3 ttl=62 time=0.492 ms
--- 192.168.219.0 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.459/0.495/0.524 ms
정리
kubectl delete deployments.apps pingtest
kubectl delete pod pingtest-pool2
다음 단계
더 알아보기 (Learn more)
Calico "the hard way" 과정의 마지막 테스트 단계로, Pod 간 통신과 라우팅, IPAM 풀 동작을 직접 검증해 봅니다. 테스트가 모두 통과했다면 수동 구축한 클러스터의 네트워킹이 정상적으로 완성된 것입니다. 다음 단계에서는 네트워크 정책을 테스트하며 보안 구성까지 확인해 보세요.