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.
Verwenden Sie eine Sicherheitsgruppenrichtlinie für einen Amazon EKS Pod
Um Sicherheitsgruppen zu verwenden für Pods, Sie müssen über eine bestehende Sicherheitsgruppe verfügen. Die folgenden Schritte zeigen Ihnen, wie Sie die Sicherheitsgruppenrichtlinie für eine verwenden Pod. Sofern nicht anders angegeben, führen Sie alle Schritte von demselben Terminal aus, da in den folgenden Schritten Variablen verwendet werden, die nicht terminalübergreifend bestehen.
Wenn Sie eine haben Pod Bei EC2 Amazon-Instances müssen Sie das Plugin konfigurieren, bevor Sie dieses Verfahren verwenden. Weitere Informationen finden Sie unter Konfigurieren Sie den Amazon VPC CNI plugin for Kubernetes für Sicherheitsgruppen für Amazon EKS Pods.
-
Erstellen Sie ein Kubernetes Namespace, in dem Ressourcen bereitgestellt werden sollen. Sie können ersetzen
my-namespace
mit dem Namen eines Namespaces, den Sie verwenden möchten.kubectl create namespace my-namespace
-
Stellen Sie ein Amazon EKS
SecurityGroupPolicy
in Ihrem Cluster bereit.-
Kopieren Sie den folgenden Inhalt auf Ihr Gerät. Sie können ersetzen
podSelector
mitserviceAccountSelector
, wenn Sie lieber wählen möchten Pods basierend auf den Labels von Dienstkonten. Sie müssen den einen oder anderen Selektor angeben. Ein leeres FeldpodSelector
(Beispiel:podSelector: {}
) wählt alle aus Pods im Namespace. Du kannst ändernmy-role
zum Namen Ihrer Rolle. Ein leeresserviceAccountSelector
wählt alle Servicekonten im Namespace aus. Sie können ersetzenmy-security-group-policy
mit einem Namen für deinSecurityGroupPolicy
undmy-namespace
mit dem Namespace,SecurityGroupPolicy
in dem Sie den erstellen möchten.Sie müssen ersetzen
my_pod_security_group_id
mit der ID einer vorhandenen Sicherheitsgruppe. Wenn Sie noch keine Sicherheitsgruppe haben, müssen Sie eine erstellen. Weitere Informationen finden Sie unter EC2Amazon-Sicherheitsgruppen für Linux-Instances im EC2Amazon-Benutzerhandbuch. Sie können eine Sicherheitsgruppe von 1-5 angebenIDs. Wenn Sie mehr als eine ID angeben, gilt die Kombination aller Regeln in allen Sicherheitsgruppen für die ausgewählten Pods.cat >my-security-group-policy.yaml <<EOF apiVersion: vpcresources.k8s.aws/v1beta1 kind: SecurityGroupPolicy metadata: name: my-security-group-policy namespace: my-namespace spec: podSelector: matchLabels: role: my-role securityGroups: groupIds: - my_pod_security_group_id EOF
Wichtig
Die Sicherheitsgruppe oder Gruppen, die Sie für Ihre angeben Pods muss die folgenden Kriterien erfüllen:
-
Sie müssen vorhanden sein. Wenn sie nicht existieren, dann, wenn Sie eine bereitstellen Pod das entspricht dem Selektor, deinem Pod bleibt im Erstellungsprozess stecken. Wenn du das beschreibst Pod, wird eine Fehlermeldung ähnlich der folgenden angezeigt:
An error occurred (InvalidSecurityGroupID.NotFound) when calling the CreateNetworkInterface operation: The securityGroup ID '
.sg-05b1d815d1EXAMPLE
' does not exist -
Sie müssen eingehende Kommunikation von der auf Ihre Knoten (for
kubelet
) angewendeten Sicherheitsgruppe über alle Ports zulassen, für die Sie Sonden konfiguriert haben. -
Sie müssen ausgehende Kommunikation über
TCP
und dieUDP
Ports 53 zu einer Sicherheitsgruppe zulassen, die der Pods (oder Knoten, die Pods läuft (weiter) CoreDNS. Die Sicherheitsgruppe für Ihre CoreDNS Pods muss eingehendenTCP
undUDP
Port 53-Verkehr von der von Ihnen angegebenen Sicherheitsgruppe zulassen. -
Sie müssen über die erforderlichen Regeln für eingehenden und ausgehenden Datenverkehr verfügen, um mit anderen zu kommunizieren Pods mit denen sie kommunizieren müssen.
-
Sie müssen Regeln haben, die es ermöglichen Pods um mit dem zu kommunizieren Kubernetes Kontrollebene, wenn Sie die Sicherheitsgruppe mit Fargate verwenden. Am einfachsten erreichen Sie dies, indem Sie die Cluster-Sicherheitsgruppe als eine der Sicherheitsgruppen angeben.
Sicherheitsgruppenrichtlinien gelten nur für neu geplante Pods. Sie haben keinen Einfluss auf das Laufen Pods.
-
-
Die Richtlinie bereitstellen.
kubectl apply -f my-security-group-policy.yaml
-
-
Stellen Sie eine Beispielanwendung mit einer Bezeichnung bereit, die dem entspricht
my-role
Wert fürpodSelector
den Sie in einem vorherigen Schritt angegeben haben.-
Kopieren Sie den folgenden Inhalt auf Ihr Gerät. Ersetzen Sie das
example values
durch Ihren eigenen und führen Sie dann den geänderten Befehl aus. Wenn du ersetzstmy-role
, stellen Sie sicher, dass er mit dem Wert übereinstimmt, den Sie in einem vorherigen Schritt für den Selektor angegeben haben.cat >sample-application.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment namespace: my-namespace labels: app: my-app spec: replicas: 4 selector: matchLabels: app: my-app template: metadata: labels: app: my-app role: my-role spec: terminationGracePeriodSeconds: 120 containers: - name: nginx image: public.ecr.aws/nginx/nginx:1.23 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-app namespace: my-namespace labels: app: my-app spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80 EOF
-
Stellen Sie die Anwendung mit dem folgenden Befehl bereit. Wenn Sie die Anwendung bereitstellen, Amazon VPC CNI plugin for Kubernetes entspricht der
role
Bezeichnung und die Sicherheitsgruppen, die Sie im vorherigen Schritt angegeben haben, werden auf die angewendet Pod.kubectl apply -f sample-application.yaml
-
-
Sehen Sie sich das an Pods mit der Beispielanwendung bereitgestellt. Für den Rest dieses Themas wird dieses Terminal als
TerminalA
bezeichnet.kubectl get pods -n my-namespace -o wide
Eine Beispielausgabe sieht wie folgt aus.
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-deployment-5df6f7687b-4fbjm 1/1 Running 0 7m51s 192.168.53.48 ip-192-168-33-28.region-code.compute.internal <none> <none> my-deployment-5df6f7687b-j9fl4 1/1 Running 0 7m51s 192.168.70.145 ip-192-168-92-33.region-code.compute.internal <none> <none> my-deployment-5df6f7687b-rjxcz 1/1 Running 0 7m51s 192.168.73.207 ip-192-168-92-33.region-code.compute.internal <none> <none> my-deployment-5df6f7687b-zmb42 1/1 Running 0 7m51s 192.168.63.27 ip-192-168-33-28.region-code.compute.internal <none> <none>
Anmerkung
Probieren Sie diese Tipps aus, falls vorhanden Pods stecken fest.
-
Falls überhaupt Pods stecken im
Waiting
Staat fest, dann laufkubectl describe pod
. Wenn Sie das sehenmy-deployment-xxxxxxxxxx-xxxxx
-nmy-namespace
Insufficient permissions: Unable to create Elastic Network Interface.
, bestätigen Sie, dass Sie die IAM Richtlinie in einem vorherigen Schritt zur IAM Clusterrolle hinzugefügt haben. -
Falls vorhanden Pods im
Pending
Status feststecken, vergewissern Sie sich, dass Ihr Node-Instance-Typ in limits.goaufgeführt ist und dass das Produkt aus der maximalen Anzahl von Branch-Netzwerkschnittstellen, die vom Instance-Typ unterstützt werden, multipliziert mit der Anzahl der Knoten in Ihrer Knotengruppe noch nicht erreicht wurde. Eine m5.large
-Instance unterstützt beispielsweise neun Zweigstellen-Netzwerkschnittstellen. Wenn Ihre Knotengruppe fünf Knoten hat, können maximal 45 Zweigstellen-Netzwerkschnittstellen für die Knotengruppe erstellt werden. Der 46. Pod den Sie einsetzen wollen, bleibt bis aufPending
Weiteres bestehen Pod dem Sicherheitsgruppen zugeordnet sind, wurde gelöscht.
Wenn Sie
kubectl describe pod
ausführen und eine Meldung ähnlich der folgenden Meldung angezeigt wird, kann sie problemlos ignoriert werden. Diese Meldung kann erscheinen, wenn Amazon VPC CNI plugin for Kubernetes versucht, das Host-Netzwerk einzurichten und schlägt fehl, während die Netzwerkschnittstelle erstellt wird. Das Plug-In protokolliert dieses Ereignis, bis die Netzwerkschnittstelle erstellt wird.my-deployment-xxxxxxxxxx-xxxxx
-nmy-namespace
Failed to create Pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "e24268322e55c8185721f52df6493684f6c2c3bf4fd59c9c121fd4cdc894579f" network for Pod "my-deployment-5df6f7687b-4fbjm": networkPlugin cni failed to set up Pod "my-deployment-5df6f7687b-4fbjm-c89wx_my-namespace" network: add cmd: failed to assign an IP address to container
Sie können die maximale Anzahl von nicht überschreiten Pods das kann auf dem Instance-Typ ausgeführt werden. Für eine Liste der maximalen Anzahl von Pods die Sie auf jedem Instance-Typ ausführen können, finden Sie unter eni-max-pods.txt
GitHub. Wenn Sie eine löschen Pod dem Sicherheitsgruppen zugeordnet sind, oder löschen Sie den Knoten, dem Pod läuft auf, löscht der VPC Resource Controller die Zweignetzwerkschnittstelle. Wenn Sie einen Cluster löschen mit Pods verwenden Pods Bei Sicherheitsgruppen löscht der Controller die Netzwerkschnittstellen der Zweigstellen nicht, sodass Sie sie selbst löschen müssen. Informationen zum Löschen von Netzwerkschnittstellen finden Sie unter Löschen einer Netzwerkschnittstelle im EC2 Amazon-Benutzerhandbuch. -
-
Rufen Sie in einem separaten Terminal eines der Pods. Für den Rest dieses Themas wird dieses Terminal bezeichnet als
TerminalB
.5df6f7687b
-4fbjm
kubectl exec -it -n my-namespace my-deployment-5df6f7687b-4fbjm -- /bin/bash
-
Überprüfen Sie in der Shell von
TerminalB
, dass die Beispielanwendung funktioniert.curl my-app
Eine Beispielausgabe sieht wie folgt aus.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
Sie haben die Ausgabe erhalten, weil alle Pods Die Ausführung der Anwendung ist der Sicherheitsgruppe zugeordnet, die Sie erstellt haben. Diese Gruppe enthält eine Regel, die den gesamten Verkehr zwischen allen erlaubt Pods dem die Sicherheitsgruppe zugeordnet ist. DNSAusgehender Datenverkehr von dieser Sicherheitsgruppe zur Cluster-Sicherheitsgruppe, die Ihren Knoten zugeordnet ist, ist zulässig. Auf den Knoten wird das ausgeführt CoreDNS Pods, welches dein Pods habe nach einem Namen gesucht.
-
Entfernen Sie aus
TerminalA
Ihrer Sicherheitsgruppe die Sicherheitsgruppenregeln, die die DNS Kommunikation mit der Cluster-Sicherheitsgruppe ermöglichen. Wenn Sie die DNS Regeln nicht in einem vorherigen Schritt zur Clustersicherheitsgruppe hinzugefügt haben, ersetzen Sie$my_cluster_security_group_id
mit der ID der Sicherheitsgruppe, in der Sie die Regeln erstellt haben.aws ec2 revoke-security-group-ingress --group-id $my_cluster_security_group_id --security-group-rule-ids $my_tcp_rule_id aws ec2 revoke-security-group-ingress --group-id $my_cluster_security_group_id --security-group-rule-ids $my_udp_rule_id
-
Versuchen Sie über
TerminalB
noch einmal, auf die Anwendung zuzugreifen.curl my-app
Eine Beispielausgabe sieht wie folgt aus.
curl: (6) Could not resolve host: my-app
Der Versuch schlägt fehl, weil Pod kann nicht mehr auf die zugreifen CoreDNS Pods, denen die Cluster-Sicherheitsgruppe zugeordnet ist. Die Clustersicherheitsgruppe verfügt nicht mehr über die Sicherheitsgruppenregeln, die die DNS Kommunikation mit der Sicherheitsgruppe zulassen, die Ihrer Gruppe zugeordnet ist Pod.
Wenn Sie versuchen, mit den IP-Adressen, die für eine der folgenden IP-Adressen zurückgegeben wurden, auf die Anwendung zuzugreifen Pods In einem vorherigen Schritt erhalten Sie immer noch eine Antwort, da alle Ports zwischen Pods denen die Sicherheitsgruppe zugeordnet ist und eine Namenssuche nicht erforderlich ist.
-
Sobald Sie mit dem Experimentieren fertig sind, können Sie die Beispielsicherheitsgruppenrichtlinie, die Anwendung und die Sicherheitsgruppe, die Sie erstellt haben, entfernen. Führen Sie die folgenden Befehle über
TerminalA
aus.kubectl delete namespace my-namespace aws ec2 revoke-security-group-ingress --group-id $my_pod_security_group_id --security-group-rule-ids $my_inbound_self_rule_id wait sleep 45s aws ec2 delete-security-group --group-id $my_pod_security_group_id