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

파드에 특정 IP 주소 사용하기

원문 보기 위키 갱신

Calico IPAM이 자동으로 고르게 두지 말고, 파드가 사용할 IP 주소를 직접 지정하는 방법을 다뤄요. 파드 어노테이션 하나로 요청한 주소를 고정할 수 있어서, 안정적인 IP가 필요한 앱이나 외부 DNS에 파드를 직접 가리키는 구성에 유용해요.

출처: 문서

본문

큰 그림

Calico가 자동으로 선택하게 두는 대신, 파드의 IP 주소를 직접 선택해요.

이런 점이 좋아요

안정적인 IP 주소 사용을 요구하는 애플리케이션들이 있어요. 또한 파드를 직접 가리키는 항목을 외부 DNS 서버에 만들고 싶을 수도 있는데, 이에는 고정 IP가 필요해요.

개념

Kubernetes 파드 CIDR

Kubernetes 파드 CIDR은 Kubernetes가 파드 IP가 할당되기를 기대하는 IP 범위예요. 클러스터 전체에 대해 정의되며, 여러 Kubernetes 컴포넌트가 어떤 IP가 파드에 속한 IP인지 판단하는 데 사용해요. 예를 들어 kube-proxy는 IP가 파드에서 온 것인지 아닌지에 따라 트래픽을 다르게 처리해요. Kubernetes가 올바르게 동작하려면 모든 파드 IP가 이 CIDR 범위 안에 있어야 해요.

IP 풀

IP 풀은 Calico가 파드 IP를 할당하는 IP 주소 범위예요. 고정 IP는 반드시 IP 풀 안에 있어야 해요.

시작하기 전에...

이 기능을 사용하려면 클러스터가 Calico IPAM을 사용해야 해요.

클러스터가 어떤 IPAM을 사용하는지 확실하지 않다면, 확인 방법은 설치 방식에 따라 달라요.

Tab: Operator

기본 Installation 리소스에서 IPAM 플러그인을 조회할 수 있어요.

kubectl get installation default -o go-template --template {{.spec.cni.ipam.type}}

클러스터가 Calico IPAM을 사용 중이라면 위 명령은 Calico를 반환해요.

Tab: Manifest

Kubernetes 노드 중 하나에 SSH로 접속해서 CNI 설정을 살펴보세요.

cat /etc/cni/net.d/10-calico.conflist

다음 항목을 찾아 보세요:

         "ipam": {
              "type": "calico-ipam"
          },

이 항목이 있으면 Calico IPAM을 사용 중이에요. IPAM이 Calico가 아니거나 10-calico.conflist 파일이 없다면, 클러스터에서 이 기능들을 사용할 수 없어요.

방법

파드에 cni.projectcalico.org/ipAddrs 키를, 값은 대괄호로 묶은 할당할 IP 주소 목록으로 어노테이션하세요. 예를 들면:

  "cni.projectcalico.org/ipAddrs": "[\"192.168.0.1\", \"2001:db8::1\"]"

주소를 둘러싼 안쪽 큰따옴표에 이스케이프된 \"가 사용된 점에 주의하세요.

주소는 설정된 Calico IP 풀 안에 있어야 하고, 현재 사용 중이어서는 안 돼요. 어노테이션은 파드가 생성될 때 반드시 존재해야 해요; 나중에 추가해도 효과가 없어요.

현재 이 어노테이션으로는 파드당 IP 패밀리별로 단 하나의 IP 주소만 지원된다는 점도 기억하세요.

수동 할당을 위한 IP 예약하기

cni.projectcalico.org/ipAddrs 어노테이션은 IP 주소가 IP 풀 안에 있기를 요구해요. 이는 곧, 기본적으로 Calico가 여러분이 선택한 IP 주소를 다른 워크로드나 내부 터널 주소로 사용해 버릴 수 있다는 뜻이에요. 이를 막으려면 몇 가지 옵션이 있어요:

  • IPPool 전체를 수동 할당용으로 예약하려면, 그 노드 셀렉터를 "!all()"로 설정할 수 있어요. !all()은
    어떤 노드도 매칭할 수 없으므로, 그 IPPool은 자동 할당에 사용되지 않아요.

  • 풀의 일부를 예약하려면 IPReservation 리소스를 만들 수 있어요. 이렇게 하면 특정 IP를 예약해서 Calico IPAM이 자동으로 사용하지 않게 할 수 있어요. 다만 수동 할당(어노테이션 사용)은 "예약된" IP를 여전히 사용할 수 있어요.

  • Calico가 특정 풀의 IP를 내부 IPIP 및/또는 VXLAN 터널 주소로 사용하지 못하게 하려면, IPPool에 allowedUses 필드를 ["Workload"]로 설정할 수 있어요.

추가 리소스

Calico CNI와 Calico IPAM 설정에 도움이 필요하면 Calico CNI 플러그인 구성을 참고하세요.

더 알아보기 (Learn more)

고정 IP 어노테이션은 파드 생성 시점에만 유효하고, IP 풀 안의 미사용 주소여야 해요. 자동 할당과 충돌을 막으려면 !all() 노드 셀렉터, IPReservation, allowedUses 중 상황에 맞는 방법을 골라 쓰세요.