Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Wie mache ich die Kubernetes-Services, die auf meinem Amazon EKS-Cluster ausgeführt werden, verfügbar?
Ich möchte die Kubernetes-Services, die auf meinem Amazon Elastic Kubernetes Service (Amazon EKS)-Cluster ausgeführt werden, verfügbar machen.
Lösung
Um die auf deinem Amazon EKS-Cluster ausgeführten Kubernetes-Services verfügbar zu machen, erstelle zunächst eine Beispielanwendung. Wende dann die Kubernetes-Servicetypen ClusterIP, NodePort und LoadBalancer auf deine Beispielanwendung an. Weitere Informationen findest du unter Servicetyp auf der Kubernetes-Website.
Eine Beispielanwendung erstellen
Führe die folgenden Schritte aus:
-
Definiere eine Bereitstellungsdatei in Kubernetes und wende sie an. Der folgende Beispielbefehl erstellt eine Datei mit dem Namen nginx-deployment.yaml und erstellt dann ein ReplicaSet, das zwei nginx-Pods hochfährt:
cat <<EOF > nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 EOF -
Führe den folgenden Befehl aus, um die Bereitstellung zu erstellen:
kubectl apply -f nginx-deployment.yaml -
Um zu überprüfen, ob die Pods ausgeführt werden und ihre eigenen internen IP-Adressen haben, führe den folgenden Befehl aus:
kubectl get pods -l 'app=nginx' -o wide | awk {'print $1" " $3 " " $6'} | column -tBeispielausgabe:
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Servicetyp anwenden
Entscheide, wie du die Anwendung verfügbar machen möchtest, und wende dann den entsprechenden Servicetyp an. Weitere Informationen zu den einzelnen Servicetypen findest du unter type: ClusterIP, type: NodePort und type: LoadBalancer auf der Kubernetes-Website.
ClusterIP-Servicetyp
Führe die folgenden Schritte aus:
-
Erstelle eine Datei mit dem Namen clusterip.yaml.
-
Stelle Typ auf ClusterIP ein, wie im folgenden Beispiel gezeigt:
cat <<EOF > clusterip.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-cluster-ip spec: type: ClusterIP selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 EOF -
Verwende entweder einen deklarativen oder einen imperativen Befehl, um das ClusterIP-Objekt in Kubernetes zu erstellen.
Führe den folgenden deklarativen Befehl aus, um das Objekt zu erstellen und die Datei clusterip.yaml zu übernehmen:kubectl create -f clusterip.yamlBeispielausgabe:
service/nginx-service-cluster-ip created>/code>-oder-
Führe den folgenden Befehl aus, um eine Bereitstellung des Typs ClusterIP verfügbar zu machen:
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ipHinweis: Der Befehl expose erstellt einen Dienst, aber keine YAML-Datei. kubectl übersetzt den imperativen Befehl jedoch in eine deklarative Kubernetes-Bereitstellung.
Beispielausgabe:service "nginx-service-cluster-ip" exposed -
Führe den folgenden Befehl aus, um die CLUSTER-IP-Adresse abzurufen:
kubectl get service nginx-service-cluster-ipBeispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-cluster-ip ClusterIP 10.100.12.153 <none> 80/TCP 23s -
Um die CLUSTER-IP-Adresse für den Zugriff auf die Anwendung zu verwenden, führe den folgenden Befehl aus:
curl -silent 10.100.12.153:80 | grep titleHinweis: Um auf den Service zuzugreifen, musst du dich bei einem Worker-Knoten anmelden oder dich im Container eines Pods befinden.
-
Führe den folgenden Befehl aus, um den ClusterIP-Dienst zu löschen:
kubectl delete service nginx-service-cluster-ipBeispielausgabe:
service "nginx-service-cluster-ip" deleted
NodePort-Servicetyp
Führe die folgenden Schritte aus:
-
Erstelle eine Datei mit dem Namen nodeport.yaml.
-
Stelle Typ auf NodePort ein, wie im folgenden Beispiel gezeigt:
cat <<EOF > nodeport.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-nodeport spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 EOF -
Verwende entweder einen deklarativen oder einen imperativen Befehl, um das NodePort-Objekt in Kubernetes zu erstellen.
Führe den folgenden deklarativen Befehl aus, um das Objekt zu erstellen und die Datei nodeport.yaml zu übernehmen:kubectl create -f nodeport.yaml-oder-
Führe den folgenden imperativen Befehl aus, um eine Bereitstellung des Typs NodePort verfügbar zu machen:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeportBeispielausgabe:
service/nginx-service-nodeport exposed -
Um Informationen über nginx-service abzurufen, führe den folgenden Befehl aus:
kubectl get service/nginx-service-nodeportBeispielausgabe:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27sWichtig: NodePort erstellt eine Service-IP-Adresse, auf die innerhalb des Clusters zugegriffen werden kann, und verwendet den angegebenen Port, um den Service auf jedem Knoten verfügbar zu machen. Die Ausgabe des vorherigen Befehls zeigt, dass der NodePort-Servicetyp extern auf dem Port der Amazon Elastic Compute Cloud (Amazon EC2)-Instance des verfügbaren Worker-Knotens verfügbar gemacht wird. Bevor du von außerhalb des Clusters auf nodeip:nodePort zugreifst, lege die Knotensicherheitsgruppen fest, um eingehenden Datenverkehr über den in der Ausgabe aufgeführten Port zuzulassen.
-
Wenn sich der Knoten in einem öffentlichen Subnetz befindet und über das Internet erreichbar ist, überprüfe die öffentliche IP-Adresse des Knotens:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -tBeispielausgabe:
NAME STATUS EXTERNAL-IP ip-10-0-3-226.eu-west-1.compute.internal Ready 1.1.1.1 ip-10-1-3-107.eu-west-1.compute.internal Ready 2.2.2.2-oder-
Bei Knoten, die sich in einem privaten Subnetz befinden und nur über eine Virtual Private Cloud (VPC) erreichbar sind, überprüfe die private IP-Adresse des Knotens:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -tBeispielausgabe:
NAME STATUS INTERNAL-IP ip-10-0-3-226.eu-west-1.compute.internal Ready 10.0.3.226 ip-10-1-3-107.eu-west-1.compute.internal Ready 10.1.3.107 -
Um Node IP und NodePort für den Zugriff auf die Anwendung zu verwenden, führe den folgenden Befehl aus:
curl -silent <Public/PrivateNodeIP>:30994 | grep title -
Führe den folgenden Befehl aus, um den NodePort-Dienst zu löschen:
kubectl delete service nginx-service-nodeportBeispielausgabe:
service "nginx-service-nodeport" deleted
LoadBalancer-Servicetyp
Führe die folgenden Schritte aus:
-
Erstelle eine Datei mit dem Namen loadbalancer.yaml.
-
Stelle Typ auf LoadBalancer ein, wie im folgenden Beispiel gezeigt:
cat <<EOF > loadbalancer.yaml apiVersion: v1 kind: Service metadata: name: nginx-service-loadbalancer spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 EOF -
Führe den folgenden Befehl aus, um die Datei loadbalancer.yaml zu übernehmen:
kubectl create -f loadbalancer.yamlBeispielausgabe:
service/nginx-service-loadbalancer created-oder-
Führe den folgenden Befehl aus, um eine Bereitstellung des Typs LoadBalancer verfügbar zu machen:
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancerBeispielausgabe:
service "nginx-service-loadbalancer" exposed -
Um Informationen über nginx-service abzurufen, führe den folgenden Befehl aus:
kubectl get service/nginx-service-loadbalancer | awk {'print $1" " $2 " " $4 " " $5'} | column -tBeispielausgabe:
NAME TYPE EXTERNAL-IP PORT(S) nginx-service-loadbalancer LoadBalancer *****.eu-west-1.elb.amazonaws.com 80:30039/TCP -
Führe den folgenden Befehl aus, um zu überprüfen, ob du extern auf den Load Balancer zugreifen kannst:
curl -silent *****.eu-west-1.elb.amazonaws.com:80 | grep title -
Führe den folgenden Befehl aus, um den LoadBalancer-Service zu löschen:
kubectl delete service nginx-service-loadbalancerBeispielausgabe:
service "nginx-service-loadbalancer" deleted
Hinweis: Standardmäßig erstellt der LoadBalancer-Servicetyp einen Classic Load Balancer. Für optimale Unterstützbarkeit und langfristige Zuverlässigkeit empfiehlt es sich, den AWS Load Balancer Controller zur Bereitstellung von Network Load Balancern zu verwenden. Diese von AWS verwaltete Lösung bietet erweiterte Funktionen, eine bessere Integration mit AWS-Services und Support.
Um einen Network Load Balancer mit einem Ziel vom Typ Instance zu erstellen, füge dem Service-Manifest die folgende Anmerkung hinzu:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
-oder-
Um einen Network Load Balancer mit IP-Zielen zu erstellen, stelle den AWS Load Balancer Controller bereit und erstelle dann einen Load Balancer, der IP-Ziele verwendet.
- Themen
- Containers
- Sprache
- Deutsch
Ähnliche Videos

