我如何捕获外部IP Voyager / HAProxy / Kubernetes上最终用户的地址?

时间:2020-02-04 11:47:40

标签: kubernetes-ingress haproxy-ingress

我想获取外部IP访问我的申请的客户地址。我在AWS / Kops上使用kubernetes。入口设置是Voyager配置的HAProxy。我正在使用LoadBalancer服务。

我通过Voyager配置了HAProxy,以使用x-forwarded-for批注添加ingress.appscode.com/default-option: '{"forwardfor": "true"}'头。

问题是,当我测试标题时,内部的I.P.我的kubernetes节点之一的地址,而不是我的外部I.P.根据需要。

我不确定在后台使用什么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>

1 个答案:

答案 0 :(得分:0)

通常使用Kubernetes入口,有一些相关设置:

  • xff_num_trusted_hops,它指定“受信任”(即内部)的跃点数。通过这种方式,您可以区分内部IP地址和外部IP地址。
  • 您将要确保在负载均衡器中设置了ExternalTrafficPolicy: local(您未指定LB是什么)

请注意,我最熟悉的是大使(基于Envoy Proxy构建),默认情况下会这样做。