본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

네트워킹 테스트하기

원문 보기 위키 갱신

이 실습에서는 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 풀 동작을 직접 검증해 봅니다. 테스트가 모두 통과했다면 수동 구축한 클러스터의 네트워킹이 정상적으로 완성된 것입니다. 다음 단계에서는 네트워크 정책을 테스트하며 보안 구성까지 확인해 보세요.