본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

LoadBalancer IP 주소 관리

원문 보기 위키 갱신

Calico는 Service type LoadBalancer에 안정적인 IP 주소를 제공하고 관리하는 기능을 갖추고 있어요. LoadBalancer IPAM은 Calico Kube-controllers의 일부로 배포되며, 설정된 IP 풀에서 Service에 주소를 할당해 줘요. 자동 할당과 어노테이션 기반 수동 할당을 모두 지원해요.

출처: 문서

본문

Calico LoadBalancer IP 주소 관리 이해하기

클러스터에서 type LoadBalancer인 Service를 활용해 배포한 애플리케이션에 접근하기 위한 안정적이고 오래 유지되는 IP 주소를 제공하고 싶을 수 있어요. Calico는 클러스터 내 Service에 IP 주소를 제공하고 관리하는 일을 도와줘요. Calico에는 LoadBalancer IPAM이 Calico Kube-controllers의 일부로 함께 배포돼요.

시작하기 전에...

Calico가 설치되고 kube-controllers가 실행 중인 클러스터가 있는지 확인하세요.

LoadBalancer 컨트롤러 활성화하기

기본적으로 LoadBalancer 컨트롤러는 Calico kube-controllers 설정에서 활성화되어 있어요. KubeControllersConfiguration 리소스를 확인해 상태를 검증할 수 있어요.

kubectl get kubecontrollersconfiguration default -o yaml

출력에는 다음과 같은 LoadBalancer 컨트롤러 설정이 포함되어야 해요:

spec:
  controllers:
    loadBalancer:
      assignIPs: AllServices

LoadBalancer 컨트롤러가 활성화되어 있지 않다면, KubeControllersConfiguration 리소스를 패치해서 활성화할 수 있어요:

kubectl patch kubecontrollersconfiguration default  --type=merge --patch '{"spec": {"controllers":{"loadBalancer":{"assignIPs": "AllServices"}}}}'

Service type LoadBalancer를 위한 IP 풀

Calico는 LoadBalancer IP 주소 관리를 위한 기본 IP 풀을 자동으로 제공하지 않아요. Calico가 Service IP를 할당하기 시작하도록 allowedUses가 LoadBalancer인 IP 풀을 직접 만들어야 해요.

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
 name: loadbalancer-ip-pool
spec:
 cidr: 192.210.0.0/20
 blockSize: 24
 natOutgoing: true
 disabled: false
 assignmentMode: Automatic
 allowedUses:
  - LoadBalancer

SECONDARY: CIDR 충돌만 없다면 allowedUses가 LoadBalancer인 IP 풀을 여러 개 만들 수 있어요. assignmentMode를 Manual로 설정하면 해당 IP 풀을 수동 할당 전용으로 예약할 수 있어요. 수동 할당에 대해 더 알아보세요.

자동 Service IP 주소 할당

type LoadBalancer인 Service를 만들면 Calico kube-controller가 새 Service를 자동으로 감지해 사용 가능한 IP 풀에서 IP 주소를 할당해요. 사용 가능한 주소가 없으면 Service는 주소가 생길 때까지 pending 상태로 유지돼요.

apiVersion: v1
kind: Service
metadata:
  name: service-loadbalancer
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      name: default
  type: LoadBalancer

수동 Service IP 주소 할당

Calico가 Service에 할당할 IP 주소를 더 구체적으로 지정하고 싶은 경우가 있어요. 어노테이션을 사용하면 IP 주소가 어떻게 할당될지 지정할 수 있어요. 어노테이션은 Service의 수명 동안 필요에 따라 추가하고 제거할 수 있어요. 어노테이션을 제거하면 Calico kube-controller가 할당된 IP가 여전히 유효한지 확인하고, 필요하다면 새 주소를 할당해요.

IP 풀 지정하기

IPv4 풀

선택한 IP 풀에서 IP 주소를 할당하도록 Service에 projectcalico.org/ipv4pools 어노테이션을 붙이세요. 이 어노테이션에 여러 IP 풀을 지정할 수 있고, Calico가 사용 가능한 IP 주소를 골라 할당해요.

"projectcalico.org/ipv4pools": '["loadBalancerIPv4Pool"]'
IPv6 풀

선택한 IP 풀에서 IP 주소를 할당하도록 Service에 projectcalico.org/ipv6pools 어노테이션을 붙이세요. 이 어노테이션에 여러 IP 풀을 지정할 수 있고, Calico가 사용 가능한 IP 주소를 골라 할당해요.

"projectcalico.org/ipv6pools": '["loadBalancerIPv6Pool"]'

SECONDARY: 듀얼 스택 환경에서는 두 어노테이션을 모두 지정할 필요가 없어요. 어떤 IP 패밀리에 대해 IP 풀이 지정되지 않았다면, Calico가 사용 가능한 IP 풀에서 사용 가능한 IP 주소를 자동으로 할당해요.

IP 주소 지정하기

특정 IP 주소를 할당하도록 Service에 projectcalico.org/loadBalancerIPs 어노테이션을 붙이세요. 그 주소가 사용 가능해야 하며, 그렇지 않으면 Calico가 주소를 할당할 수 없어요. 현재는 IPv4 하나와 IPv6 하나를 동시에 지정할 수 있어요.

"projectcalico.org/loadBalancerIPs": '["x.x.x.x"]'

SECONDARY: Service에 "projectcalico.org/loadBalancerIPs" 어노테이션이 있고 "projectcalico.org/ipv6pools" 또는 "projectcalico.org/ipv4pools" 중 하나도 함께 있으면, Calico는 projectcalico.org/loadBalancerIPs 어노테이션을 우선해 그 IP 주소를 할당하려고 해요. 지정한 주소가 사용 불가능해도 IP 풀로 폴백(fallback)하지 않아요.

LoadBalancer kube-controller 할당 모드 관리하기

상황에 따라 Calico가 Service에 IP 주소를 자동으로 할당하지 않기를 바랄 수도 있어요. 클러스터에 여러 Service IPAM 솔루션이 함께 있을 때 유용하죠. LoadBalancer kube-controller는 두 가지 뚜렷한 모드로 동작할 수 있어요. 클러스터의 모든 Service에 IP 주소를 할당하는 AllServices, 그리고 앞서 언급한 어노테이션이 붙은 Service 또는 Service.spec.loadBalancerClass가 calico로 설정된 Service에만 IP 주소를 할당하는 RequestedServicesOnly예요. 모드는 언제든 바꿀 수 있지만, RequestedServicesOnly로 전환하면 위 어노테이션이 없는 Service에서 주소 할당이 해제된다는 점에 유의하세요.

kubectl patch kubecontrollersconfiguration default  --type=merge --patch '{"spec": {"controllers":{"loadBalancer":{"assignIPs": "RequestedServicesOnly"}}}}'

SECONDARY: LoadBalancer 컨트롤러는 Service.spec.loadBalancerClass를 고려해서, assignIPs 설정과 무관하게 loadBalancerClass가 calico 이외의 값으로 설정된 Service의 할당은 건너뛰어요.

추가 리소스

Calico LoadBalancer IP 주소 관리는 다른 Calico 컴포넌트와 함께 동작해요. Calico kube-controllers는 IP 주소 관리만 제공하므로, LoadBalancer IP를 광고(advertise)하려면 BGP 설정을 직접 업데이트해야 해요. 자세한 내용은 다음을 참고하세요:

더 알아보기 (Learn more)

Calico의 LoadBalancer IPAM은 allowedUses: LoadBalancer인 IP 풀을 만들어야 동작한다는 점이 핵심이에요. 어노테이션으로 풀이나 주소를 직접 지정할 수도 있고, RequestedServicesOnly 모드로 자동 할당 범위를 좁힐 수도 있어요. LoadBalancer IP를 외부에 광고하려면 BGP 설정도 함께 잊지 마세요.