IP 풀 구성
IP 풀은 Calico가 워크로드 엔드포인트에 주소를 할당할 때 사용하는 IP 범위예요. 이 문서는 "Calico the hard way" 시리즈의 한 단계로, pod CIDR 안에 두 개의 IP 풀을 정의하고 calicoctl로 등록하는 과정을 안내합니다. CIDR 프리픽스 계산 방법도 함께 설명해요.
출처: 문서
본문
*워크로드(workload)*는 Calico가 가상 네트워킹을 처리하는 컨테이너 또는 VM이에요. Kubernetes에서 워크로드는 파드입니다. 워크로드 엔드포인트는 워크로드가 Calico 네트워크에 연결할 때 사용하는 가상 네트워크 인터페이스예요.
IP 풀은 Calico가 워크로드 엔드포인트에 사용하는 IP 주소 범위입니다.
Kubernetes 클러스터를 띄울 때 pod CIDR을 설정했어요. pod CIDR은 Kubernetes가 파드가 속한다고 판단하는 IP 주소 범위인데, 많은 Kubernetes 컴포넌트가 이 설정으로 어떤 IP가 파드에 속하는지 판단하기 때문에, 보통은 구성하는 모든 IP 풀이 pod CIDR의 부분집합이기를 원합니다.
이 클러스터에서 사용할 IP 풀 두 개를 정의해 봅시다. 풀 하나만으로도 프로덕션 수준의 Calico 설치가 가능하지만, 이 가이드 뒤에서 고급 네트워킹을 보여주기 위해 두 개를 정의해요.
cat > pool1.yaml <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool1
spec:
cidr: 192.168.0.0/18
ipipMode: Never
natOutgoing: true
disabled: false
nodeSelector: all()
EOF
pod CIDR은 192.168.0.0/16이었어요. /16은 32비트 IPv4 주소 중 16비트가 고정 프리픽스라는 뜻이므로, CIDR 안에서 16비트가 자유롭게 변할 수 있고 대략 64K개 주소에 해당합니다. 첫 번째 IP 풀로는 프리픽스 192.168.0.0/18을 정의하는데, 14비트만 자유로워져 파드에 약 16K개 주소를 제공해요. 아주 큰 Kubernetes 클러스터에도 충분한 양이고, 추가 IP 풀을 만들고 싶을 때를 대비해 pod CIDR 안에 여유도 많이 남깁니다.
바로 두 번째 풀을 정의해 봅시다.
cat > pool2.yaml <<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool2
spec:
cidr: 192.168.192.0/19
ipipMode: Never
natOutgoing: true
disabled: true
nodeSelector: all()
EOF
두 번째 풀에서는 disabled를 true로 설정했어요. 그러면 Calico는 이 풀의 주소로 새 파드를 만들지는 않지만, 이 주소를 가진 기존 파드는 여전히 Calico 네트워크의 일부로 인식합니다. 뒤에서 네트워킹 테스트 실습에서 이 풀을 활성화하고, 파드가 어떤 풀에서 주소를 할당받는지 제어하는 방법을 시연할 거예요.
nodeSelector는 어떤 노드가 그 풀을 사용하는지 결정하는 라벨 셀렉터예요. 둘 다 all()로 설정되어 모든 노드가 풀을 사용할 수 있습니다.
이 풀들을 Calico에 추가하세요
calicoctl create -f pool1.yaml
calicoctl create -f pool2.yaml
다음으로 풀이 만들어졌는지 확인합니다
calicoctl get ippools
다음과 비슷한 출력을 볼 거예요
NAME CIDR SELECTOR
pool1 192.168.0.0/18 all()
pool2 192.168.192.0/19 all()
다음
더 알아보기 (Learn more)
IP 풀은 반드시 pod CIDR의 부분집합으로 만드는 것이 안전해요. disabled 풀은 주소를 새로 할당하지 않으면서 기존 주소의 인식을 유지하는 편리한 수단입니다.