이번엔 Kubernetes 에서 Node 통신에 대해 알아본다.
- Pod간 통신이 노드와 노드 구간에
IPIP 인캡슐레이션
을 통해 이루어진다.
Azure Network에서는 IPIP통신이 불가하기 때문에 IPIP모드 대신 VXLAN을 사용해야 한다고 한다.
- Pod 통신 패킷이 출발지 노드의 라우팅 정보를 보고 목적지 노드로
원본 패킷을 그대로 전달
한다.
클라우드 네트워크 경위 NIC에 매칭되지 않는 IP패킷은 차단되므로
Source/Destination Check기능을 Disable
해야한다고 함.
# AWS CLI 로 특정 인스턴스의 Source/Destination Check 기능을 Disable 하기
aws ec2 modify-instance-attribute --instance-id <INSTANCE_ID> --source-dest-check "{\"Value\": false}"
Pod간 통신이 노드와 노드 구간에서는
VXLAN Encapsulation을 통해 이루어 진다.
Pod Network에 대한 암호화를 하고자 한다면 다음 방법을 쓰면 된다.
# 암호화를 사용할 노드에 설치
apt install wireguard -y
# WireGuard 버전 확인
wg version
root@k8s-m:~/yaml# wg version
wireguard-tools v1.0.20200513 - https://git.zx2c4.com/wireguard-tools/
wireguard 설정 및 확인
# 설정
calicoctl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true}}'
# 확인
calicoctl get felixconfiguration default -o yaml | grep wireguardEnabled
root@k8s-m:~/yaml# calicoctl get felixconfiguration default -o yaml | grep wireguardEnabled
wireguardEnabled: true
calicoctl get node <노드 Name> -o yaml | grep wireguardPublicKey
root@k8s-m:~/yaml# calicoctl get node k8s-w1 -o yaml | grep wireguardPublicKey
wireguardPublicKey: BToK9bLEhMaPUJsuKy3KdrxVOpklyo0qlGRdMN6lHWc=
# wireguard.cali 인터페이스 확인
ifconfig wireguard.cali
root@k8s-w1:~# ifconfig wireguard.cali
wireguard.cali: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1440
inet 172.16.228.69 netmask 255.255.255.255 destination 172.16.228.69
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC)
# wireguard.cali 설정 확인 : 통신 포트, Peer/Endpoint 정보, 패킷 암호화를 위한 공개키/사설키 정보
wg showconf wireguard.cali
root@k8s-w1:~# wg showconf wireguard.cali
[Interface]
ListenPort = 51820
FwMark = 0x100000
PrivateKey = AIgTihI2p4icwVMR4sIvuVaSqwKlkxMImQp4A/Gm+Gg=
[Peer]
PublicKey = BToK9bLEhMaPUJsuKy3KdrxVOpklyo0qlGRdMN6lHWc=
AllowedIPs = 172.16.228.64/26, 172.16.228.69/32, 172.16.228.67/32
Endpoint = 192.168.100.101:51820
[Peer]
PublicKey = 9TCD8hG6SLutZSOZSzQeqj6O0icJAxA3RPIipcBKBxs=
AllowedIPs = 172.16.197.0/26, 172.16.197.3/32, 172.16.197.5/32
Endpoint = 192.168.100.103:51820
[Peer]
PublicKey = Ercb/0pNZ+I1ELOkiXlWbZA9J0Fjt7XqsstDH4GhNmI=
AllowedIPs = 172.16.46.3/32, 172.16.46.0/26, 172.16.46.5/32
Endpoint = 192.168.100.102:51820