【问题标题】:Get URL from access logs for AWS classic ELB that listens over TCP?从通过 TCP 侦听的 AWS 经典 ELB 的访问日志中获取 URL?
【发布时间】:2019-12-13 08:50:30
【问题描述】:

我正在 AWS 中运行具有客户端和服务器组件的应用程序。客户端通过经典的 ELB 与服务器通信。

具体来说,我正在运行部署到托管 kubernetes 集群 (EKS) 的 JupyterHub

我的要求:获取显示请求 URL 的 HTTP 日志。

目前,我不能这样做,因为:

ELB 通过 TCP(在 443 上)侦听安全流量,通过 TCP 侦听的负载平衡器的 ELB 访问日志不包含 URL。 (只有通过 HTTP 侦听的负载均衡器才会显示 URL。)

ELB 需要通过 TCP 侦听,因为应用程序的某些部分使用 websocket 通信。由于安全 TCP (websocket) 流量和 https 流量都经过端口 443,并且您只能在一个协议上监听单个端口,因此我无法监听 http 流量,因此无法获得 HTTP elb 访问显示 URL 的日志。

为了这个问题,让我们假设应用程序是一个黑盒并且不可配置。使用上述当前设置,我有什么方法可以获取显示 URL 的 HTTP 请求日志?

我将此问题定为 AWS 配置问题(以保持问题的范围简单而狭窄)——但是我也愿意接受一个解决方案,让我配置 jupyterhub 笔记本服务器用于 websocket 的端口与/api/kernel 端点的通信。如果我可以将端口配置为 443 以外的端口,那么我的 ELB 上可以有两个侦听器。

【问题讨论】:

  • 您是使用 ingress 还是 nodeport 在您的 EKS 集群中公开您的 JupyterHub 应用程序?
  • @congbaoguier 不好意思我没看懂问题?
  • 好吧,如果您不调整应用程序(JupyterHub)的配置,那么您永远无法通过 TCP 侦听器获取带有 URL 的 HTTP 日志。但是,如果您将 NodePort 用于 JupyterHub 的服务,您可以选择在 JupyterHub 的 k8s 服务对象端进行调整,以更改主机容器端口映射。如果您是入口,您可能根本不用担心如何将您的应用程序端口映射到主机端口。要找出答案,请转到 JupyterHub 的 Service 对象并将其包含在问题中,以便人们更好地了解您的环境。

标签: amazon-web-services kubernetes jupyter-notebook amazon-elb jupyterhub


【解决方案1】:

切换到Application Load Balancer。它们在单个侦听器上支持带有 websocket 的 HTTPS。

TCP 模式下的 ELB Classic 完全不知道通过它的有效负载,因此它没有 URL 的概念。

【讨论】:

    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2020-03-10
    • 2021-11-10
    相关资源
    最近更新 更多