- Service Network
- Pod Network
1-1) Pause Container
apiVersion: v1
kind: Pod
metadata:name: pod-pause
spec:nodeSelector:kubernetes.io/hostname: k8s-node1
containers:
- name: container1
image: kubetm/p8000
ports:
- containerPort: 8000
- name: container2
image: kubetm/p8080
ports:
- containerPort: 8080
Pause Container 확인
docker ps | grep pod-pause
Pause Container 인터페이스 확인
docker ps | grep pod-pause
docker inspect <container-id> -f "{{json .NetworkSettings}}"
sudo ln -s /var/run/docker/netns /var/run/netns
ip netns exec <SandboxKey> ip a
1-2) Calico Interface 확인
route 명령 설치
yum -y install net-tools
route로 Pod IP와 연결 되어 있는 인터페이스 확인
route | grep cal
route로 확인된 가상인터페이스 ID가 호스트 네트워크에 있는지 확인
ip addr
1-3) Pause Container Network Namespaces 확인
Pause Container와 타 Container간에 연결 확인
docker inspect <container-id> -f "{{json .HostConfig.NetworkMode}}
2. Pod Network - Calico
Calico는 Kubernetes 클러스터에서 네트워크 정책을 구현하는 오픈소스 소프트웨어
Calico는 BGP 프로토콜을 사용하여 노드 간에 네트워크 라우팅을 수행하며, 네트워크 보안을 강화하기 위해 미세한 수준의 접근 제어 정책을 구현
→ 이를 통해 Kubernetes 클러스터 내에서 각 노드와 컨테이너 간의 통신을 보호하고, 보안 및 네트워크 정책을 구현
2-1) Pod (source)
apiVersion: v1
kind: Pod
metadata:name: pod-src
labels:type: src
spec:nodeSelector:kubernetes.io/hostname: k8s-node2
containers:
- name: container
image: kubetm/init
ports:
- containerPort: 8080
2-2) Pod (destination)
apiVersion: v1
kind: Pod
metadata:name: pod-dest
labels:type: dest
spec:nodeSelector:kubernetes.io/hostname: k8s-node1
containers:
- name: container
image: kubetm/app
ports:
- containerPort: 80
2-3) Overlay Network(IP-in-IP) 트래픽 확인
IPIP 모드 → IP-in-IP라고 불리우는 Overlay 방식으로, Calico의 기본 모드 → Pod의 네트워크 패킷의 기존 IP헤더 앞에 IP헤더를 하나 더 덧붙여 통신하는 방식 → 다른 노드간 Pod 통신은 tunl0 인터페이스를 통해 IP 헤더에 감싸져서 상대 노드로 도달 후 tunl0 인터페이스에서 Outer 헤더를 제거하고 내부의 파드와 통신
Calico Overlay Network 확인
kubectl describe IPPool
Cluster의 Pod Network CIDR(클래스 없는 도메인 간 라우팅 기법) 확인
kubectl cluster-info dump | grep -m 1 cluster-cidr
2-4) 트래픽 확인
tcpdump 설치
yum -y install tcpdump
트래픽 확인
route | grep cal
tcpdump -i <interface-name>
3. Service Network[clusterIP] - Calico
3-1) service (clusterIP)
apiVersion: v1
kind: Service
metadata:name: svc-clusterip
spec:selector:type: dest
ports:
- port: 8080targetPort: 8080type: ClusterIP
3-2) 트래픽 확인
route | grep cal
tcpdump -i <interface-name>
4. Service Network[NodePort] - Calico
4-1) service (NodePort)
apiVersion: v1
kind: Service
metadata:name: svc-nodeport
spec:selector:type: dest
ports:
- port: 8080targetPort: 8080 nodePort: 31080 type: NodePort
4-2) nodeport 확인
netstat -anp | grep 31080
//컴퓨터나 서버에서 31080 포트와 연관된 활성화된 네트워크 연결 또는 수신 대기중인 포트를 확인
4-3) 트래픽 확인
tcpdump -i <interface-name>