1

我想捕获访问我的应用程序的客户端的外部 IP 地址。我在 AWS/Kops 上使用 Kubernetes。入口设置是 Voyager 配置的 HAProxy。我正在使用 LoadBalancer 服务。

我通过 Voyager 配置 HAProxyx-forwarded-for以使用ingress.appscode.com/default-option: '{"forwardfor": "true"}'注释添加标头。

问题是,当我测试标头时,通过的是我的一个 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>
4

1 回答 1

1

通常对于 Kubernetes 入口,有几个相关设置:

  • xff_num_trusted_hops,它指定“受信任”即内部的跃点数。这样您就可以区分内部和外部 IP 地址。
  • 您需要确保ExternalTrafficPolicy: local在负载均衡器中进行设置(您没有指定 LB 是什么)

注意我最熟悉默认情况下执行此操作的大使(基于 Envoy 代理)。

于 2020-02-04T13:41:46.157 回答