Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS中基于Kubernetes nginx入口路径的HTTPS路由_Amazon Web Services_Nginx_Kubernetes_Amazon Elb - Fatal编程技术网

Amazon web services AWS中基于Kubernetes nginx入口路径的HTTPS路由

Amazon web services AWS中基于Kubernetes nginx入口路径的HTTPS路由,amazon-web-services,nginx,kubernetes,amazon-elb,Amazon Web Services,Nginx,Kubernetes,Amazon Elb,问题:在Kubernetes中,当定义为TCP时,如何配置nginx入口以将来自弹性负载平衡器的流量视为HTTPS 我正在AWS环境中使用Kubernetes群集。我想使用nginx入口对HTTPS流量进行基于路径的路由;但是,我不想在AWS弹性负载平衡器上执行SSL终止或重新加密 所需设置为: 客户端->弹性负载平衡器->nginx入口->pod 要求: 1.通信量必须进行端到端加密。 2.必须使用AWS ELB,因为车辆不能从外部直接进入Kubernetes 我遇到的问题是,要在ELB上执行

问题:在Kubernetes中,当定义为TCP时,如何配置nginx入口以将来自弹性负载平衡器的流量视为HTTPS

我正在AWS环境中使用Kubernetes群集。我想使用nginx入口对HTTPS流量进行基于路径的路由;但是,我不想在AWS弹性负载平衡器上执行SSL终止或重新加密

所需设置为:

客户端->弹性负载平衡器->nginx入口->pod

要求: 1.通信量必须进行端到端加密。 2.必须使用AWS ELB,因为车辆不能从外部直接进入Kubernetes

我遇到的问题是,要在ELB上执行SSL传递,必须将ELB配置为TCP流量。但是,当ELB定义为TCP时,所有流量都会绕过nginx

据我所知,我可以设置一个通道,但那只是另一个通道;它不允许我在nginx中执行基于路径的路由

我正在寻找一种方法,将ELB定义为TCP for passthrough,同时仍然让入口将流量视为HTTPS


我可以将ELB定义为HTTPS,但在这个过程中还有第二个不必要的协商/中断/重新加密步骤,如果可能的话,我想避免它。

为了更清楚地说明这一点,我将从它开始,它告诉我们TCP是4级协议,HTTP/HTTPS是7级协议。所以,坦率地说,HTTP/HTTP数据是在进行rest级别的封装以将数据包传输到另一个网络设备之前传输到TCP数据的

若您设置它在读取TCP部分后停止读取数据包数据,这就足以根据LB配置来决定该数据包应发送到哪个IP地址和哪个IP端口。之后,LB获取TCP有效负载数据,并将其与另一个TCP层数据打包,然后将其发送到目标点,从而导致应用所有其他OSI层

要使您的配置按预期工作,需要使用公开Pod。然后,可以将Classic ELB配置为将流量传送到为该NodePort服务选择的端口的任何群集节点。通常在30000到32767之间。Sou您的LB池将如下所示:

假设集群节点的IP地址为10.132.10.1…10,节点端口为30276

注意:在AWS ELB的情况下,我想应该使用节点DNS名称而不是IP地址

因此,它应该导致从客户端到Kubernetes应用程序Pod的流量分配顺序如下:

客户端将有效负载中包含HTTP/HTTPS请求的TCP数据包发送到ELB_IP:ELB_端口a.b.c.d:80。 ELB接收IP数据包,分析其TCP数据,从后端池整个Kubernetes群集节点列表中找到合适的端点,并使用相同的HTTP/HTTPS数据创建另一个TCP数据包,并将目标IP和目标TCP端口替换为群集节点IP和服务节点端口TCP端口l.m.n.k:30xxx,然后将其发送到选定的目标。 Kubernetes节点接收TCP数据包,并使用iptables规则再次更改TCP数据包的目标IP和目标端口,并根据节点端口服务配置将数据包转发到目标pod。在这种情况下,它将是nginx入口控制器吊舱。 Nginx ingress controller pod接收TCP数据包,由于根据TCP数据包必须在本地传递,因此从中提取HTTP/HTTP数据,并将数据HTTP/HTTPS请求发送到pod中Nginx容器内的Nginx进程, 容器中的Nginx进程接收HTTP/HTTPS请求,如果是HTTPS,则对其进行解密,并分析所有HTTP头。 根据nginx.conf设置,nginx处理更改HTTP请求并将其传递到为配置的主机和URL路径指定的集群服务。 Nginx进程将更改的HTTP请求发送到后端应用程序。 然后将TCP头添加到HTTP请求中,并将其发送到后端服务IP_地址:TCP_端口。 为后端服务定义的iptables规则将数据包传递到其中一个服务端点应用程序pod。 注意:要终止入口控制器上的SSL,您必须在SAN部分创建包含ELB IP和ELB FQDN的SSL证书

注意:如果要终止应用程序机架上的SSL以进行端到端SSL加密,则可能需要配置nginx以绕过SSL通信

一句话:配置用于向Kubernetes群集提供TCP流量的ELB,如果您以正确的方式配置它,它将与nginx入口控制器完美配合

在GKE Google Kubernetes引擎中,如果您创建一个类型为LoadBalancer的服务,它会创建一个TCP LB,将流量转发到服务节点端口,然后Kubernetes负责将其交付到Pod。AWS提供的EKS弹性Kubernetes服务的工作方式非常类似

ELB Endpoint 1:  10.132.10.1:30276
ELB Endpoint 2:  10.132.10.2:30276
...
ELB Endpoint 10: 10.132.10.10:30276