在 Kubernetes 中使用 NGINX Ingress 公开 TCP 服务

问题描述 投票:0回答:1

我已遵循此处提到的所有步骤 - https://kubernetes.github.io/ingress-nginx/user-guide/exusing-tcp-udp-services/

  1. 指定
    <external-port>: <namespace/k8s-svc:port>
  2. 的配置映射
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
  9000: "default/sample-go-app:8080"
  1. 包含
    Load balancer service
    部分下的
    external-port
    ports
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  ports:
    - name: proxied-tcp-9000
      port: 9000
      targetPort: 9000
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  1. 最后,将上述配置映射作为参数传递给入口控制器的部署
args:
    - /nginx-ingress-controller
    - --tcp-services-configmap=ingress-nginx/tcp-services

现在,一切都按预期进行。 即客户端可以将 tcp 流量发送到 [LoadBalancer-IP:External-Port],并且 tcp 流量被路由到 [default/sample-go-app:8080] svc/pod,现在如果我在示例中查找活动的 TCP 连接使用

netstat
的 go-app pod,它显示大约 4 个活动连接(我认为这可能会因客户端而异)

但问题是,当没有来自客户端的连接(没有客户端发起任何连接)时,我仍然可以看到从 [NGINX Ingress Controller Pod] 到 [目标 pod] 之间大约有 3 个处于

ESTABLISHED
状态的 tcp 连接 - 即示例-go-app pod]

sample-go-app$ netstat | grep tcp
tcp   0  0  sample-app-pod-ip:8080 ingress-controller-pod-ip:port ESTABLISHED
tcp   0  0  sample-app-pod-ip:8080 ingress-controller-pod-ip:port ESTABLISHED
tcp   0  0  sample-app-pod-ip:8080 ingress-controller-pod-ip:port ESTABLISHED

有什么建议为什么我们从 NGINX 控制器到上游服务器(即 example-go-app pod)有这些活动连接并每隔几秒刷新一次(只有入口控制器 pod 的端口号发生变化)?有没有办法删除这些未使用的连接?

sockets kubernetes nginx tcp nginx-ingress
1个回答
0
投票

NGINX 处理 TCP 连接以实现负载平衡和连接重用的方式可能是您所观察到的行为的原因,即使在没有客户端请求的情况下,NGINX Ingress 控制器和目标 Pod 之间也存在活动连接。

需要注意的是,NGINX 包含一个 keepalive 指令,它指定连接池中应保持多少个连接处于打开状态。因此,即使没有客户端请求传入,您也可能会看到某些连接保持打开状态。有关更多信息,请参阅 this

您还可以将 NGINX 入口控制器配置为更短的保持活动超时,以更快地关闭空闲连接。简而言之,**您可以通过为 TCP 连接设置较低的 keep_alive 超时来修改 NGINX 配置。**有关此 keepalive 连接的更多信息,请参阅 Timo Stark 的博客

© www.soinside.com 2019 - 2024. All rights reserved.