티스토리 뷰
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 등 다양한 네트워크 플러그인 바이너리
'쿠버네티스' 카테고리의 다른 글
[쿠버네티스] 9. 네트워크 3) 서비스 네트워킹 (0) | 2024.12.13 |
---|---|
[쿠버네티스] 9. 네트워크 2) CNI (0) | 2024.12.13 |
[쿠버네티스] 8. 스토리지 (4) | 2024.12.13 |
[쿠버네티스] 7. 보안 (5) 네트워크 정책 (0) | 2024.12.13 |
[쿠버네티스] 7.보안 (4) 승인 (0) | 2024.12.13 |