Come posso esporre i servizi Kubernetes in esecuzione sul mio cluster Amazon EKS?
Desidero esporre i servizi Kubernetes in esecuzione sul mio cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Risoluzione
Per esporre i servizi Kubernetes in esecuzione nel cluster Amazon EKS, crea prima di tutto un esempio di applicazione. Quindi, applica il tipo di servizio Kubernetes ClusterIP, NodePort, or LoadBalancer all'esempio di applicazione. Per ulteriori informazioni, consulta Service type (Tipo di servizio) sul sito web Kubernetes.
Crea un esempio di applicazione
Completa i seguenti passaggi:
-
Definisci e applica un file di distribuzione in Kubernetes. Il seguente esempio di comando crea un file denominato nginx-deployment.yaml, quindi crea un ReplicaSet che attiva due pod 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 -
Per creare la distribuzione, esegui questo comando:
kubectl apply -f nginx-deployment.yaml -
Per verificare che i pod siano in esecuzione e abbiano indirizzi IP interni, esegui questo comando:
kubectl get pods -l 'app=nginx' -o wide | awk {'print $1" " $3 " " $6'} | column -tEsempio di output:
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Applica il tipo di servizio
Decidi come esporre l'applicazione, quindi applica il tipo di servizio appropriato. Per ulteriori informazioni su ciascun tipo di servizio, consulta type: ClusterIP, type: NodePort e type: LoadBalancer sul sito web di Kubernetes.
Tipo di servizio ClusterIP
Completa i seguenti passaggi:
-
Crea un file denominato clusterip.yaml.
-
Imposta type su ClusterIP, come mostrato nell'esempio seguente:
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 -
Utilizza un comando dichiarativo o imperativo per creare l'oggetto ClusterIP in Kubernetes.
Per creare l'oggetto e applicare il file clusterip.yaml, esegui questo comando dichiarativo:kubectl create -f clusterip.yamlEsempio di output:
service/nginx-service-cluster-ip created>/code>-oppure-
Per esporre una distribuzione di tipo ClusterIP, esegui questo comando imperativo:
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ipNota: il comando expose crea un servizio ma non crea un file YAML. Tuttavia, kubectl traduce il comando imperativo in una distribuzione Kubernetes dichiarativa.
Esempio di output:service "nginx-service-cluster-ip" exposed -
Per ottenere l'indirizzo CLUSTER-IP, esegui questo comando:
kubectl get service nginx-service-cluster-ipEsempio di output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-cluster-ip ClusterIP 10.100.12.153 <none> 80/TCP 23s -
Per utilizzare l'indirizzo CLUSTER-IP per accedere all'applicazione, esegui questo comando:
curl -silent 10.100.12.153:80 | grep titleNota: per accedere al servizio, devi accedere a un nodo worker o trovarti all'interno del container di un pod.
-
Per eliminare il servizio ClusterIP, esegui questo comando:
kubectl delete service nginx-service-cluster-ipEsempio di output:
service "nginx-service-cluster-ip" deleted
Tipo di servizio NodePort
Completa i seguenti passaggi:
-
Crea un file chiamato nodeport.yaml.
-
Imposta type su NodePort, come mostrato nell'esempio seguente:
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 -
Utilizza un comando dichiarativo o imperativo per creare l'oggetto NodePort in Kubernetes.
Per creare l'oggetto e applicare il file nodeport.yaml, esegui questo comando dichiarativo:kubectl create -f nodeport.yaml-oppure-
Per esporre una distribuzione di tipo NodePort, esegui questo comando imperativo:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeportEsempio di output:
service/nginx-service-nodeport exposed -
Per ottenere informazioni su nginx-service, esegui questo comando:
kubectl get service/nginx-service-nodeportEsempio di output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27sImportante: NodePort crea un indirizzo IP del servizio accessibile all'interno del cluster e utilizza la porta specificata per esporre il servizio su ogni nodo. L'output del comando precedente mostra che il tipo di servizio NodePort è esposto esternamente sulla porta dell'istanza Amazon Elastic Compute Cloud (Amazon EC2) del nodo worker disponibile. Prima di accedere a NodeIP:NodePort dall'esterno del cluster, imposta i gruppi di sicurezza dei nodi in modo da consentire il traffico in entrata attraverso la porta indicata nell'output.
-
Per i nodi che si trovano in una sottorete pubblica e sono raggiungibili da Internet, controlla l'indirizzo IP pubblico del nodo:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -tEsempio di output:
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-oppure-
Per i nodi che si trovano in una sottorete privata e sono raggiungibili solo tramite un cloud privato virtuale (VPC), controlla l'indirizzo IP privato del nodo:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -tEsempio di output:
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 -
Per utilizzare NodeIP e NodePort per accedere all'applicazione, esegui questo comando:
curl -silent <Public/PrivateNodeIP>:30994 | grep title -
Per eliminare il servizio NodePort, esegui questo comando:
kubectl delete service nginx-service-nodeportEsempio di output:
service "nginx-service-nodeport" deleted
Tipo di servizio LoadBalancer
Completa i seguenti passaggi:
-
Crea un file denominato loadbalancer.yaml.
-
Imposta type su LoadBalancer, come mostrato nell'esempio seguente:
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 -
Per applicare il file loadbalancer.yaml, esegui questo comando:
kubectl create -f loadbalancer.yamlEsempio di output:
service/nginx-service-loadbalancer created-oppure-
Per esporre una distribuzione di tipo LoadBalancer, esegui questo comando:
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancerEsempio di output:
service "nginx-service-loadbalancer" exposed -
Per ottenere informazioni su nginx-service, esegui questo comando:
kubectl get service/nginx-service-loadbalancer | awk {'print $1" " $2 " " $4 " " $5'} | column -tEsempio di output:
NAME TYPE EXTERNAL-IP PORT(S) nginx-service-loadbalancer LoadBalancer *****.eu-west-1.elb.amazonaws.com 80:30039/TCP -
Per verificare di poter accedere esternamente al bilanciatore del carico, esegui questo comando:
curl -silent *****.eu-west-1.elb.amazonaws.com:80 | grep title -
Per eliminare il servizio LoadBalancer, esegui questo comando:
kubectl delete service nginx-service-loadbalancerEsempio di output:
service "nginx-service-loadbalancer" deleted
Nota: per impostazione predefinita, il tipo di servizio LoadBalancer crea un Classic Load Balancer. Per una supportabilità ottimale e un'affidabilità a lungo termine, è consigliabile utilizzare AWS Load Balancer Controller per il provisioning dei Network Load Balancer. Questa soluzione gestita da AWS offre funzionalità avanzate, una migliore integrazione con i servizi e il supporto AWS.
Per creare un Network Load Balancer con una destinazione di tipo istanza, aggiungi l'annotazione seguente al manifesto del servizio:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
-oppure-
Per creare un Network Load Balancer con destinazioni IP, distribuisci AWS Load Balancer Controller, quindi crea un bilanciatore del carico che utilizza destinazioni IP.
- Argomenti
- Containers
- Lingua
- Italiano
Video correlati

