Wie verhindere ich, dass Sicherheitsgruppenregeln, Listener oder andere Änderungen auf einem Load Balancer in Amazon EKS rückgängig gemacht werden?

Lesedauer: 5 Minute
0

Wenn ich versuche, Änderungen an meinem Load Balancer für Amazon Elastic Kubernetes Service (Amazon EKS) vorzunehmen, werden die Änderungen automatisch rückgängig gemacht.

Kurzbeschreibung

Wenn Sie den AWS Load Balancer Controller verwenden, um einen Load Balancing-Service oder eine Ingress-Ressource zu erstellen, konfiguriert der Controller viele Standardparameter. Dazu gehören alle Parameter, die Sie nicht in der Manifestdatei angeben, wie z. B. ein Pfad zur Zustandsprüfung, ein Standard-Timeout oder Sicherheitsgruppenregeln.

Sie können jedoch einen AWS-API-Aufruf verwenden, um die Standardkonfiguration direkt zu ändern. Sie können diesen API-Aufruf von der Amazon Elastic Compute Cloud (Amazon EC2)-Konsole, AWS Command Line Interface (AWS CLI) oder einem anderen Drittanbieter-Tool aus tätigen. In diesem Fall setzt der Controller diese Änderungen beim nächsten Clusterabgleich auf ihre ursprünglichen Werte zurück. Weitere Informationen finden Sie unter Controller und Abgleich auf der Kubernetes-Cluster-API-Website.

Die folgenden Probleme treten häufig aufgrund von rückgängig gemachten Load Balancer-Änderungen in Amazon EKS auf:

  • Die benutzerdefinierten Sicherheitsgruppenregeln des Load Balancers werden automatisch auf 0.0.0.0/0 zurückgesetzt oder sie verschwinden.
  • Der Load Balancer löscht oder fügt automatisch Listener-Regeln hinzu.
  • Benutzerdefinierte Leerlauf-Timeout-Werte werden automatisch auf die Standardwerte zurückgesetzt.
  • Das Zertifikat wird automatisch auf die vorherige Version zurückgesetzt.
  • Sie können den Pfad zur Zustandsprüfung nicht aktualisieren, da Amazon EKS seine Werte rückgängig gemacht hat.
  • Amazon EKS ändert Rollen anhand der Eigenschaften des Load Balancers.

Um diese Probleme zu beheben, ermitteln Sie zunächst, warum Ihr Load Balancer diese Änderungen vorgenommen hat. Suchen Sie insbesondere nach dem entsprechenden API-Aufruf für die geänderte Ressource und dem Tool, das den Aufruf getätigt hat. Implementieren Sie dann Ihre Änderungen in der Manifestdatei.

Hinweis: In der folgenden Lösung bezieht sich ein „Load Balancer“ auf einen Lastenausgleichsdienst wie Network Load Balancer oder Classic Load Balancer. Oder ein Load Balancer kann eine eingehende Ressource sein, wie z. B. Application Load Balancer.

Lösung

Um den erwarteten Status eines Load Balancers zu definieren, müssen Sie Änderungen in den Anmerkungen der Manifestdatei angeben. Andernfalls erzwingen die Anmerkungen, dass die Änderungen auf die unveränderten Standardwerte zurückgesetzt werden.

Wenn Sie versuchen, einen AWS-API-Aufruf zu verwenden, um diese Werte direkt zu ändern, betrachtet der Controller dies als Out-of-Band-Änderung. Beim nächsten Abgleich setzt der Controller die Änderungen auf ihre ursprünglichen Werte zurück, um sie mit Ihrer Kubernetes-Service-Manifestkonfiguration zu synchronisieren. Abhängig von dem Attribut, das der Controller zurücksetzt, kann dies zu langen Ausfallzeiten Ihres Dienstes führen.

AWS Load Balancer Controller verwendet mehrere Logikpfade für den Abgleich. Die folgenden Szenarien können dazu führen, dass aws-load-balancer-controller-Pods neu gestartet werden:

  • Ein Upgrade für die Steuerungsebene, den Worker-Knoten oder die Plattform
  • Eine Instance-Aktualisierung aufgrund von zugrunde liegenden Problemen wie Hardwarefehlern oder Zustandsproblemen
  • Jede Aktivität, die zu einem API-Aufruf zum Aktualisieren, Löschen oder Patchen auf den Controller-Pods führt
  • Automatischer, periodischer Abgleich
    Hinweis: Standardmäßig beträgt der Abstimmungszeitraum des Controllers 1 Stunde. Diese Funktion funktioniert jedoch nicht in den Versionen 2.4.7 und früheren Versionen von Amazon EKS.

In diesen Fällen initiiert der AWS Load Balancer Controller den Abgleich, und Ihr Load Balancer bezieht sich auf die neueste Manifestdateikonfiguration. Wenn Sie zuvor über einen API-Aufruf Änderungen an Ihrem Load Balancer vorgenommen haben, werden diese Änderungen rückgängig gemacht.

Identifizieren der Quelle der Änderungen

Suchen Sie den API-Aufruf, der sich auf die aktualisierte Ressource bezieht. Suchen Sie in AWS CloudTrail nach dem Zeitraum, in dem die Änderungen vorgenommen wurden. Alle API-Aufrufe von AWS Load Balancer finden Sie in der Elastic Load Balancing (ELB) API-Referenz. Informationen zu Amazon EC2-API-Aufrufen finden Sie in der Amazon EC2-API-Referenz.

Wenn der Controller beispielsweise die SecurityGroup-Regeln zurücksetzt, sehen Sie, dass die API RevokeSecurityGroupIngress aufgerufen wird. Sie können dann das entsprechende CloudTrail-Ereignis verwenden, um den API-Benutzer zu identifizieren. Wenn der Controller WorkerNode-Rollen verwendet, wird die Knotenrolle angezeigt, die den API-Aufruf getätigt hat:

....
"type": "AssumedRole",
"arn": "arn:aws:sts::***********:assumed-role/eksctl-mycluster-NodeInstanceRole/i-***********",
"sessionContext": {
    "sessionIssuer": {
        "type": "Role",
        "arn": "arn:aws:iam::***********:role/eksctl-mycluster-nodegr-NodeInstanceRole",
        "userName": "eksctl-mycluster-nodegr-NodeInstanceRole"
    },
    ...
    eventName ": "
    RevokeSecurityGroupIngress ",
    "userAgent": "elbv2.k8s.aws/v2.4.5 aws-sdk-go/1.42.27 (go1.19.3; linux; amd64)",
    "requestParameters": {
        "groupId": "sg-****",
        "ipPermissions": {
            "items": [{
                        "ipProtocol": "tcp",
                        "fromPort": 443,
                        "toPort": 443,
                        "groups": {},
                        "ipRanges": {
                            "items": [{
                                "cidrIp": "0.0.0.0/0"
                            }]
                        }]

Wenn Sie dedizierte Rollen für den AWS Load Balancer Controller verwenden, wird die AWS Identity and Access Management (IAM)-Rolle des Servicekontos angezeigt.

Vermeiden von ungewollten Änderungen

Nehmen Sie keine Out-of-Band-Änderungen an den Parametern Ihres Load Balancers vor. Dazu gehören Änderungen von der Amazon EC2-Konsole, der AWS-CLI oder jedem Tool, das AWS-APIs direkt aufruft.

Sie möchten beispielsweise die Regeln für Sicherheitsgruppen aktualisieren. Verwenden Sie die Anmerkungen .spec.loadBalancerSourceRanges oder service.beta.kubernetes.io/load-balancer-source-ranges. Sie können diese Anmerkungen verwenden, um die CIDR-IP-Adressen für einen Load Balancer einzuschränken. Weitere Informationen zu diesen Anmerkungen finden Sie unter Zugriffskontrolle auf der GitHub-Website von AWS Load Balancer Controller.

Verwenden Sie nur die richtigen Anmerkungen in der Manifestdatei, um Timeout-Werte, Pfade für die Zustandsprüfung, Zertifikat-ARNs und andere Eigenschaften zu aktualisieren. Alle unterstützten Service- und Ingress-Anmerkungen finden Sie unter Service-Anmerkungen und Ingress-Anmerkungen auf der GitHub-Website von AWS Load Balancer Controller.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr