У меня есть простое одноступенчатое развертывание postgresql, работающее на AWS EKS (код здесь ). Я выставил модуль, используя балансировщик нагрузки.
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.