Comment exposer les services Kubernetes exécutés sur mon cluster Amazon EKS ?
Je souhaite exposer les services Kubernetes exécutés sur mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Brève description
Pour exposer les services Kubernetes exécutés sur votre cluster, créez un exemple d'application. Ensuite, appliquez les types de services Kubernetes ClusterIP, NodePort et LoadBalancer à votre exemple d'application.
Gardez à l'esprit les points suivants :
- ClusterIP expose le service sur l'adresse IP interne d'un cluster.
- NodePort expose le service sur l'adresse IP de chaque nœud à un port statique.
- LoadBalancer expose le service à l'extérieur à l'aide d'un équilibreur de charge.
Remarque : Amazon EKS prend en charge Network Load Balancer et Classic Load Balancer pour les pods s'exécutant sur les nœuds de travail d'instance Amazon Elastic Compute Cloud (Amazon EC2). Amazon EKS fournit ce support en utilisant LoadBalancer. Vous pouvez équilibrer la charge du trafic réseau vers un Network Load Balancer (instance ou cibles IP) ou un Classic Load Balancer (cible d'instance uniquement).
Résolution
Créer un exemple d'application
1. Définissez et appliquez un fichier de déploiement. L'exemple suivant crée un ReplicaSet qui fait tourner deux pods nginx puis crée un fichier appelé nginx-deployment.yaml.
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
2. Créez le déploiement :
kubectl apply -f nginx-deployment.yaml
3. Vérifiez que vos pods sont en cours d'exécution et disposent de leurs propres adresses IP internes :
kubectl get pods -l 'app=nginx' -o wide | awk {'print $1" " $3 " " $6'} | column -t
Sortie :
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Créer un service ClusterIP
1. Créez un fichier nommé clusterip.yaml, puis définissez le type sur ClusterIP. Par exemple:
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
2. Créez l'objet ClusterIP dans Kubernetes à l'aide d'une commande déclarative ou impérative.
Pour créer l'objet et appliquer le fichier clusterip.yaml, exécutez la commande déclarative suivante :
kubectl create -f clusterip.yaml
File d'attente:
service/nginx-service-cluster-ip created
-ou-
Pour exposer un déploiement de type ClusterIP, exécutez la commande impérative suivante:
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ip
File d'attente:
service "nginx-service-cluster-ip" exposed
Remarque: la commande exposée crée un service sans créer de fichier YAML. Toutefois, kubectl traduit votre commande impérative en un objet de déploiement Kubernetes déclaratif.
3. Accédez à l'application et obtenez le numéro ClusterIP :
kubectl get service nginx-service-cluster-ip
Sortie :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-cluster-ip ClusterIP 10.100.12.153 <none> 80/TCP 23s
4. Supprimez le service ClusterIP :
kubectl delete service nginx-service-cluster-ip
Sortie :
service "nginx-service-cluster-ip" deleted
Créer un service NodePort
1. Pour créer un service NodePort, créez un fichier appelé nodeport.yaml, puis définissez le type sur NodePort. Par exemple:
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
2. Créez l'objet NodePort dans Kubernetes à l'aide d'une commande déclarative ou impérative.
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 de type NodePort exécutez la commande impérative suivante:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeport
File d'attente:
service/nginx-service-nodeport exposed
3. Obtenez les informations du nginx service :
kubectl get service/nginx-service-nodeport
Sortie :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27s
Important : le ServiceType est un NodePort et un ClusterIP qui sont créés automatiquement pour le service. La sortie de la commande précédente indique que le service NodePort est exposé en externe sur le port (30994) de l'instance EC2 du nœud de travail disponible. Avant d'accéder à NodeIP:NodePort à partir d'un cluster externe, vous devez définir le groupe de sécurité des nœuds pour autoriser le trafic entrant. Vous pouvez autoriser le trafic entrant via le port (30994) répertorié dans la sortie de la commande kubectl get service précédente.
4. Si le nœud se trouve dans un sous-réseau public et est accessible à partir d'Internet, vérifiez l'adresse IP publique du nœud :
kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -t
Sortie :
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-
Si le nœud se trouve dans un sous-réseau privé et n'est accessible qu'à l'intérieur ou via un VPC, vérifiez l'adresse IP privée du nœud :
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -t
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
5. Supprimez le service NodePort :
kubectl delete service nginx-service-nodeport
Sortie :
service "nginx-service-nodeport" deleted
Créer un service LoadBalancer
1. Pour créer un service LoadBalancer, créez un fichier appelé loadbalancer.yaml, puis définissez le type de LoadBalancer. Par exemple:
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
2. Appliquez le fichier loadbalancer.yaml :
kubectl create -f loadbalancer.yaml
Sortie :
service/nginx-service-loadbalancer created
-ou-
Exposez un déploiement de type LoadBalancer :
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancer
Sortie :
service "nginx-service-loadbalancer" exposed
3. Obtenez les informations du nginx service :
kubectl get service/nginx-service-loadbalancer | awk {'print $1" " $2 " " $4 " " $5'} | column -t
Sortie :
NAME TYPE EXTERNAL-IP PORT(S) nginx-service-loadbalancer LoadBalancer *****.eu-west-1.elb.amazonaws.com 80:30039/TCP
4. Vérifiez que vous pouvez accéder à l'équilibreur de charge en externe :
curl -silent *****.eu-west-1.elb.amazonaws.com:80 | grep title
Vous devriez recevoir la sortie suivante entre les balises de titre HTML: « Bienvenue dans nginx ! »
5. Supprimez le service LoadBalancer :
kubectl delete service nginx-service-loadbalancer
Sortie :
service "nginx-service-loadbalancer" deleted
Remarque : par défaut, le service LoadBalancer précédent crée un Classic Load Balancer.
6. Pour créer un Network Load Balancer avec une cible de type d'instance, ajoutez l'annotation suivante au manifeste de service :
service.beta.kubernetes.io/aws-load-balancer-type: nlb
-ou-
Pour créer un Network Load Balancer avec des cibles IP, déployez 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 un anlg...
- demandé il y a 2 anslg...
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans