Ich führe einen Kubernetes-Cluster in einer öffentlichen Cloud (Azure / AWS / Google Cloud) aus und habe einige Nicht-HTTP-Dienste, die ich für Benutzer verfügbar machen möchte.
Bei HTTP-Diensten verwende ich normalerweise eine Ingress-Ressource, um diesen Dienst über einen adressierbaren DNS-Eintrag öffentlich zugänglich zu machen.
Wie sollte ich TCP-basierte Dienste (z. B. eine Datenbank wie PostgreSQL) für Nicht-HTTP-Dienste für den öffentlichen Gebrauch verfügbar machen?
Ich habe überlegt, NodePort
Dienste zu verwenden, aber dies erfordert, dass die Knoten selbst öffentlich zugänglich sind (abhängig davon kube-proxy
, ob sie zum entsprechenden Knoten weitergeleitet werden). Ich würde es vorziehen, wenn möglich zu vermeiden.
LoadBalancer
Dienste scheinen eine weitere Option zu sein, obwohl ich nicht für jeden TCP-Dienst, den ich verfügbar machen möchte, einen dedizierten Cloud-Load-Balancer erstellen möchte.
Ich bin mir bewusst, dass der NGINX Ingress-Controller das Offenlegen von TCP- und UDP-Diensten unterstützt , aber dies scheint eine statische Definition der Dienste zu erfordern, die Sie verfügbar machen möchten. Für meinen Anwendungsfall werden diese Dienste dynamisch erstellt und zerstört, sodass es nicht möglich ist, diese Dienstzuordnungen im Voraus statisch zu definieren ConfigMap
.