티스토리 뷰

1. 쿠버네티스 클러스터의 네트워크 기본 구성

1) 클러스터 구조

(1) 마스터 노드

- 쿠버네티스 컨트롤 플레인을 실행 

- API 서버, 스케줄러, 컨트롤러 매니저, ETCD와 같은 주요 컴포넌트를 포함

(2) 워커 노드

- 애플리케이션 워크로드를 실행하여, kubelet과 kube-proxy가 동작 

2) 네트워크 요구 사항

(1) 노드 인터페이스 

- 각 노드는 최소 하나 이상의 네트워크 인터페이스를 가져야 하며, 이 인터페이스는 고유한 IP 주소를 가져야 함 

- 각 노드는 고유한 호스트 이름과 MAC 주소를 가져야 하며, 이는 특히  VM을 복제하여 생성한 경우 확인해야 함.

(2) 마스터 노드 필수 포트

- 6443: Kubernetes API 서버 포트

- 10259: Kubernetes 스케줄러 사용 포트

- 10257: Kubernetes 컨트롤러 매니저가 사용하는 포트 

- 2379: ETCD서버가 사용하는 포트(데이터 저장소 역할)

- 2380: 다중 마스터 환경에서 ETCD 간 통신을 위한 추가 포트 

(3) 워커노드 

- 10250: Kubelet이 사용하는 포트(Pod 상태 보고 및 명령 수신에 사용)

- 30000~32767 Nodeport 서비스를 통해 외부에서 접근 가능한 포트 범위 

3) IP table 규칙 설정 

(1) 로컬 네트워크 환경에서 iptable을 사용하여 필요한 포트를 열고 트래픽을 허용 

iptables -A INPUT -p tcp --dport 6443 -j ACCEPT
iptables -A INPUT -p tcp --dport 10250 -j ACCEPT

4) 네트워크 정보 확인 명령어

## 인터페이스 확인
ip link
## IP 주소확인 
ip addr
## 라우팅 테이블 확인 
ip route
## 포트 상태 확인 
netstat -tuln | grep LISTEN

 

5) Pod 네트워크 개념 

(1) Pod와 네트워크 

- 쿠버네티스에서 각 Pod는 고유한 IP 주소를 할당 

- 이 IP는 클러스터내 모든 노드에서 접근 가능하고 Pod 간 통신은 NAT 없이 이루어져야 함 

- 모든 Pod는 동일 노드에 있는 다른 Pod와 통신할 수 있어야 하며, 다른 노드에 있는 Pod와도 통신할 수 있어야 한다. 

(2) Pod Networking 구성요소 

- Network Nampespace: 각 Pod에 대해 고유한 네트워크 네임스페이스를 생성한다. 네임스페이스는 격리된 네트워크 환경을 제공하며, 각 Pod는 자체 가상 인터페이스를 가짐 

- CNI(Container Network Interface): CNI를 사용하여 네트워크 플러그인을 호출하고 Pod의 네트워크 설정을 자동화(IP 주소 할당, 라우팅 테이블 설정, 가상 이더넷 페어 생성 및 브리지 연결)

- Network Plugin: Flannel, Calico 등 다양한 네트워크 플러그인 을 지원하여 Pod 간 통신을 구현 

6) Pod 네트워킹 동작 방식 

(1) 같은 노드 내의 Pod 간 통신 

- 각 Pod는 Veth Pair를 통해 브리지에 연결

- 브리지는 동일한 서브넷 내에서 트래픽을 전달 

(2) 다른 노드 간의 Pod 통신 

- 출발지 Pod의 패킷이 노드의 기본 게이트웨이로 전달

- 기본 게이트웨이는 클러스터 네트워크를 통해 대상 노드로 패킷을 전달 

- 대상 노드가 패킷을 통해 해당 Pod로 전달 

7) 구현 방식

(1) 가상 브리지와 Veth Pair

- 각 노드는 가상 브리지를 생성하며, 모든 Pod는 Veth Pair를 통해 이 브리지에 연결

- Veth Pair 한쪽 끝은 브리지에 연결되고, 다른 쪽 끝은 Pod의 네임스페이스에 연결  

(2) CNI를 통해 각 Pod에 고유한 IP 주소 할당 

(3) 라우팅 테이블 

- 각 노드는 라우팅 테이블을 사용하여 다른 노드의 서브넷으로 트래픽을 전달 

ip route add 10.244.1.0/24 via <Node2-IP>
ip route add 10.244.2.0/24 via <Node3-IP>

8) 네트워킹에서 CNI 

(1) CNI 역할: CNI는 쿠버네티스트가 Pod를 생성할 때 호출되며, 다음 작업을 자동으로 수행

- Veth Pair 생성 및 연결 

- 브리지 설정 및 라우팅 구성

- IP 주소 할당 및 반환 

(2) CNI 설정 디렉토리(--cni-conf-dir)

- /etc/cni/net.d

- 디렉토리는 CNI 플러그인의 네트워크 구성을 정의하는 JSON 파일을 포함

- 브리지 네트워크, IPAM 설정 

## 브리지
{
  "cniVersion": "0.4.0",
  "name": "example-network",
  "type": "bridge",
  "bridge": "cni0",
  "ipam": {
    "type": "host-local",
    "subnet": "10.244.0.0/16"
  }
}

(3) CNI 바이너리 디렉토리

- /etc/cni/bin 

- CNI 플러그인의 실행파일을 포함

- bridge, host-local, macvlan 등 다양한 네트워크 플러그인 바이너리 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함