Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
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 -t
Exemple de résultat :
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 appelé 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.yaml
Exemple 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-ip
Remarque : 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-ip
Exemple 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 title
Remarque : Pour accéder au service, vous devez être connecté à un nœud de travail 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-ip
Exemple de résultat :
service "nginx-service-cluster-ip" deleted
Type de service NodePort
Procédez comme suit :
-
Créez un fichier appelé 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-nodeport
Exemple de résultat :
service/nginx-service-nodeport exposed
-
Pour obtenir des informations sur nginx-service, exécutez la commande suivante :
kubectl get service/nginx-service-nodeport
Exemple de résultat :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27s
**Important :**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é des nœuds 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 -t
Exemple 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 -t
Exemple de résultat :
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-nodeport
Exemple de résultat :
service "nginx-service-nodeport" deleted
Type de service LoadBalancer
Procédez comme suit :
-
Créez un fichier appelé 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.yaml
Exemple 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-loadbalancer
Exemple de résultat :
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 -t
Exemple 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-loadbalancer
Exemple de résultat :
service "nginx-service-loadbalancer" deleted
Remarque : Par défaut, le type de service LoadBalancer crée un Classic Load Balancer.
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 le AWS Load Balancer Controller, puis créez un équilibreur de charge qui utilise des cibles IP.
Vidéos associées


Contenus pertinents
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- demandé il y a 2 anslg...
- Réponse acceptéedemandé il y a 6 moislg...
- demandé il y a 5 moislg...
- AWS OFFICIELA mis à jour il y a un an