Ich möchte die CIDR-IP-Adressen für einen Dienst vom Typ LoadBalancer in Amazon Elastic Kubernetes Service (Amazon EKS) einschränken.
Kurzbeschreibung
Wenn Sie einen Dienst type:LoadBalancer erstellen, sind Anfragen von der Quelle 0.0.0.0/0 standardmäßig zulässig. Wenn sich der Load Balancer in einem öffentlichen Subnetz befindet, werden Anfragen von überall im Internet an Worker-Knoten weitergeleitet.
Lösung
Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, vergewissern Sie sich, dass Sie die neueste AWS CLI-Version verwenden.
Umgebung einrichten
1. Erstellen Sie einen Amazon EKS-Cluster.
2. Erstellen und starten Sie Worker-Knoten.
3. Richten Sie kubectl ein.
4. Richten Sie die AWS-CLI ein.
5. Stellen Sie den AWS Load Balancer Controller ein.
Hinweis: Der AWS Load Balancer-Controller unterstützt die folgenden Versionen des AWS Network Load Balancers für Dienste des Typs LoadBalancer: NLB-IP-Modus (Version 2.0.0 oder höher) und NLB-Instance-Modus (2.2.0 oder höher)
Wichtig: Es hat sich bewährt, den AWS Load Balancer-Controller zu verwenden, wenn Sie einen neuen Network Load Balancer für Dienste vom Typ LoadBalancer bereitstellen. Verwenden Sie den AWS Load Balancer-Controller anstelle des Load Balancer-Controllers des Kubernetes In-Tree-Dienstes.
CIDR-IP-Adressen einschränken
1. Fügen Sie der Dienst-Manifestdatei (svc.yaml) das Feld .spec.loadBalancerSourceRanges hinzu. Zum Beispiel:
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: nginx
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
loadBalancerSourceRanges:
- "143.231.0.0/16"
2. Führen Sie den folgenden Befehl aus, um die Manifestdatei anzuwenden:
$ kubectl apply -f svc.yaml
3. Führen Sie den folgenden AWS-CLI-Befehl aus, um zu bestätigen, dass die eingehenden Regeln für die Sicherheitsgruppe geändert wurden:
$ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
...
"CidrIp": "143.231.0.0/16"
...
Beachten Sie abschließend Folgendes:
Wenn Sie den NLB-IP-Modus verwenden, wird das Feld .spec.loadBalancerSourceRanges standardmäßig ignoriert. Verwenden Sie in diesem Fall die folgende Anmerkung:
service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true
Diese Anmerkung ermöglicht die Beibehaltung der Client-IP.
Wir empfehlen bei einem Dienst mit einem Network Load Balancer-Typ die maximale Sicherheitsgruppengrenze. Für jeden Knotenport und jeden Subnetz-CIDR-Bereich erstellt der Controller Regeln für die Sicherheitsgruppe des Worker-Knotens.
Relevante Informationen
Cluster-Authentifizierung
Kubernetes Service