我在AWS EKS上运行了一个简单的单pod postgresql部署(代码here)。我使用负载平衡器暴露了pod。
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
这有效,我可以按预期访问pod。但是,如果不活动,与postgresql的连接似乎每分钟左右都会丢失。我很确定至少有一些AWS负载均衡器会以这种方式“消耗连接”;因此上面的注释不排出连接。但是,我仍然看到在空闲时丢弃连接的相同行为。
例如,AWS EKS用于托管数据库,然后将其单个端口暴露给互联网的最佳做法是什么?网络搜索已经出现了许多变化,但似乎都过于复杂或不直接适用。我使用GCE并发现它在网络和暴露端口方面要简单得多,所以我觉得我在AWS上遗漏了一些明显的东西。
尝试将service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout
注释设置为更大的值(默认情况下,它在AWS中为60秒)。