Hilf mit, diese Seite 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.
Wenn Sie zu diesem Benutzerhandbuch beitragen möchten, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.
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.
Dienste des Typs LoadBalancer für Hybridknoten konfigurieren
In diesem Thema wird beschrieben, wie der Layer-4-Lastenausgleich (L4) für Anwendungen konfiguriert wird, die auf Amazon EKS-Hybridknoten ausgeführt werden. Kubernetes-Services des Typs LoadBalancer werden verwendet, um Kubernetes-Anwendungen außerhalb des Clusters verfügbar zu machen. Dienste dieses Typs LoadBalancer werden üblicherweise mit einer physischen Load-Balancer-Infrastruktur in der Cloud oder in einer lokalen Umgebung verwendet, um den Workload-Datenverkehr zu bedienen. Diese Load Balancer-Infrastruktur wird üblicherweise mit einem umgebungsspezifischen Controller bereitgestellt.
AWS unterstützt AWS Network Load Balancer (NLB) und Cilium for Services vom Typ, die auf LoadBalancer EKS-Hybridknoten ausgeführt werden. Die Entscheidung, NLB oder Cilium zu verwenden, basiert auf der Quelle des Anwendungsdatenverkehrs. Wenn der Anwendungsdatenverkehr aus einer AWS Region stammt, AWS empfiehlt die Verwendung von AWS NLB und dem AWS Load Balancer Controller. Wenn der Anwendungsdatenverkehr aus der lokalen lokalen Umgebung oder der Edge-Umgebung stammt, AWS empfiehlt es sich, die integrierten Lastausgleichsfunktionen von Cilium zu verwenden, die mit oder ohne Load Balancer-Infrastruktur in Ihrer Umgebung verwendet werden können.
Informationen zum Lastenausgleich für den Anwendungsdatenverkehr auf Layer 7 (L7) finden Sie unter. Kubernetes Ingress für Hybridknoten konfigurieren Allgemeine Informationen zum Lastenausgleich mit EKS finden Sie unter Bewährte Methoden für den Lastenausgleich.
AWS Network Load Balancer
Sie können den Load AWS Balancer Controller und NLB mit dem Zieltyp ip
für Workloads verwenden, die auf Hybridknoten ausgeführt werden. Bei Verwendung des ip
Zieltyps leitet NLB den Datenverkehr direkt an die Pods weiter und umgeht dabei den Netzwerkpfad der Service-Schicht. Damit NLB die Pod-IP-Ziele auf Hybridknoten erreichen kann, CIDRs muss Ihr lokaler Pod in Ihrem lokalen Netzwerk routingfähig sein. Darüber hinaus verwendet der Load AWS Balancer Controller Webhooks und erfordert eine direkte Kommunikation von der EKS-Steuerebene. Weitere Informationen finden Sie unter Webhooks für Hybridknoten konfigurieren.
-
Weiterleiten von TCP- und UDP-Verkehr mit Network Load BalancersWeitere Informationen zu Network Load Balancer Installieren Sie den AWS Load Balancer Controller mit Helm und Load Balancer Controller finden Sie unter Anforderungen für die AWS Subnetzkonfiguration und Best Practices für Load AWS Balancing.
Voraussetzungen
-
Cilium wurde gemäß den Anweisungen unter installiert. CNI für Hybridknoten konfigurieren
-
Die Cilium BGP Control Plane wurde gemäß den Anweisungen unter aktiviert. Cilium BGP für Hybridknoten konfigurieren Wenn Sie BGP nicht verwenden möchten, müssen Sie eine alternative Methode verwenden, um Ihren lokalen Pod in Ihrem lokalen Netzwerk CIDRs routingfähig zu machen. Weitere Informationen finden Sie unter. Routbarer Remote-Pod CIDRs
-
eksctl ist in Ihrer Befehlszeilenumgebung installiert, siehe Anweisungen zur Einrichtung von eksctl.
Verfahren
-
Laden Sie eine IAM-Richtlinie für den Load AWS Balancer Controller herunter, mit der er in AWS APIs Ihrem Namen Anrufe tätigen kann.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json
-
Erstellen Sie eine IAM-Richtlinie mit der im vorherigen Schritt heruntergeladenen Richtlinie.
aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
-
Ersetzen Sie die Werte für Clustername (
CLUSTER_NAME
), AWS Region (AWS_REGION
) und AWS Konto-ID (AWS_ACCOUNT_ID
) durch Ihre Einstellungen und führen Sie den folgenden Befehl aus.eksctl create iamserviceaccount \ --cluster=CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --region AWS_REGION \ --approve
-
Fügen Sie das eks-charts Helm Chart-Repository hinzu. AWS unterhält dieses Repository auf. GitHub
helm repo add eks https://aws.github.io/eks-charts
-
Aktualisieren Sie Ihr lokales Helm-Repository, um sicherzustellen, dass Sie über die neuesten Charts verfügen.
helm repo update eks
-
Installieren Sie den AWS Load Balancer Controller. Ersetzen Sie die Werte für Clustername (
CLUSTER_NAME
), AWS Region (AWS_REGION
), VPC-ID (VPC_ID
) und Load AWS Balancer Controller Helm-Diagrammversion (AWS_LBC_HELM_VERSION
) durch Ihre Einstellungen. Sie finden die neueste Version des Helm-Diagramms, indem Sie den Befehl ausführen.helm search repo eks/aws-load-balancer-controller --versions
Wenn Sie einen Cluster im gemischten Modus mit Hybridknoten und Knoten in der AWS Cloud ausführen, können Sie den Load AWS Balancer Controller auf Cloud-Knoten ausführen, indem Sie den Anweisungen unter AWS Load Balancer Balancer-Controller folgen.helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --version
AWS_LBC_HELM_VERSION
\ --set clusterName=CLUSTER_NAME
\ --set region=AWS_REGION
\ --set vpcId=VPC_ID
\ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller -
Stellen Sie sicher, dass der AWS Load Balancer Controller erfolgreich installiert wurde.
kubectl get -n kube-system deployment aws-load-balancer-controller
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
-
Definieren Sie eine Beispielanwendung in einer Datei mit dem Namen
tcp-sample-app.yaml
. Das folgende Beispiel verwendet eine einfache NGINX-Bereitstellung mit einem TCP-Port.apiVersion: apps/v1 kind: Deployment metadata: name: tcp-sample-app namespace: default 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 Bereitstellung auf Ihren Cluster an.
kubectl apply -f tcp-sample-app.yaml
-
Definieren Sie einen Service vom Typ LoadBalancer für die Bereitstellung in einer Datei mit dem Namen
tcp-sample-service.yaml
.apiVersion: v1 kind: Service metadata: name: tcp-sample-service namespace: default 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 Dienstkonfiguration auf Ihren Cluster an.
kubectl apply -f tcp-sample-service.yaml
-
Die Bereitstellung des NLB für den Service kann einige Minuten dauern. Sobald der NLB bereitgestellt ist, wird dem Dienst eine Adresse zugewiesen, die dem DNS-Namen der NLB-Bereitstellung entspricht.
kubectl get svc tcp-sample-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tcp-sample-service LoadBalancer 172.16.115.212 k8s-default-tcpsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.<region>.amazonaws.com 80:30396/TCP 8s
-
Greifen Sie über die Adresse der NLB auf den Service zu.
curl k8s-default-tcpsampl-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.<region>.amazonaws.com
Ein Beispiel für eine Ausgabe finden Sie unten.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
Bereinigen Sie die -Ressourcen, die Sie erstellt haben.
kubectl delete -f tcp-sample-service.yaml kubectl delete -f tcp-sample-app.yaml
Clusterinterner Lastenausgleich mit Cilium
Cilium kann als clusterinterner Load Balancer für Workloads verwendet werden, die auf EKS-Hybridknoten ausgeführt werden. Dies kann für Umgebungen nützlich sein, die nicht über eine Load Balancer-Infrastruktur verfügen. Die Load Balancing-Funktionen von Cilium basieren auf einer Kombination von Cilium-Funktionen, darunter Kube-Proxy-Ersatz, Load Balancer IP Address Management (IPAM) und BGP Control Plane. Die Verantwortlichkeiten dieser Funktionen werden im Folgenden detailliert beschrieben:
-
Ersatz für Cilium Kube-Proxy: Verwaltet die Weiterleitung des Dienstverkehrs an Backend-Pods.
-
Cilium Load Balancer IPAM: Verwaltet IP-Adressen, die Diensten des Typs zugewiesen werden können.
LoadBalancer
-
Cilium BGP Control Plane: Kündigt IP-Adressen an, die vom Load Balancer IPAM dem lokalen Netzwerk zugewiesen wurden.
Wenn Sie den Kube-Proxy-Ersatz von Cilium nicht verwenden, können Sie dennoch Cilium Load Balancer IPAM und BGP Control Plane verwenden, um IP-Adressen für Dienste des Typs zuzuweisen und zuzuweisen. LoadBalancer Wenn Sie den Kube-Proxy-Ersatz von Cilium nicht verwenden, wird der Lastenausgleich zwischen Diensten und Backend-Pods standardmäßig durch die Regeln kube-proxy und iptables in EKS abgewickelt.
Voraussetzungen
-
Cilium wurde gemäß den Anweisungen unter mit oder ohne aktiviertem Kube-Proxy-Ersatz installiert. CNI für Hybridknoten konfigurieren Der Kube-Proxy-Ersatz von Cilium erfordert die Ausführung eines Betriebssystems mit einem Linux-Kernel, der mindestens so aktuell ist wie v4.19.57, v5.1.16 oder v5.2.0. Alle neueren Versionen der Betriebssysteme, die für die Verwendung mit Hybridknoten unterstützt werden, erfüllen diese Kriterien, mit Ausnahme von Red Hat Enterprise Linux (RHEL) 8.x.
-
Die Cilium BGP Control Plane wurde gemäß den Anweisungen unter aktiviert. Cilium BGP für Hybridknoten konfigurieren Wenn Sie BGP nicht verwenden möchten, müssen Sie eine alternative Methode verwenden, um Ihren lokalen Pod in Ihrem lokalen Netzwerk CIDRs routingfähig zu machen. Weitere Informationen finden Sie unter. Routbarer Remote-Pod CIDRs
Verfahren
-
Erstellen Sie eine Datei
cilium-lbip-pool-loadbalancer.yaml
mit dem Namen einerCiliumLoadBalancerIPPool
Ressource, um den Load Balancer-IP-Adressbereich für Ihren Typ LoadBalancer Services zu konfigurieren.-
LB_IP_CIDR
Ersetzen Sie durch den IP-Adressbereich, der für die Load Balancer-IP-Adressen verwendet werden soll. Verwenden Sie einen/32
CIDR, um eine einzelne IP-Adresse auszuwählen. Weitere Informationen finden Sie unter LoadBalancer IP-Adressverwaltungin der Cilium-Dokumentation. -
Das
serviceSelector
Feld ist so konfiguriert, dass es mit dem Namen des Dienstes übereinstimmt, den Sie in einem nachfolgenden Schritt erstellen werden. Bei dieser Konfiguration werden IPs aus diesem Pool nur Dienste mit dem Namen zugewiesentcp-sample-service
.apiVersion: cilium.io/v2alpha1 kind: CiliumLoadBalancerIPPool metadata: name: tcp-service-pool spec: blocks: - cidr: "LB_IP_CIDR" serviceSelector: matchLabels: io.kubernetes.service.name: tcp-sample-service
-
-
Wenden Sie die
CiliumLoadBalancerIPPool
Ressource auf Ihren Cluster an.kubectl apply -f cilium-lbip-pool-loadbalancer.yaml
-
Vergewissern Sie sich, dass mindestens eine IP-Adresse im Pool verfügbar ist.
kubectl get ciliumloadbalancerippools.cilium.io
NAME DISABLED CONFLICTING IPS AVAILABLE AGE tcp-service-pool false False 1 24m
-
Erstellen Sie eine Datei
cilium-bgp-advertisement-loadbalancer.yaml
mit dem Namen einerCiliumBGPAdvertisement
Ressource, um die Load Balancer-IP-Adresse für den Service bekannt zu geben, den Sie im nächsten Schritt erstellen werden. Wenn Sie Cilium BGP nicht verwenden, können Sie diesen Schritt überspringen. Die für Ihren Dienst verwendete Load Balancer-IP-Adresse muss in Ihrem lokalen Netzwerk routingfähig sein, damit Sie den Dienst im letzten Schritt abfragen können.-
Das
advertisementType
Feld ist aufService
undservice.addresses
ist so eingestellt, dassLoadBalancerIP
nur der TypLoadBalancerIP
für Dienste angekündigt wird.LoadBalancer
-
Das
selector
Feld ist so konfiguriert, dass es mit dem Namen des Dienstes übereinstimmt, den Sie in einem nachfolgenden Schritt erstellen werden. Bei dieser Konfigurationtcp-sample-service
werden nurLoadBalancerIP
Dienste mit diesem Namen beworben.apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisement-tcp-service labels: advertise: bgp spec: advertisements: - advertisementType: "Service" service: addresses: - LoadBalancerIP selector: matchLabels: io.kubernetes.service.name: tcp-sample-service
-
-
Wenden Sie die
CiliumBGPAdvertisement
Ressource auf Ihren Cluster an. Wenn Sie Cilium BGP nicht verwenden, können Sie diesen Schritt überspringen.kubectl apply -f cilium-bgp-advertisement-loadbalancer.yaml
-
Definieren Sie eine Beispielanwendung in einer Datei mit dem Namen.
tcp-sample-app.yaml
Das folgende Beispiel verwendet eine einfache NGINX-Bereitstellung mit einem TCP-Port.apiVersion: apps/v1 kind: Deployment metadata: name: tcp-sample-app namespace: default 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 Bereitstellung auf Ihren Cluster an.
kubectl apply -f tcp-sample-app.yaml
-
Definieren Sie einen Service vom Typ LoadBalancer für die Bereitstellung in einer Datei mit dem Namen
tcp-sample-service.yaml
.-
Sie können eine bestimmte IP-Adresse aus dem Load Balancer-IP-Pool mit der
lbipam.cilium.io/ips
Anmerkung zum Serviceobjekt anfordern. Sie können diese Anmerkung entfernen, wenn Sie keine bestimmte IP-Adresse für den Service anfordern möchten. -
Das
loadBalancerClass
Spezifikationsfeld ist erforderlich, um zu verhindern, dass der alte AWS Cloud-Anbieter einen Classic Load Balancer für den Service erstellt. Im folgenden Beispiel ist dies so konfiguriert, dass es dieio.cilium/bgp-control-plane
BGP Control Plane von Cilium als Load Balancer-Klasse verwendet. Dieses Feld kann alternativ so konfiguriert werden, dass es die L2-Ankündigungsfunktionvon io.cilium/l2-announcer
Cilium verwendet (derzeit in der Betaphase und nicht offiziell unterstützt von). AWSapiVersion: v1 kind: Service metadata: name: tcp-sample-service namespace: default annotations: lbipam.cilium.io/ips:
"LB_IP_ADDRESS"
spec: loadBalancerClass: io.cilium/bgp-control-plane ports: - port: 80 targetPort: 80 protocol: TCP type: LoadBalancer selector: app: nginx
-
-
Wenden Sie den Service auf Ihren Cluster an. Der Dienst wird mit einer externen IP-Adresse erstellt, die Sie für den Zugriff auf die Anwendung verwenden können.
kubectl apply -f tcp-sample-service.yaml
-
Stellen Sie sicher, dass der Dienst erfolgreich erstellt wurde und ihm eine IP-Adresse aus der im vorherigen Schritt
CiliumLoadBalancerIPPool
erstellten zugewiesen wurde.kubectl get svc tcp-sample-service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tcp-sample-service LoadBalancer 172.16.117.76
LB_IP_ADDRESS
80:31129/TCP 14m -
Wenn Sie Cilium im Kube-Proxy-Ersatzmodus verwenden, können Sie überprüfen, ob Cilium den Lastenausgleich für den Dienst übernimmt, indem Sie den folgenden Befehl ausführen. In der folgenden Ausgabe sind die
10.86.2.x
Adressen die Pod-IP-Adressen der Backend-Pods für den Service.kubectl -n kube-system exec ds/cilium -- cilium-dbg service list
ID Frontend Service Type Backend ... 41
LB_IP_ADDRESS
:80/TCP LoadBalancer 1 => 10.86.2.76:80/TCP (active) 2 => 10.86.2.130:80/TCP (active) 3 => 10.86.2.141:80/TCP (active) -
Bestätigen Sie, dass Cilium die IP-Adresse über BGP an das lokale Netzwerk weitergibt. Im folgenden Beispiel gibt es fünf Hybridknoten, von denen jeder den
tcp-sample-service
Dienst imLB_IP_ADDRESS
lokalen Netzwerk ankündigt.Node VRouter Prefix NextHop Age Attrs mi-026d6a261e355fba7
NODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-082f73826a163626eNODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-09183e8a3d755abf6NODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-0d78d815980ed202dNODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] mi-0daa253999fe92daaNODES_ASN
LB_IP_ADDRESS
/32 0.0.0.0 12m3s [{Origin: i} {Nexthop: 0.0.0.0}] -
Greifen Sie über die zugewiesene Load Balancer-IP-Adresse auf den Dienst zu.
curl
LB_IP_ADDRESS
Ein Beispiel für eine Ausgabe finden Sie unten.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
Bereinigen Sie die -Ressourcen, die Sie erstellt haben.
kubectl delete -f tcp-sample-service.yaml kubectl delete -f tcp-sample-app.yaml kubectl delete -f cilium-lb-ip-pool.yaml kubectl delete -f cilium-bgp-advertisement.yaml