首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不工作于Kubernetes集群的ELB(经典负载均衡器)代理协议

不工作于Kubernetes集群的ELB(经典负载均衡器)代理协议
EN

Stack Overflow用户
提问于 2019-02-07 06:57:49
回答 1查看 1.4K关注 0票数 0
  • 在AWS (EKS)上创建K8s集群。
  • 创建了部署工作负载。
  • 创建带有注释service.beta.kubernetes.io/aws-load-balancer-proxy-protocol:"*“(应该在ELB上启用代理协议)的TCP端口4334的Service负载平衡器。

因此,在我的吊舱中,我无法看到保持客户机IP的代理协议。尝试过数据包嗅探器和tcpdump,但没有看到协议保存了客户机IP。

有人能告诉我如何验证代理协议是否保存了客户端IP吗?

请参考下面提到的负载均衡器。它有一个名为“支持K8s-proxyprotocol”的策略,它应用于实例端口31431上的'BackendServerDescriptions‘。

我观察到的一件事是,例如,在'ListenerDescriptions‘中,端口31431策略名是空的。若要使代理协议按预期工作,是否需要在侦听器描述中对侦听器策略应用“K8s-proxyprotocol启用”?

有人能确认下面的配置是否足以使代理协议保留源IP或必须执行额外的配置吗?

代码语言:javascript
复制
"LoadBalancerDescriptions": [
    {
        "Subnets": [
            "subnet-1",
            "subnet-2",
            "subnet-2"
        ],
        "CanonicalHostedZoneNameID": "******",
        "CanonicalHostedZoneName": "*************",
        "ListenerDescriptions": [
            {
                "Listener": {
                    "InstancePort": 31431,
                    "LoadBalancerPort": 4334,
                    "Protocol": "TCP",
                    "InstanceProtocol": "TCP"
                },
                "PolicyNames": []
            }
        ],
        "HealthCheck": {
            "HealthyThreshold": 2,
            "Interval": 10,
            "Target": "TCP:31499",
            "Timeout": 5,
            "UnhealthyThreshold": 6
        },
        "VPCId": "vpc-***********",
        "BackendServerDescriptions": [
            {
                "InstancePort": 31431,
                "PolicyNames": [
                    "k8s-proxyprotocol-enabled"
                ]
            }
        ],
        "Instances": [
            {
                "InstanceId": "i-085ece5ecf"
            },
            {
                "InstanceId": "i-0b4741cf"
            },
            {
                "InstanceId": "i-03aea99"
            }
        ],
        "DNSName": "***************************",
        "SecurityGroups": [
            "sg-********"
        ],
        "Policies": {
            "LBCookieStickinessPolicies": [],
            "AppCookieStickinessPolicies": [],
            "OtherPolicies": [
                "k8s-proxyprotocol-enabled"
            ]
        },
        "LoadBalancerName": "a1df476de2aa011e9aabe0af927e6700",
        "CreatedTime": "2019-02-07T06:18:01.020Z",
        "AvailabilityZones": [
            "us-east-1a",
            "us-east-1b",
            "us-east-1c"
        ],
        "Scheme": "internet-facing",
        "SourceSecurityGroup": {
            "OwnerAlias": "906391276258",
            "GroupName": "k8s-elb-a1df476de2aa011e9aabe0af927e6700"
        }
    }
]
EN

回答 1

Stack Overflow用户

发布于 2019-02-08 18:37:28

是的,设置这个注释就足以在负载均衡器级别(ELB )启用代理协议v1。

service.beta.kubernetes.io/aws-load-balancer-proxy-protocol:"*“

我正在通过带有上述注释的LoadBalancer服务类型公开入口-nginx控制器,当将日志级别设置为调试运行它时,我可以看到每个客户端请求都保留真实的源IP:

172.20.32.78 - 172.20.32.78 -08/20b/2019:18:02:43 +0000“代理TCP4 xxx.xx 172.20.xx.xxx 42795 80”400 157 -“0 0.172 []

Xxx.xx-是我的私人ip地址,不是LB地址。

另一件事是在so的后端启用代理协议,以便它能够正确地理解转发的客户端请求(以下是尼克斯的步骤)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54567880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档