kubernetes 서비스를 사용하여 Google Network Load Balancer에서 클라이언트 IP를 가져 오는 방법

RammusXu

type : LoadBalancer를 사용하여 GKE에서 kubernetes 서비스를 만들었습니다.

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

nginx 서비스이며 원본 클라이언트 IP를 얻으려고합니다. 처럼

        location / {
            echo $remote_addr;
            echo $http_x_forwarded_for;   
        }

그러나 결과는 다음과 같습니다.

10.140.0.97

$remote_addr kubernetes IP 내부와 같습니다.

$http_x_forwarded_for 비었다.

왜 이것이 문서가 말한 것과 다른지 모르겠습니다.

내가 읽은 것

https://cloud.google.com/load-balancing/docs/network

네트워크 부하 분산은 통과 부하 분산기이므로 방화벽 규칙이 클라이언트 소스 IP 주소의 트래픽을 허용해야합니다.

https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview#ext-lb

클러스터 외부 및 VPC 네트워크 외부에서 서비스에 연결할 수 있어야하는 경우 서비스를 정의 할 때 서비스의 유형 필드를 LoadBalancer로 설정하여 서비스를 LoadBalancer로 구성 할 수 있습니다. 그런 다음 GKE는 서비스 앞에 Network Load Balancer를 프로비저닝합니다. Network Load Balancer는 클러스터의 모든 노드를 인식하고 서비스의 외부 IP 주소를 사용하여 VPC 네트워크 외부에서 서비스에 연결할 수 있도록 VPC 네트워크의 방화벽 규칙을 구성합니다. 서비스에 고정 외부 IP 주소를 할당 할 수 있습니다. 자세한 내용은 고정 IP 주소로 도메인 이름 구성을 참조하십시오.

RammusXu

그냥 추가 externalTrafficPolicy: Local

spec:
  externalTrafficPolicy: Local
  type: LoadBalancer

Type = LoadBalancer를 사용하여 서비스로 전송 된 패킷은 기본적으로 소스 NAT가 적용됩니다. 준비 상태의 모든 예약 가능한 Kubernetes 노드는 부하 분산 된 트래픽에 적합하기 때문입니다. 따라서 패킷이 엔드 포인트가없는 노드에 도착하면 시스템은이를 엔드 포인트가있는 노드로 프록시하여 패킷의 소스 IP를 노드의 IP로 바꿉니다 (이전 섹션에서 설명).

참고

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관