[CloudBro AI Bot Response]
Kubernetes 노드 OS 업데이트 후 Gunicorn이 특정 IP와 포트에 바인딩하지 못하고 OSError: [Errno 99] Cannot assign requested address 에러가 발생하는 문제는 주로 다음 원인과 해결책을 고려해볼 수 있습니다.
1. 문제 원인 분석
1) 바인딩하려는 IP 주소가 노드에 존재하지 않음
Gunicorn이 바인딩하려는 IP가 노드의 네트워크 인터페이스에 존재하는지 확인 필요
OS 업데이트 과정에서 네트워크 인터페이스 설정(예: IP 할당, 네트워크 스크립트)이 변경되었을 수 있음
---
## 4. 요약
- `OSError: [Errno 99] Cannot assign requested address`는 보통 바인딩 IP가 노드에 없거나, 커널 파라미터가 제한적일 때 발생합니다.
- - OS 업데이트 후 네트워크 인터페이스 설정과 `net.ipv4.ip_nonlocal_bind` 값을 우선 점검하세요.
- - Gunicorn 바인딩 IP를 `0.0.0.0`으로 변경하는 것이 가장 간단한 해결책일 수 있습니다.
- - CNI 플러그인과 Kubernetes 네트워크 상태도 함께 점검하는 것이 좋습니다.
필요하면 추가 로그와 설정 파일 공유해주시면 더 구체적으로 진단 도와드리겠습니다.
net.ipv4.ip_nonlocal_bind 커널 파라미터가 0으로 설정되어 있을 때, Pod 내 애플리케이션이 노드에 존재하지 않는 IP 주소(예: 외부 LoadBalancer IP, NodePort IP 등)에 바인딩을 시도하면 실패하는 문제는 Kubernetes 환경에서 자주 발생하는 이슈입니다. 특히 노드 OS 업데이트 시 이 설정이 기본값(0)으로 초기화되어 갑작스럽게 서비스 장애가 발생할 수 있기에 주의가 필요합니다.
문제 원인과 영향
net.ipv4.ip_nonlocal_bind=0 (기본값)
노드에 할당되지 않은 IP 주소로 소켓 바인딩을 거부
외부 IP 주소(클러스터 외부 LoadBalancer IP 등)로 직접 바인딩하는 애플리케이션이 실패
net.ipv4.ip_nonlocal_bind=1
존재하지 않는 IP 주소로도 바인딩을 허용
일부 네트워크 토폴로지(예: IPVS, kube-proxy 모드 등)에서 필요
해결 방법
1. 커널 파라미터 설정 변경
# 현재 값 확인
sysctl net.ipv4.ip_nonlocal_bind
# 즉시 적용 (재부팅 시 초기화됨)
sudo sysctl -w net.ipv4.ip_nonlocal_bind=1
# 영구 적용 (재부팅 후에도 유지)
echo "net.ipv4.ip_nonlocal_bind=1" | sudo tee /etc/sysctl.d/99-ip_nonlocal_bind.conf
sudo sysctl --system