[Kubernetes] Node 통신

황시준·2023년 4월 2일
0

Kubernetes

목록 보기
12/12

0. 개요

이번엔 Kubernetes 에서 Node 통신에 대해 알아본다.

1. IPIP모드

  • Pod간 통신이 노드와 노드 구간에 IPIP 인캡슐레이션을 통해 이루어진다.

Azure Network에서는 IPIP통신이 불가하기 때문에 IPIP모드 대신 VXLAN을 사용해야 한다고 한다.

2. Direct 모드

  • 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}"

3. VXLAN 모드

Pod간 통신이 노드와 노드 구간에서는
VXLAN Encapsulation을 통해 이루어 진다.

4. Pod 패킷 암호화

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
profile
하고싶은게 많은 newbie

0개의 댓글