Calico - VXLAN 모드

작성자 김아름 수정일 2023-01-19 08:43

#kubernetes, #쿠버네티스, #cni, #calico, #calico mode

들어가며

  • 스파클링소다 4는 Container Network Interface로 Calico를 사용합니다.

  • Calico는 다양한 네트워크 통신 방법을 제공하고 있습니다.

  • 그 중, 기본값인 IPIP모드와 VXLAN 모드에 대해 알아봅니다.

본 설명에 사용된 클러스터 구성과 구동 중인 pod는 아래와 같습니다.
kubectl get node -owide
NAME      STATUS   ROLES    AGE     VERSION    INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
master1   Ready    master   3h11m   v1.18.19   192.168.50.161   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64        docker://20.10.7
master2   Ready    master   3h6m    v1.18.19   192.168.50.162   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64        docker://20.10.7
master3   Ready    master   3h5m    v1.18.19   192.168.50.163   <none>        CentOS Linux 7 (Core)   3.10.0-1160.81.1.el7.x86_64   docker://20.10.7

kubectl get po -owide
NAME              READY   STATUS    RESTARTS   AGE    IP           NODE      NOMINATED NODE   READINESS GATES
ping-test-fljwb   1/1     Running   1          174m   6.2.180.2    master2   <none>           <none>
ping-test-mrrdv   1/1     Running   1          174m   6.2.136.4    master3   <none>           <none>
ping-test-rfwx9   1/1     Running   2          174m   6.2.137.67   master1   <none>           <none>



IPIP 모드

  • 파드 간 통신이 노드와 노드 구간에서는  IPIP 인캡슐레이션을 통해서 이루어 집니다.
  • 다른 노드의 파드 대역은 BGP로 전달 받아 호스트 라우팅 테이블에 업데이트 됩니다.
  1. 각 노드에 파드 네트워크 대역은 Bird에 의해 BGP로 광고 전파/전달 되며,
  2. Felix에 의해 호스트의 라우팅 테이블에 자동으로 추가 및 삭제 됩니다.
  • 다른 노드 간의 파드 통신은 tunl0 인터페이스를 통해 IP 헤더에 감싸져서 상대측 노드로 도달 후 tunl0 인터페이스에서 Outer 헤더를 제거하고 내부의 파드와 통신됩니다.



  • mode 정보 확인
calicoctl get ippool -o wide
NAME                  CIDR         NAT    IPIPMODE   VXLANMODE   DISABLED   SELECTOR   
default-ipv4-ippool   6.2.0.0/16   true   Always     Never       false      all() 


  • 노드(BGP) Peer 정보 확인
calicoctl node status

# from master1
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.50.162 | node-to-node mesh | up    | 02:07:01 | Established |
| 192.168.50.163 | node-to-node mesh | up    | 02:07:01 | Established |
+----------------+-------------------+-------+----------+-------------+

# from master2
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.50.161 | node-to-node mesh | up    | 02:07:01 | Established |
| 192.168.50.163 | node-to-node mesh | up    | 02:07:01 | Established |
+----------------+-------------------+-------+----------+-------------+

# from master3
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.50.161 | node-to-node mesh | up    | 02:07:01 | Established |
| 192.168.50.162 | node-to-node mesh | up    | 02:07:01 | Established |
+----------------+-------------------+-------+----------+-------------+


  • BGP로 전달받은 파드 네트워크 대역이, 호스트 라우팅 테이블에 적용되었는지 확인
route -n | egrep '(Destination|tunl0)'

# from master1
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
6.2.136.0       192.168.50.163  255.255.255.192 UG    0      0        0 tunl0
6.2.180.0       192.168.50.162  255.255.255.192 UG    0      0        0 tunl0

# from master2
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
6.2.136.0       192.168.50.163  255.255.255.192 UG    0      0        0 tunl0
6.2.137.64      192.168.50.161  255.255.255.192 UG    0      0        0 tunl0

# from master3
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
6.2.137.64      192.168.50.161  255.255.255.192 UG    0      0        0 tunl0
6.2.180.0       192.168.50.162  255.255.255.192 UG    0      0        0 tunl0


  • IPIP 인캡슐레이션 동작을 수행하는 터널 인터페이스 확인
ifconfig tunl0

# from master1
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 1480
        inet 6.2.137.65  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)

# from master2
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 1480
        inet 6.2.180.1  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)

# from master3
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 1480
        inet 6.2.136.2  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)


  • 패킷 캡쳐 확인
# master1
tcpdump -i ens192 proto 4 -w /tmp/calico-ipip.pcap
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes

# other node
kubectl exec -it ping-test-fljwb -- zsh
ping 6.2.137.67



VXLAN

  • 파드 간 통신이 노드와 노드 구간에서는 VXLAN 인캡슐레이션을 통해서 이루어 집니다.

  • 다른 노드 간의 파드 통신은 vxlan 인터페이스를 통해 L2 프레임이 UDP - VXLAN에 감싸져서 상대측 노드로 도달 후, vxlan 인터페이스에서 Outer 헤더를 제거하고 내부의 파드와 통신됩니다.


  • mode 정보 확인
calicoctl get ippool -o wide
NAME                  CIDR         NAT    IPIPMODE   VXLANMODE   DISABLED   SELECTOR   
default-ipv4-ippool   6.2.0.0/16   true   Never      Always      false      all() 


  • 노드(BGP) Peer 정보 확인
calicoctl node status
Calico process is running.

None of the BGP backend processes (BIRD or GoBGP) are running.


  • 파드 네트워크 대역이, 호스트 라우팅 테이블에 적용되었는지 확인
route -n | egrep '(Destination|vxlan)'

# from master1
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
6.2.136.0       6.2.136.3  255.255.255.192 UG    0      0        0 vxlan.calico
6.2.180.0       6.2.180.1  255.255.255.192 UG    0      0        0 vxlan.calico

# from master2
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
6.2.136.0       6.2.136.3  255.255.255.192 UG    0      0        0 vxlan.calico
6.2.137.64       6.2.137.65  255.255.255.192 UG    0      0        0 vxlan.calico

# from master3
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
6.2.137.64       6.2.137.65  255.255.255.192 UG    0      0        0 vxlan.calico
6.2.180.0       6.2.180.1  255.255.255.192 UG    0      0        0 vxlan.calico


  • vxlan 인캡슐레이션 동작을 수행하는 터널 인터페이스 확인
ifconfig vxlan.calico
# from mater1
vxlan.calico: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 6.2.173.65  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 fe80::6431:3aff:fefa:5189  prefixlen 64  scopeid 0x20<link>
        ether 66:31:3a:fa:51:89  txqueuelen 0  (Ethernet)


  • 패킷 캡쳐 확인
# master1
tcpdump -i ens192 udp port 4789 -w /tmp/calico-vxlan.pcap
tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes

# other node
kubectl exec -it ping-test-fljwb -- zsh
ping 6.2.137.67



마무리

  • calico에서 제공하는 네트워크 통신 방법 중, IPIP 모드와 VXLAN 모드에 대해 알아보았습니다.
  • 만일 다른 노드 간의 파드 통신이 이루어지지 않는다면, calico의 네트워크 통신 방법을 변경하여 재시도 해볼 수 있습니다.
  • 본 문서에서 설명한 mode 외에 direct 모드와 cross subnet 모드도 있으니 참고하면 좋겠습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300