Hilf mit, diese Seite zu verbessern
Möchten Sie zu diesem Benutzerhandbuch beitragen? Scrollen Sie zum Ende dieser Seite und wählen Sie Diese Seite bearbeiten am aus GitHub. Ihre Beiträge werden dazu beitragen, unser Benutzerhandbuch für alle zu verbessern.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Route TCP und UDP Verkehr mit Network Load Balancers
Das Load Balancing des Netzwerkverkehrs erfolgt auf L4
des OSI-Modells. Um den Anwendungsdatenverkehr unter zu verteilenL7
, stellen Sie einen bereit Kubernetesingress
, der einen AWS Application Load Balancer bereitstellt. Weitere Informationen finden Sie unter Routenanwendung und HTTP Verkehr mit Application Load Balancers. Weitere Informationen zu den Unterschieden zwischen den beiden Arten von Load Balancing finden Sie auf der AWS Website unter Elastic Load Balancing Balancing-Funktionen
Wenn Sie einen Typ vom Typ erstellenLoadBalancer
, erstellt der Load Balancer-Controller Kubernetes Service
des AWS Cloud-Anbieters standardmäßig AWS Classic Load Balancer, kann aber auch AWS Network Load Balancer erstellen. Dieser Controller erhält in Zukunft nur kritische Fehlerbehebungen. Weitere Informationen zur Verwendung des AWS Cloud-Provider-Load Balancers finden Sie in der Dokumentation unter AWS Cloud-Provider-Load Balancer-Controller
Wir empfehlen die Verwendung der Version 2.7.2
oder höher von AWS Load Balancer Controller anstelle des Load-Balancer-Controllers für AWS
-Cloud-Anbieter. Der AWS Load Balancer Controller erstellt AWS Network Load Balancer, aber keine AWS Classic Load Balancer. Der Rest dieses Themas befasst sich mit der Verwendung des Load AWS Balancer Controllers.
Ein AWS Network Load Balancer kann den Netzwerkdatenverkehr auf Pods Amazon EC2 EC2-IP- und Instance-Ziele oder auf AWS Fargate IP-Ziele verteilen. Weitere Informationen zum AWS -Load-Balancer-Controller
Voraussetzungen
Bevor Sie mit AWS Load Balancer Controller ein Load Balancing des Netzwerkverkehrs durchführen können, müssen folgende Voraussetzungen erfüllt sein.
-
Einen vorhandenen Cluster haben. Falls Sie keinen bestehenden Cluster haben, siehe Erste Schritte mit Amazon EKS. Wenn Sie die Version eines vorhandenen Clusters aktualisieren müssen, finden Sie unter Aktualisieren Sie den vorhandenen Cluster auf die neue Kubernetes-Version.
-
Stellen Sie den AWS Load Balancer Controller in Ihrem Cluster bereit. Weitere Informationen finden Sie unter Was ist die AWS Load Balancer Controller?. Wir empfehlen Version
2.7.2
oder höher. -
Mindestens ein Subnetz. Werden in einer Availability Zone mehrere markierte Subnetze gefunden, wählt der Controller das erste Subnetz, dessen Subnetz-ID lexikografisch an erster Stelle steht. Das Subnetz muss mindestens acht verfügbare IP-Adressen aufweisen.
-
Wenn Sie die Version
2.1.1
oder früher des AWS Load Balancer Controller verwenden, müssen Subnetze wie folgt markiert werden. Bei Verwendung der Version2.1.2
oder höher ist dieses Tag optional. Möglicherweise möchten Sie ein Subnetz taggen, wenn mehrere Cluster in derselben VPC ausgeführt werden, oder wenn mehrere AWS Dienste Subnetze in einer VPC gemeinsam nutzen, und Sie mehr Kontrolle darüber haben möchten, wo Load Balancer für jeden Cluster bereitgestellt werden. Wenn Sie Subnetz-IDs explizit als Anmerkung für ein Service-Objekt angeben, werden Kubernetes und die AWS Load Balancer Controller diese Subnetze direkt verwenden, um den Load Balancer zu erstellen. Subnetz-Tagging ist nicht erforderlich, wenn Sie diese Methode für die Bereitstellung von Lastausgleichsdiensten verwenden und Sie die folgenden Anforderungen für private und öffentliche Subnetz-Tagging überspringen können. Ersetzen Sie
mit Ihrem Clusternamen.my-cluster
-
Schlüssel –
kubernetes.io/cluster/
my-cluster
-
Wert –
shared
oderowned
-
-
Ihre öffentlichen und privaten Subnetze müssen die folgenden Anforderungen erfüllen, es sei denn, Sie geben Subnetz-IDs explizit als Anmerkung für ein Service- oder Ingress-Objekt an. Wenn Sie Load Balancer bereitstellen, indem Sie Subnetz-IDs explizit als Anmerkung für ein Service- oder Ingress-Objekt angeben, werden Kubernetes und die AWS Load Balancer Controller diese Subnetze direkt verwenden, um den Load Balancer zu erstellen, und die folgenden Tags sind nicht erforderlich.
-
Private Subnetze – Müssen im folgenden Format markiert sein. Dadurch wissen Kubernetes und der Load AWS Balancer Controller wissen, dass die Subnetze für interne Load Balancer verwendet werden können. Wenn Sie eine Amazon AWS AWS CloudFormation EKS-Vorlage verwenden
eksctl
, um Ihre VPC nach dem 26. März 2020 zu erstellen, werden die Subnetze bei der Erstellung entsprechend gekennzeichnet. Weitere Informationen über die Amazon-EKS- AWS AWS CloudFormation -VPC-Vorlagen finden Sie unter Erstellen einer VPC für Ihren Amazon-EKS-Cluster.-
Schlüssel –
kubernetes.io/role/internal-elb
-
Wert –
1
-
-
Öffentliche Subnetze – Müssen im folgenden Format markiert sein. Sie müssen öffentliche Subnetze in Ihrer VPC entsprechend kennzeichnen, so dass Kubernetes nur diese Subnetze für externe Load Balancer verwendet und kein öffentliches Subnetz in jeder Availability Zone wählt (in lexikographischer Reihenfolge nach Subnetz-ID): Wenn Sie eine Amazon AWS CloudFormation EKS-Vorlage verwenden
eksctl
, um Ihre VPC nach dem 26. März 2020 zu erstellen, werden die Subnetze bei der Erstellung entsprechend gekennzeichnet. Weitere Informationen zu den Amazon AWS CloudFormation EKS-VPC-Vorlagen finden Sie unterErstellen einer VPC für Ihren Amazon-EKS-Cluster.-
Schlüssel –
kubernetes.io/role/elb
-
Wert –
1
-
Wenn die Subnetzrollen-Tags nicht explizit hinzugefügt werden, prüft der Kubernetes-Dienstcontroller die Routingtabelle der Cluster-VPC-Subnetze, um festzustellen, ob das Subnetz privat oder öffentlich ist. Es wird empfohlen, dass Sie sich nicht auf dieses Verhalten verlassen und stattdessen explizit die privaten oder öffentlichen Rollentags hinzufügen. Der AWS Load Balancer Controller untersucht keine Routentabellen und erfordert, dass die privaten und öffentlichen Tags für eine erfolgreiche automatische Erkennung vorhanden sind.
-
Überlegungen
-
Die Konfiguration Ihres Load Balancers wird durch Anmerkungen gesteuert, die zu dem Manifest für Ihren Service hinzugefügt werden. Service-Anmerkungen unterscheiden sich bei der Verwendung von von von AWS Load Balancer Controller als bei der Verwendung des Load Balancer-Controllers des AWS Cloud-Anbieters. Überprüfen Sie die Anmerkungen
für den AWS Load Balancer Controller vor der Bereitstellung von Services. -
Bei Verwendung des Amazon VPC CNI plugin for Kubernetes kann der AWS Load Balancer Controller das Load Balancing zu Amazon-EC2-IP- oder -Instance-Zielen und Fargate-IP-Zielen vornehmen. Bei Verwendung von Alternativen kompatiblen CNI-Plugins kann der Controller nur das Load Balancing zu Instance-Zielen vornehmen. Weitere Informationen zu Network-Load-Balancer-Zieltypen finden Sie unter Zieltyp im Benutzerhandbuch für Network Load Balancers.
-
Wenn Sie dem Load Balancer Tags hinzufügen möchten, wenn oder nachdem er erstellt wurde, fügen Sie die folgende Anmerkung in Ihre Service-Spezifikation ein. Weitere Informationen finden Sie unter AWS -Ressourcen-Tags
in der AWS Load Balancer Controller-Dokumentation. service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags
-
Sie können Elastic IP-Adressen zum Network Load Balancer hinzufügen, indem Sie die folgende Anmerkung hinzufügen. Ersetzen Sie die
mit denexample values
Allocation IDs
Ihrer elastischen IP-Adressen. Die Anzahl derAllocation IDs
muss mit der Anzahl der Subnetze übereinstimmen, die für den Load Balancer verwendet werden. Weitere Informationen finden Sie in der Dokumentation zu AWS Load Balancer Controller. service.beta.kubernetes.io/aws-load-balancer-eip-allocations: eipalloc-
xxxxxxxxxxxxxxxxx
,eipalloc-yyyyyyyyyyyyyyyyy
-
Für jeden Network Load Balancer, den Sie erstellen, fügt Amazon EKS der Sicherheitsgruppe des Knotens für Clientdatenverkehr eine eingehende Regel und für jedes Load-Balancer-Subnetz in der VPC für Integritätsprüfungen eine Regel hinzu. Bereitstellung eines Dienstes vom Typ
LoadBalancer
kann fehlschlagen, wenn Amazon EKS versucht, Regeln zu erstellen, die das Kontingent für die maximal zulässige Anzahl von Regeln für eine Sicherheitsgruppe überschreiten. Weitere Informationen dazu finden Sie im Abschnitt Sicherheitsgruppe in Amazon VPC-Kontingenten im Amazon VPC-Benutzerhandbuch. Berücksichtigen Sie die folgenden Optionen, um die Wahrscheinlichkeit zu minimieren, dass die maximale Anzahl von Regeln für eine Sicherheitsgruppe überschritten wird:-
Fordern Sie eine Erhöhung Ihrer Regeln pro Sicherheitsgruppenkontingent an. Weitere Informationen dazu finden Sie unter Beantragen einer Kontingenterhöhung im Service-Quotas-Benutzerhandbuch.
-
Verwenden Sie IP-Ziele anstelle von Instance-Zielen. Mit IP-Zielen können Sie Regeln für dieselben Zielports freigeben. Sie können Load-Balancer-Subnetze manuell mit einer Anmerkung angeben. Weitere Informationen finden Sie unter Add-ons
auf GitHub. -
Verwenden Sie einen Eingang anstelle eines Services vom Typ
LoadBalancer
, um Datenverkehr an Ihren Service zu senden. Der AWS Application Load Balancer benötigt weniger Regeln als Network Load Balancer. Sie können einen ALB für mehrere Eingänge freigeben. Weitere Informationen dazu finden Sie unter Routenanwendung und HTTP Verkehr mit Application Load Balancers. Sie können einen Network Load Balancer nicht für mehrere Services freigeben. -
Stellen Sie Ihre Cluster für mehrere Konten bereit.
-
-
Wenn Ihre Pods unter Windows ausgeführt werden, kann in einem Amazon-EKS-Cluster ein einzelner Dienst mit einem Load Balancer bis zu 1 024 Backend-Pods unterstützen. Jeder Pod hat seine eigene eindeutige IP-Adresse.
-
Es wird empfohlen, mit dem AWS Load Balancer Controller nur neue Network Load Balancer zu erstellen. Der Versuch, vorhandene Network Load Balancer zu ersetzen, die mit dem Load Balancer-Controller des AWS Cloud-Anbieters erstellt wurden, kann zu mehreren Network Load Balancers führen, was zu Anwendungsausfällen führen kann.
Erstellen eines Network Load Balancers
Sie können einen Netzwerk-Load-Balancer mit IP- oder Instance-Zielen erstellen.
(Optional) Bereitstellen einer Beispielanwendung
Voraussetzungen
-
Mindestens ein öffentliches oder privates Subnetz in Ihrer Cluster-VPC.
-
Stellen Sie den AWS Load Balancer Controller in Ihrem Cluster bereit. Weitere Informationen finden Sie unter Was ist die AWS Load Balancer Controller?. Wir empfehlen Version
2.7.2
oder höher.
So stellen Sie eine Beispielanwendung bereit
-
Wenn Sie für Fargate bereitstellen, stellen Sie sicher, dass Sie ein verfügbares privates Subnetz in Ihrer VPC haben, und erstellen Sie ein Fargate-Profil. Wenn Sie keine Bereitstellung für Fargate durchführen, überspringen Sie diesen Schritt. Sie können das Profil erstellen, indem Sie den folgenden Befehl ausführen oder in AWS Management Console die gleichen Werte für
name
undnamespace
verwenden, die im Befehl enthalten sind. Ersetzen Sie das
durch Ihr eigenes.example values
eksctl create fargateprofile \ --cluster
\my-cluster
\ --regionregion-code
\ --namenlb-sample-app
--namespace nlb-sample-app
-
Bereitstellen einer Beispielanwendung
-
Erstellen Sie einen Namespace für die Anwendung.
kubectl create namespace
nlb-sample-app
-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
auf Ihrem Computer.sample-deployment
.yamlapiVersion: apps/v1 kind: Deployment metadata: name:
nlb-sample-app
namespace:nlb-sample-app
spec: replicas:3
selector: matchLabels: app:nginx
template: metadata: labels: app:nginx
spec: containers: - name:nginx
image:public.ecr.aws/nginx/nginx:1.23
ports: - name:tcp
containerPort:80
-
Wenden Sie die Manifestdatei auf Ihren Cluster an.
kubectl apply -f
sample-deployment
.yaml
-
-
Erstellen Sie einen Service mit einem zum Internet offenen Network Load Balancer, der Load Balancing auf IP-Ziele vornimmt.
-
Speichern Sie den folgenden Inhalt in einer Datei mit dem Namen
auf Ihrem Computer. Wenn Sie auf Fargate-Knoten bereitstellen, entfernen Sie diesample-service
.yamlservice.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
-Zeile.apiVersion: v1 kind: Service metadata: name:
nlb-sample-service
namespace:nlb-sample-app
annotations: service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing spec: ports: - port:80
targetPort:80
protocol:TCP
type: LoadBalancer selector: app:nginx
-
Wenden Sie die Manifestdatei auf Ihren Cluster an.
kubectl apply -f
sample-service
.yaml
-
-
Stellen Sie sicher, dass der Service bereitgestellt wurde.
kubectl get svc
nlb-sample-service
-nnlb-sample-app
Eine Beispielausgabe sieht wie folgt aus.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sample-service
LoadBalancer10.100.240.137
k8s-nlbsampl
-nlbsampl
-xxxxxxxxxx
-xxxxxxxxxxxxxxxx
.elb.region-code
.amazonaws.com80
:32400
/TCP
16hAnmerkung
Die Werte für
und10.100.240.137
-xxxxxxxxxx
xxxxxxxxxxxxxxxx
unterscheiden sich von der Beispielausgabe (sie gelten nur für Ihren Load Balancer), undus-west-2
können für Sie unterschiedlich sein, je nachdem, in welchem Cluster sich Ihr Cluster befindet. AWS-Region -
Öffnen Sie Amazon EC2 AWS Management Console
. Wählen Sie Target Groups (Zielgruppen) unter Load Balancing (Lastausgleich) im linken Navigationsbereich aus. Wählen Sie in der Spalte Name den Namen der Zielgruppe aus, wobei der Wert in der Spalte Load Balancer einem Teil des Namens in der EXTERNAL-IP
-Spalte der Ausgabe im vorherigen Schritt entspricht. Sie wählen beispielsweise die Zielgruppek8s-default-samplese-
, wenn Ihre Ausgabe mit der vorigen Ausgabe übereinstimmte. Der Zieltyp istxxxxxxxxxx
IP
, weil dies im Beispiel-Manifest des Services angegeben wurde. -
Wählen Sie Ihre Zielgruppe und danach die Registerkarte Ziele aus. Unter Registrierte Ziele sollten Sie drei IP-Adressen der drei Replikate sehen, die in einem vorherigen Schritt bereitgestellt wurden. Warten Sie, bis der Status aller Ziele fehlerfrei ist, bevor Sie fortfahren. Möglicherweise dauert es ein paar Minuten, bis alle Ziele
healthy
sind. Die Ziele können sich in einemunhealthy
-Zustand befinden, bevor sie in einenhealthy
-Zustand wechseln. -
Senden Sie Datenverkehr an den Dienst, indem Sie
undxxxxxxxxxx-xxxxxxxxxxxxxxxx
durch die Werte ersetzen, die in der Ausgabe für einen vorherigen Schritt fürus-west-2
EXTERNAL-IP
zurückgegeben wurden. Wenn Sie in einem privaten Subnetz bereitgestellt haben, müssen Sie die Seite von einem Gerät in Ihrer VPC aus anzeigen, z. B. von einem Bastion-Host. Weitere Informationen finden Sie unter Linux-Bastion-Hosts in AWS. curl k8s-default-samplese-
xxxxxxxxxx-xxxxxxxxxxxxxxxx
.elb.region-code
.amazonaws.comEine Beispielausgabe sieht wie folgt aus.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
Wenn Sie mit der Beispielbereitstellung, dem Dienst und Namespace fertig sind, entfernen Sie sie.
kubectl delete namespace
nlb-sample-app