Unterstützung für die Verbesserung dieser Seite beitragen
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.
Um zu diesem Benutzerhandbuch beizutragen, 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.
Sicherheitsgruppenrichtlinie für einen Amazon-EKS-Pod verwenden
Um Sicherheitsgruppen für Pods zu verwenden, benötigen Sie eine bereits vorhandene Sicherheitsgruppe. In den folgenden Schritten wird gezeigt, wie Sie die Sicherheitsgruppenrichtlinie für ein Pod verwenden. Wenn nicht anders angegeben, führen Sie alle Schritte vom selben Terminal aus, da Variablen in den folgenden Schritten verwendet werden, die nicht über Terminals hinweg bestehen bleiben.
Wenn Sie einen Pod mit EC2 Amazon-Instances haben, müssen Sie das Plugin konfigurieren, bevor Sie dieses Verfahren verwenden. Weitere Informationen finden Sie unter Konfiguration des Amazon-VPC-CNI-Plugins für Kubernetes für Sicherheitsgruppen für Amazon-EKS-Pods.
-
Erstellen Sie einen Kubernetes-Namespace, in dem -Ressourcen bereitgestellt werden sollen. Sie können es
my-namespacedurch den Namen eines Namespaces ersetzen, den Sie verwenden möchten.kubectl create namespace my-namespace -
Stellen Sie ein Amazon EKS
SecurityGroupPolicyin Ihrem Cluster bereit.-
Kopieren Sie den folgenden Inhalt auf Ihr Gerät. Sie können es durch
podSelectorersetzen,serviceAccountSelectorwenn Sie Pods lieber anhand der Dienstkontobezeichnungen auswählen möchten. Sie müssen den einen oder anderen Selektor angeben. Ein leerespodSelector(Beispiel:podSelector: {}) wählt alle Pods im Namespace aus. Sie könnenmy-roleden Namen Ihrer Rolle ändern. Ein leeresserviceAccountSelectorwählt alle Servicekonten im Namespace aus. Sie können ihnmy-security-group-policydurch einen Namen für sichSecurityGroupPolicyundmy-namespacedurch den Namespace ersetzen,SecurityGroupPolicyin dem Sie die Datei erstellen möchten.Sie müssen es
my_pod_security_group_iddurch die ID einer vorhandenen Sicherheitsgruppe ersetzen. Wenn Sie nicht über eine vorhandene Sicherheitsgruppe verfügen, müssen Sie eine erstellen. Weitere Informationen finden Sie unter EC2 Amazon-Sicherheitsgruppen für Linux-Instances im EC2 Amazon-Benutzerhandbuch. Sie können eine Sicherheitsgruppe von 1 bis 5 angeben IDs. Falls 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 EOFWichtig
Die Sicherheitsgruppe oder -gruppen, die Sie für Ihre Pods angeben, müssen die folgenden Kriterien erfüllen:
-
Sie müssen vorhanden sein. Wenn sie nicht vorhanden sind, bleibt Ihr Pod im Erstellungsprozess hängen, wenn Sie einen Pod bereitstellen, der dem Selektor entspricht. Wenn Sie den Pod beschreiben, 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 -
Diese müssen eingehende Kommunikation von der auf Ihre Knoten angewendeten Sicherheitsgruppe (für
kubelet) über alle Ports erlauben, für die Sie Tests konfiguriert haben. -
Diese müssen ausgehende Kommunikation über die
TCP- undUDP-Ports 53 zu einer Sicherheitsgruppe zulassen, die dem Pods (oder den Knoten, auf denen die Pods ausgeführt werden) zugeordnet ist, auf denen CoreDNS ausgeführt wird. Die Sicherheitsgruppe für Ihre CoreDNS-Pods muss eingehendenTCP- undUDP-Port-53-Datenverkehr von der von Ihnen angegebenen Sicherheitsgruppe zulassen. -
Sie müssen über die erforderlichen eingehenden und ausgehenden Regeln verfügen, um mit anderen Pods kommunizieren zu können, mit denen sie kommunizieren müssen.
-
Sie müssen über Regeln verfügen, die es den Pods ermöglichen, mit der Kubernetes-Steuerebene zu kommunizieren, 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 ausgeführte Pods.
-
-
Die Richtlinie bereitstellen.
kubectl apply -f my-security-group-policy.yaml
-
-
Stellen Sie eine Beispielanwendung mit einem Label bereit, die dem
my-role-Wert fürpodSelectorentspricht, den Sie in einem vorherigen Schritt angegeben haben.-
Kopieren Sie den folgenden Inhalt auf Ihr Gerät. Ersetzen Sie die Beispielwerte durch Ihre eigenen, und führen Sie dann den geänderten Befehl aus. Wenn Sie ersetzen
my-role, stellen Sie sicher, dass es sich um denselben Wert handelt, 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, stimmt das Amazon-VPC-CNI-Plugin für Kubernetes mit dem
role-Label überein und die Sicherheitsgruppen, die Sie im vorherigen Schritt angegeben haben, werden auf den Pod angewendet.kubectl apply -f sample-application.yaml
-
-
Zeigen Sie die Pods an, die mit der Beispielanwendung bereitgestellt wurden. Für den Rest dieses Themas wird dieses Terminal als
TerminalAbezeichnet.kubectl get pods -n my-namespace -o wideEine 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, wenn Pods hängen bleiben.
-
Wenn Pods im
Waiting-Stauts hängen bleiben, führen Siekubectl describe podaus. Wenn Siemy-deployment-xxxxxxxxxx-xxxxx-nmy-namespaceInsufficient permissions: Unable to create Elastic Network Interface.sehen, bestätigen Sie, dass Sie die IAM-Richtlinie in einem vorherigen Schritt zur IAM-Cluster-Rolle hinzugefügt haben. -
Wenn Pods im
Pending-Status hängen bleiben, überprüfen Sie, ob der Instance-Typ Ihres Knotens in limits.goaufgeführt ist, und dass die maximale Anzahl der vom Instance-Typ unterstützten Zweigstellen-Netzwerkschnittstellen 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 bereitstellen möchten, bleibt imPending-Status, bis ein anderer Pod mit zugehörigen Sicherheitsgruppen gelöscht wird.
Wenn Sie
kubectl describe podausführen und eine Meldung ähnlich der folgenden Meldung angezeigt wird, kann sie problemlos ignoriert werden. Diese Meldung kann angezeigt werden, wenn das Amazon-VPC-CNI-Plugin für Kubernetes versucht, das Host-Netzwerk einzurichten und die Erstellung der Netzwerkschnittstelle fehlschlägt. Das Plug-In protokolliert dieses Ereignis, bis die Netzwerkschnittstelle erstellt wird.my-deployment-xxxxxxxxxx-xxxxx-nmy-namespaceFailed 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 containerDie maximale Anzahl von Pods, die auf dem Instance-Typ ausgeführt werden können, darf nicht überschritten werden. Eine Liste der maximalen Anzahl von Pods, die Sie auf jedem Instance-Typ ausführen können, finden Sie unter eni-max-pods.txt
on. GitHub Wenn Sie einen Pod mit zugeordneten Sicherheitsgruppen oder den Knoten löschen, auf dem der Pod ausgeführt wird, löscht der VPC-Ressourcen-Controller die Zweigstellen-Netzwerkschnittstelle. Wenn Sie einen Cluster mit Pods löschen, indem Sie Pods für Sicherheitsgruppen verwenden, löscht der Controller die Netzwerkschnittstellen der Zweigstelle nicht, sodass Sie diese selbst löschen müssen. Informationen zum Löschen von Netzwerkschnittstellen finden Sie unter Löschen einer Netzwerkschnittstelle im EC2 Amazon-Benutzerhandbuch. -
-
Setzen Sie in einem separaten Terminal eine Shell in einen der Pods ein. Für den Rest dieses Themas wird dieses Terminal als
TerminalBbezeichnet.5df6f7687b-4fbjmErsetzen Sie es durch die ID eines der Pods, die in Ihrer Ausgabe aus dem vorherigen Schritt zurückgegeben wurden.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-appEine Beispielausgabe sieht wie folgt aus.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]Sie haben diese Ausgabe erhalten, weil alle Pods, auf denen die Anwendung ausgeführt wird, der Sicherheitsgruppe zugeordnet sind, die Sie erstellt haben. Diese Gruppe enthält eine Regel, die den gesamten Datenverkehr zwischen allen Pods zulässt, die der Sicherheitsgruppe zugeordnet ist. DNS-Datenverkehr wird von dieser Sicherheitsgruppe an die Cluster-Sicherheitsgruppe übertragen, die mit Ihren Knoten verknüpft ist. Auf den Knoten werden die CoreDNS-Pods ausgeführt, bei denen Ihre Pods eine Namenssuche durchgeführt haben.
-
Entfernen Sie von
TerminalAaus die Sicherheitsgruppenregeln, die die DNS-Kommunikation mit der Cluster-Sicherheitsgruppe ermöglichen, aus Ihrer Sicherheitsgruppe. Wenn Sie die DNS-Regeln nicht in einem vorherigen Schritt zur Clustersicherheitsgruppe hinzugefügt haben,$my_cluster_security_group_idersetzen Sie sie durch die 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
TerminalBnoch einmal, auf die Anwendung zuzugreifen.curl my-appEine Beispielausgabe sieht wie folgt aus.
curl: (6) Could not resolve host: my-appDer Versuch schlägt fehl, da der Pod nicht mehr auf die CoreDNS-Pods zugreifen kann, denen die Cluster-Sicherheitsgruppe zugeordnet ist. Die Cluster-Sicherheitsgruppe verfügt nicht mehr über die Sicherheitsgruppenregeln, die eine DNS-Kommunikation von der Sicherheitsgruppe, die Ihrem Pod zugeordnet ist, erlauben.
Wenn Sie versuchen, über die IP-Adressen auf die Anwendung zuzugreifen, die für einen der Pods in einem vorherigen Schritt zurückgegeben wurden, erhalten Sie dennoch eine Antwort, da zwischen Pods, denen die Sicherheitsgruppe zugeordnet ist, alle Ports erlaubt sind, und eine Namenssuche daher nicht erforderlich ist.
-
Wenn Sie mit dem Experimentieren fertig sind, können Sie die von Ihnen erstellte Sicherheitsgruppen-Richtlinie, Anwendung und Sicherheitsgruppe entfernen. Führen Sie die folgenden Befehle über
TerminalAaus.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