ip_hash
나는 항상 하나의 서버로만 트래픽을 전달하는 고정 세션을 위해 nginx에 상황이 있습니다 . nginx는 Google Cloud 로드 밸런서 뒤에서 실행되고 있으며, nginx에서 실제로 포드 중 하나로 이동하기 전에 내 앱의 GC Kubernetes 로드 밸런서에 도달합니다.
모든 사용자의 IP가 GC 로드 밸런서에 의해 가려져 nginx가 이를 하나의 소스로 인식한다고 생각합니다.
로드밸런서가 그들을 다른 사용자로 인식할 수 있도록 사용자의 원래 IP를 nginx 헤더에 추가할 수 있다고 들었습니다. 어떻게 접근할 수 있나요? 아니면 다른 해결책이 있나요?
답변1
네트워크 부하 분산(대상 풀 포함)을 사용하는 경우 부하 분산 장치가 IP를 유지합니다. Kubernetes가 상황을 변화시키고 있다는 것입니다.소스 IP클러스터/노드 IP로.
Kubernetes에는 클라이언트 소스 IP를 보존하는 기능이 있습니다. 문서에서 확인할 수 있습니다.Type=LoadBalancer를 사용하여 서비스에서 클라이언트 소스 IP를 보존하는 방법(네트워크 부하 분산).
답변2
구성세션 어피니티초기 구성 중에대상 풀다음 중 하나로 설정하여기본값이 아닌 값원하는 수준의 서비스를 제공하기 위해고정 세션:
CLIENT_IP
소스 및 대상 IP를 사용하는 2튜플 해싱. 인스턴스가 정상 상태로 유지되는 한 클라이언트의 모든 연결은 프로토콜에 관계없이 동일한 인스턴스에서 종료됩니다.
CLIENT_IP_PROTO
소스 및 대상 IP와 프로토콜을 사용하는 3튜플 해싱. 클라이언트의 모든 연결은 동일한 프로토콜을 사용하고 인스턴스가 정상으로 유지되는 한 동일한 인스턴스에서 종료됩니다.
락슈만 디와카르세션 선호도 구성을 수정할 수 없는 속성 세트로 나타냅니다."만드는 동안"대상 풀. 사용 가능한 Cloud Compute 부하 분산 기능에 대한 그의 리뷰는 다음과 같은 내용을 검토하는 데 흥미로울 수 있습니다.네트워크 부하 분산기 및 HTTP(s) 부하 분산기.
답변3
Proxy_set_header를 사용하여 원본 IP를 NGINX 헤더에 추가하세요. 다음 예를 확인해 보세요.
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
같은 방법으로 NGINX 헤더에 IP 원본을 추가할 수 있습니다.