Infra/GCP

GKE에서 Outbound IP 고정하기

baecode 2025. 3. 11. 17:10
반응형

Google Cloud Platform(GCP)에서 제공하는 Google Kubernetes Engine(GKE)에서 Outbound IP를 고정하는 방법을 적어보겠습니당.

우리는 가끔 서비스에 필요한 외부서비스의 API 호출 시 IP등록이 필요하고 등록되지 않은 IP 문제(401 Unauthorized)를 방지하기 위해 고정된 Outbound IP를 사용해야합니다.

물론 일반 vm을 사용한다면 문제가 없겠지만, 쿠버네티스 환경에서는 노드마다 ip가 다르고 자동 프로비저닝이 되기 때문에 매번 새로운 ip를 등록할수 없어 고정된 ip를 사용해야하고 클러스터에서 고정 outbound ip를 위해서는 여러 방법을 사용해야합니다.

이 중에서 제가 해결한 방법인 서브넷(Subnet), Cloud Router, Cloud NAT을 활용하는 방법을 다루려고합니다

1. 서브넷(Subnet)이란?

서브넷(Subnet)은 VPC 네트워크 내에서 IP 주소 범위를 할당하는 논리적인 네트워크 구획입니다.
GKE 클러스터는 특정 서브넷을 사용하여 IP 주소를 할당받으며, 이를 통해 내부 네트워크 트래픽을 관리할 수 있습니다.

GCP에서 서브넷을 생성할 때 고려해야 할 사항:

  • 서브넷은 VPC 네트워크 내에서 특정 지역(Region)에 속해야 합니다.
  • 서브넷의 IP 주소 범위(CIDR)를 명확히 지정해야 합니다.
  • GKE 클러스터의 노드와 Pod가 이 서브넷을 통해 통신하게 됩니다.

2. Cloud NAT이란?

Cloud NAT(Network Address Translation)는 GCP에서 제공하는 관리형 NAT 서비스로,
인터넷에 직접 연결되지 않은 GKE 노드나 VM이 공용 IP 없이 외부와 통신할 수 있도록 지원합니다.

Cloud NAT을 활용하는 이유:

  • 노드를 비공개(Private) 상태로 유지하면서도 인터넷과 통신 가능
  • 특정 Outbound IP를 지정하여 API 요청 시 고정된 IP 사용 가능
  • 보안 강화: 내부 자원에 직접 Public IP를 할당하지 않아도 됨

3. Cloud Router란?

Cloud Router는 GCP에서 동적 경로 설정 기능을 제공하는 관리형 라우터입니다.
Cloud NAT과 함께 사용되며, 인터넷으로 나가는 트래픽을 Cloud NAT을 통해 전달하는 역할을 합니다.

Cloud Router를 사용하면:

  • GCP 내부에서 인터넷으로 나가는 트래픽의 라우팅을 관리 가능
  • 동적 라우팅을 통해 네트워크 구성을 자동으로 최적화 가능
  • Cloud NAT과 결합하여 Outbound IP를 고정 가능

Cloud Router & Cloud NAT 설정 방법


4. GKE 클러스터에서 Outbound IP를 고정하는 방법

1) 현재 노드의 External IP 확인

GKE의 노드가 공개(public)인지 확인합니다.

kubectl get nodes -o wide

출력 결과에서 EXTERNAL-IP 값이 NONE이 아닌 경우, 해당 노드는 공개 노드(Public Node)입니다.

2) 노드를 비공개(Private)로 변경

GKE 클러스터의 노드를 비공개로 전환하면, Cloud NAT을 통해 트래픽이 전달되며 Outbound IP가 고정됩니다.

콘솔에서

  • GKE 클러스터로 이동 → 기본 새 노드풀 구성비공개 노드 사용 설정
  • 노드의 external ip가 없어지면서 Cloud NAT을 통해 통신됨

위 명령어는 비공개 노드를 가진 private-nodes 풀을 생성하며, exam-subnet-for-outbound 서브넷을 사용하도록 설정합니다.

3) Outbound IP 테스트

GKE의 Pod에서 Outbound 요청을 실행하여 고정된 IP가 적용되었는지 확인합니다.

curl https://api64.ipify.org

위 명령어를 실행하면, 설정한 Cloud NAT의 Outbound IP가 반환됩니다.


정리@

GKE에서 Outbound IP를 고정하려면?:

  1. Cloud NAT을 생성하고 Cloud Router에 연결
  2. GKE 클러스터의 노드를 비공개(Private)로 변경
  3. 서브넷을 클러스터에 연결하여 네트워크 트래픽을 관리
  4. Cloud NAT을 활용하여 Outbound IP를 고정

이렇게 설정하면 특정 Outbound IP를 통해 외부 API를 호출할 수 있으며, 보안성과 관리 효율성을 높일 수 있습니다.

반응형