In einem Microservices-Szenario sollte sich jeder Web-API-Container selbst über HTTPS bedienen, oder ist es ok, intern über HTTP zu arbeiten und alle Eingänge mit Zertifikaten zu konfigurieren und auf Port 80 der Container umzuleiten?
Ich denke, der einfachste Ansatz besteht darin, nur den externen Datenverkehr zu schützen, denn um eine Asp.Net Core WebAPI so zu konfigurieren, dass sie sich selbst (Kestrel) über HTTPS bedient (zum Beispiel), müssen Sie das Zertifikat in einem Volume mounten und das Zertifikatskennwort angeben. Das ist ein bisschen kompliziert.
Was ist die beste Vorgehensweise?
Antwort1
Dies hängt von den Anforderungen und Ressourcen ab, ob Sie On-Prem oder Baremetal usw. haben.
Keine Anforderungen zur Sicherung des Datenverkehrs
Wenn keine Anforderungen hinsichtlich der Sicherung des Client-Datenverkehrs innerhalb des Clusters bestehen, können Sie die Client- SSL
Verbindung beenden ingress-controller
und HTTP
zwischen den Pods verwenden.
Sichere Anforderungen
Wenn der Client-Verkehr zum Ziel-Pod gesichert werden muss, kann dies auf zwei Arten erreicht werden.
L3 LoadBalancer
mitKnotenPort, konfiguriert mitSSL-PassthroughAnIngress
.- Wenn der Verkehr die Verwendung erfordert
SSL
, aber nichtSSL
direkt an den angegebenen Empfänger geliefert werden mussPod
, wäre es einfacher, dies durch die Konfiguration von zu implementierenIstioMesh mitmTLS
. Mit dieser Option können Sie den Datenverkehr über HTTP-Header weiterleiten und müssen die Zertifikate nicht manuell verwalten. Bitte überprüfen SieDasfür mehr Informationen.
Da Best Practices immer darauf abzielen, so sicher wie möglich zu sein, wird immer empfohlen, eine sichere Verbindung zu verwenden. Trotzdem ist dies in einigen Szenarien einfach nicht erforderlich.
Antwort2
Wenn Ihr Cluster in der Cloud läuft und einenexterner Cloud Balancer, Ihr Ingress und Ihre Pods könnten sich auf unterschiedlichen Maschinen oder in unterschiedlichen Rechenzentren befinden. In diesem Fall sollten Sie TLS tatsächlich vom Ingress bis zu den Pods erzwingen.
In jedem Fall sollten sich der Load Balancer und Ihr Cluster im selben (hoffentlich eingeschränkten) VPC befinden.
Antwort3
Es hängt auch von den Angriffsvektoren ab, vor denen Sie sich schützen.
Wenn Sie befürchten, dass jemand den Datenverkehr zwischen Ihren Kubernetes-Knoten abhören könnte, können Sie die Verwendung eines Netzwerk-Plugins (CNI) in Betracht ziehen, das Verschlüsselung unterstützt, wie z. B. WeaveNet, oder Sie können alle Ihre Knoten mit Wireguard oder OpenVPN in einem VPN-Netzwerk platzieren.
Wenn Sie die Dienste im Cluster voreinander schützen möchten, sollten Sie etwas wie Istio in Betracht ziehen, das den Datenverkehr zwischen den Pods verschlüsselt.