kube代理和nginx后端之间的连接被拒绝

kube代理和nginx后端之间的连接被拒绝,nginx,kubernetes,kube-proxy,Nginx,Kubernetes,Kube Proxy,我们经常在AWS EKS中安装的定制NGINX反向代理上看到连接拒绝错误。(有关kubernetes模板,请参见下文) 起初,我们认为这是负载平衡器的问题。然而,经过进一步调查,kube代理和nginx Pod之间似乎存在问题 当我仅针对节点的内部IP和提供服务的所需节点端口重复运行wget IP:PORT时,我们会多次看到错误的请求,最终,失败:连接被拒绝 然而,当我仅针对Pod IP和端口运行请求时,我无法拒绝此连接 示例wget输出 失败: 成功: wget ip.ap-southeast

我们经常在AWS EKS中安装的定制NGINX反向代理上看到连接拒绝错误。(有关kubernetes模板,请参见下文)

起初,我们认为这是负载平衡器的问题。然而,经过进一步调查,kube代理和nginx Pod之间似乎存在问题

当我仅针对节点的内部IP和提供服务的所需节点端口重复运行
wget IP:PORT
时,我们会多次看到错误的请求,最终,
失败:连接被拒绝

然而,当我仅针对Pod IP和端口运行请求时,我无法拒绝此连接

示例wget输出

失败:

成功:

wget ip.ap-southeast-2.compute.internal:30102
--2020-06-26 01:15:31--  http://ip.ap-southeast-2.compute.internal:30102/
Resolving ip.ap-southeast-2.compute.internal (ip.ap-southeast-2.compute.internal)... 10.1.95.3
Connecting to ip.ap-southeast-2.compute.internal (ip.ap-southeast-2.compute.internal)|10.1.95.3|:30102... connected.
HTTP request sent, awaiting response... 400 Bad Request
2020-06-26 01:15:31 ERROR 400: Bad Request.
在NGINX服务的日志中,我们没有看到拒绝请求的连接,但是我们看到了其他错误的请求

我已经阅读了有关kube proxy的几个问题,我对改善这种情况的其他见解感兴趣

例如:

非常感谢您的帮助

Kubernetes模板

##
#主nginx部署。可能需要更新的标记以用于
#docker图像
##
---
apiVersion:apps/v1#对于1.9.0之前的版本,请使用apps/v1beta2
种类:部署
元数据:
名称:nginx lua ssl部署
标签:
服务:https自定义域
规格:
选择器:
火柴标签:
应用程序:nginx lua ssl
副本:5份
模板:
元数据:
标签:
应用程序:nginx lua ssl
服务:https自定义域
规格:
容器:
-名称:nginx lua ssl
图片:“0000000000.dkr.ecr.ap-southerast-2.amazonaws.com/lua resty auto-ssl:v0.NN”
imagePullPolicy:始终
端口:
-集装箱港口:8080
-集装箱港口:8443
-集装箱港口:8999
来自:
-configMapRef:
名称:https自定义域配置
##
#管理进入nginx实例的流量的负载平衡器
#在aws中,它使用ELB(弹性负载平衡器)结构
##
---
版本:v1
种类:服务
元数据:
注释:
service.beta.kubernetes.io/aws-load-balancer-type:nlb
名称:nginx lua负载平衡器
标签:
服务:https自定义域
规格:
端口:
-名称:http
港口:80
目标港:8080
-名称:https
港口:443
目标港:8443
外部流量策略:本地
选择器:
应用程序:nginx lua ssl
类型:负载平衡器

这是一个棘手的问题,因为它可能位于堆栈的任何一层

几点提示:

  • 检查在相关节点上运行的kube代理的日志

    $ kubectl logs <kube-proxy-pod>
    
  • kube代理在其运行的节点中是否有足够的资源?您还可以尝试更改kube代理守护程序,为其提供更多资源(CPU、内存)

    容器:
    -命令:
    -/bin/sh
    --c
    -kube-proxy--v=2--config=/var/lib/kube-proxy-config/config--hostname-override=${NODE_-NAME}
    环境:
    -名称:节点名称
    价值来源:
    fieldRef:
    版本:v1
    字段路径:spec.nodeName
    图片:60240113452.dkr.ecr.us-west-2.amazonaws.com/eks/kube proxy:v1.15.10
    imagePullPolicy:如果不存在
    姓名:kube proxy
    资源:
    请求:
    
    cpu:300m最后,这个问题是由于Pod配置不正确导致负载平衡器将流量路由到它:

    selector:
      matchLabels:
        app: redis-cli
    
    有5个nginx吊舱正确接收流量,一个公用吊舱错误接收流量,并按预期拒绝连接

    感谢您的回复

    $ docker log <kube-proxy-container>
    
    selector:
      matchLabels:
        app: redis-cli