如何避免在AWS EKS上断开连接?

时间:2019-04-23 11:21:08

标签: postgresql amazon-web-services kubernetes

我在AWS EKS上运行了一个简单的单容器postgresql部署(代码here)。我已经使用负载平衡器暴露了吊舱。

kubectl get services/postgres-lb -o yaml

这将产生以下内容:

apiVersion: v1
kind: Service
metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-connection-draining-enabled: "false"
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
  creationTimestamp: 2019-04-23T02:36:54Z
  labels:
    app: postgres
  name: postgres-lb
  namespace: default
  resourceVersion: "1522157"
  selfLink: /api/v1/namespaces/default/services/postgres-lb
  uid: <HASHREMOVED?
spec:
  clusterIP: 10.100.94.170
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32331
    port: 5434
    protocol: TCP
    targetPort: 5432
  selector:
    app: postgres
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - hostname: ...aaadz-example.elb.us-east-1.amazonaws.com

这有效,我可以按预期访问该广告连播。但是,与postgresql的连接似乎每分钟大约断开一次(如果未激活)。我很确定至少有一些AWS负载平衡器以这种方式“消耗连接”;因此,上面的注释不会耗尽连接。但是,如果闲置,我仍然会看到断开连接的行为。

AWS EKS上用于托管数据库,然后将其单个端口暴露给互联网的最佳实践是什么?网络搜索已经出现了许多变体,但似乎都过于复杂或不直接适用。我使用了GCE,发现它在网络和公开端口方面更加简单明了,所以我觉得我在AWS上缺少了一些明显的东西。

1 个答案:

答案 0 :(得分:3)

尝试将service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout注释设置为更大的值(在AWS中默认为60秒)。