我想捕获访问我的应用程序的客户的外部 I.P. 地址。 我在 AWS/Kops 上使用 kubernetes。 入口设置是Voyager配置的HAProxy。 我正在使用负载均衡器服务。
我通过Voyager配置了HAProxy,以使用ingress.appscode.com/default-option: '{"forwardfor": "true"}'
注释添加x-forwarded-for
标头。
问题是,当我测试标头时,我的一个 kubernetes 节点的内部 IP 地址,而不是所需的外部 IP。
我不确定 LoadBalancer voyager 在幕后使用什么,没有关联的 pod,只有一个用于入口控制器。
kubectl describe svc voyager-my-app
输出
Name: <name>
Namespace: <namespace>
Labels: origin=voyager
origin-api-group=voyager.appscode.com
origin-name=<origin-name>
Annotations: ingress.appscode.com/last-applied-annotation-keys:
ingress.appscode.com/origin-api-schema: voyager.appscode.com/v1beta1
ingress.appscode.com/origin-name: <origin-name>
Selector: origin-api-group=voyager.appscode.com,origin-name=<origin-name>,origin=voyager
Type: LoadBalancer
IP: 100.68.184.233
LoadBalancer Ingress: <aws_url>
Port: tcp-443 443/TCP
TargetPort: 443/TCP
NodePort: tcp-443 32639/TCP
Endpoints: 100.96.3.204:443
Port: tcp-80 80/TCP
TargetPort: 80/TCP
NodePort: tcp-80 30263/TCP
Endpoints: 100.96.3.204:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
通常对于 Kubernetes 入口,有几个相关的设置:
xff_num_trusted_hops
,它指定"受信任"的跃点数,即内部跃点数。通过这种方式,您可以区分内部和外部 IP 地址。
您需要- 确保在负载均衡器中设置
ExternalTrafficPolicy: local
(您没有指定您的 LB 是什么(
请注意,我最熟悉的是大使(基于特使代理构建(,默认情况下会执行此操作。