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 주소로 도메인 이름 구성을 참조하십시오.
그냥 추가 externalTrafficPolicy: Local
spec:
externalTrafficPolicy: Local
type: LoadBalancer
Type = LoadBalancer를 사용하여 서비스로 전송 된 패킷은 기본적으로 소스 NAT가 적용됩니다. 준비 상태의 모든 예약 가능한 Kubernetes 노드는 부하 분산 된 트래픽에 적합하기 때문입니다. 따라서 패킷이 엔드 포인트가없는 노드에 도착하면 시스템은이를 엔드 포인트가있는 노드로 프록시하여 패킷의 소스 IP를 노드의 IP로 바꿉니다 (이전 섹션에서 설명).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다