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.
Comment puis-je exposer les services Kubernetes qui s'exécutent sur mon cluster Amazon EKS ?
Je souhaite exposer les services Kubernetes qui s'exécutent sur mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Résolution
Pour exposer les services Kubernetes qui s'exécutent sur votre cluster, créez d'abord un exemple d'application. Puis, appliquez le type de service Kubernetes ClusterIP, NodePort ou LoadBalancer à votre exemple d'application. Pour plus d'informations, consultez la page Type de service sur le site Web de Kubernetes.
Créer un exemple d'application
Procédez comme suit :
-
Définissez et appliquez un fichier de déploiement dans Kubernetes. L'exemple de commande suivant crée un fichier appelé nginx-deployment.yaml, puis crée un ReplicaSet qui fait tourner deux pods nginx :
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 -
Pour créer le déploiement, exécutez la commande suivante :
kubectl apply -f nginx-deployment.yaml -
Pour vérifier que vos pods fonctionnent et possèdent leurs propres adresses IP internes, exécutez la commande suivante :
kubectl get pods -l 'app=nginx' -o wide | awk {'print $1" " $3 " " $6'} | column -tExemple de sortie :
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Appliquer le type de service
Déterminez la manière dont vous souhaitez exposer votre application, puis appliquez le type de service approprié. Pour plus d'informations sur chaque type de service, consultez la page type : ClusterIP, type : NodePort et saisissez : LoadBalancer sur le site Web de Kubernetes.
Type de service ClusterIP
Procédez comme suit :
-
Créez un fichier nommé clusterip.yaml.
-
Définissez type sur ClusterIP comme indiqué dans l'exemple suivant :
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 -
Utilisez une commande déclarative ou impérative pour créer l'objet ClusterIP dans Kubernetes.
Pour créer l'objet et appliquer le fichier clusterip.yaml, exécutez la commande déclarative suivante :kubectl create -f clusterip.yamlExemple de résultat :
service/nginx-service-cluster-ip created>/code>-ou-
Pour exposer un déploiement du type ClusterIP, exécutez la commande impérative suivante :
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ipRemarque : La commande expose crée un service mais ne crée pas de fichier YAML. Cependant, kubectl traduit votre commande impérative en un objet de déploiement Kubernetes déclaratif.
Exemple de résultat :service "nginx-service-cluster-ip" exposed -
Pour obtenir l'adresse CLUSTER-IP, exécutez la commande suivante :
kubectl get service nginx-service-cluster-ipExemple de résultat :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-cluster-ip ClusterIP 10.100.12.153 <none> 80/TCP 23s -
Pour utiliser l'adresse CLUSTER-IP afin d'accéder à l'application, exécutez la commande suivante :
curl -silent 10.100.12.153:80 | grep titleRemarque : Pour accéder au service, vous devez vous connecter à un composant master ou vous trouver dans le conteneur d'un pod.
-
Pour supprimer le service ClusterIP, exécutez la commande suivante :
kubectl delete service nginx-service-cluster-ipExemple de résultat :
service "nginx-service-cluster-ip" deleted
Type de service NodePort
Procédez comme suit :
-
Créez un fichier nommé nodeport.yaml.
-
Définissez type sur NodePort comme indiqué dans l'exemple suivant :
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 -
Utilisez une commande déclarative ou impérative pour créer l'objet NodePort dans Kubernetes.
Pour créer l'objet et appliquer le fichier nodeport.yaml, exécutez la commande déclarative suivante :kubectl create -f nodeport.yaml-ou-
Pour exposer un déploiement du type NodePort, exécutez la commande impérative suivante :
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeportExemple de sortie :
service/nginx-service-nodeport exposed -
Pour obtenir des informations sur nginx-service, exécutez la commande suivante :
kubectl get service/nginx-service-nodeportExemple de résultat :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27sImportant : NodePort crée une adresse IP de service accessible dans le cluster et utilise le port spécifié pour exposer le service sur chaque nœud. La sortie de la commande précédente indique que le type de service NodePort est exposé en externe sur le port de l'instance Amazon Elastic Compute Cloud (Amazon EC2) du nœud de travail disponible. Avant d'accéder à NodeIP:NodePort depuis l'extérieur du cluster, définissez les groupes de sécurité du nœud pour autoriser le trafic entrant via le port répertorié dans la sortie.
-
Pour les nœuds situés dans un sous-réseau public et accessibles depuis Internet, vérifiez l'adresse IP publique du nœud :
kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -tExemple de résultat :
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-ou-
Pour les nœuds qui se trouvent dans un sous-réseau privé et ne sont accessibles que via un cloud privé virtuel (VPC), vérifiez l'adresse IP privée du nœud :
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -tExemple de sortie :
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 -
Pour utiliser l’Adresse du nœud et le NodePort afin d’accéder à l'application, exécutez la commande suivante :
curl -silent <Public/PrivateNodeIP>:30994 | grep title -
Pour supprimer le service NodePort, exécutez la commande suivante :
kubectl delete service nginx-service-nodeportExemple de résultat :
service "nginx-service-nodeport" deleted
Type de service LoadBalancer
Procédez comme suit :
-
Créez un fichier nommé loadbalancer.yaml.
-
Définissez type sur LoadBalancer comme indiqué dans l'exemple suivant :
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 -
Pour appliquer le fichier loadbalancer.yaml, exécutez la commande suivante :
kubectl create -f loadbalancer.yamlExemple de résultat :
service/nginx-service-loadbalancer created-ou-
Pour exposer un déploiement du type LoadBalancer, exécutez la commande suivante :
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancerExemple de sortie :
service "nginx-service-loadbalancer" exposed -
Pour obtenir des informations sur nginx-service, exécutez la commande suivante :
kubectl get service/nginx-service-loadbalancer | awk {'print $1" " $2 " " $4 " " $5'} | column -tExemple de résultat :
NAME TYPE EXTERNAL-IP PORT(S) nginx-service-loadbalancer LoadBalancer *****.eu-west-1.elb.amazonaws.com 80:30039/TCP -
Pour vérifier que vous pouvez accéder à l'équilibreur de charge de l'extérieur, exécutez la commande suivante :
curl -silent *****.eu-west-1.elb.amazonaws.com:80 | grep title -
Pour supprimer le service LoadBalancer, exécutez la commande suivante :
kubectl delete service nginx-service-loadbalancerExemple de résultat :
service "nginx-service-loadbalancer" deleted
Remarque : Par défaut, le type de service LoadBalancer crée un Classic Load Balancer. Pour une prise en charge optimale et une fiabilité à long terme, il est recommandé d'utiliser l’AWS Load Balancer Controller pour provisionner les Network Load Balancers. Cette solution maintenue par AWS fournit des fonctionnalités améliorées, une meilleure intégration avec les services AWS et un support.
Pour créer un Network Load Balancer avec un type d'instance cible, ajoutez l'annotation suivante au manifeste du service :
service.beta.kubernetes.io/aws-load-balancer-type: nlb
-ou-
Pour créer un Network Load Balancer avec des cibles IP, déployez l’AWS Load Balancer Controller, puis créez un équilibreur de charge qui utilise des cibles IP.
- Sujets
- Containers
- Langue
- Français
Vidéos associées


Contenus pertinents
- demandé il y a 3 ans
- demandé il y a 5 mois
- demandé il y a 3 ans
- demandé il y a 5 mois
- demandé il y a 7 mois
AWS OFFICIELA mis à jour il y a 2 ans