我在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上缺少了一些明显的东西。
答案 0 :(得分:3)
尝试将service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout
注释设置为更大的值(在AWS中默认为60秒)。