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.
¿Cómo expongo los servicios de Kubernetes que se ejecutan en mi clúster de Amazon EKS?
Quiero exponer los servicios de Kubernetes que se ejecutan en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).
Resolución
Para exponer los servicios de Kubernetes que se ejecutan en tu clúster de Amazon EKS, primero crea una aplicación de muestra. A continuación, aplica el tipo de servicio de Kubernetes ClusterIP, NodePort o LoadBalancer a tu aplicación de muestra. Para obtener más información, consulta Tipo de servicio en el sitio web de Kubernetes.
Creación de una aplicación de muestra
Sigue estos pasos:
-
Define y aplica un archivo de despliegue en Kubernetes. El siguiente comando de ejemplo crea un archivo denominado nginx-deployment.yaml y, a continuación, crea un ReplicaSet que activa dos pods de 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 -
Para crear el despliegue, ejecuta el siguiente comando:
kubectl apply -f nginx-deployment.yaml -
Para comprobar que los pods se están ejecutando y tienen sus propias direcciones IP internas, ejecuta el siguiente comando:
kubectl get pods -l 'app=nginx' -o wide | awk {'print $1" " $3 " " $6'} | column -tResultado de ejemplo:
NAME STATUS IP nginx-deployment-574b87c764-hcxdg Running 192.168.20.8 nginx-deployment-574b87c764-xsn9s Running 192.168.53.240
Aplicar el tipo de servicio
Decide cómo quieres exponer tu aplicación y, a continuación, aplica el tipo de servicio adecuado. Para obtener información sobre cada tipo de servicio, consulta tipo: ClusterIP, tipo: NodePort y tipo: LoadBalancer en el sitio web de Kubernetes.
Tipo de servicio ClusterIP
Sigue estos pasos:
-
Crea un archivo llamado clusterip.yaml.
-
Establece el tipo en ClusterIP como se muestra en el siguiente ejemplo:
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 -
Crea el objeto ClusterIP en Kubernetes mediante un comando declarativo o imperativo.
Para crear el objeto y aplicar el archivo clusterip.yaml, ejecuta el siguiente comando declarativo:kubectl create -f clusterip.yamlResultado de ejemplo:
service/nginx-service-cluster-ip created>/code>Alternativa:
Para exponer un despliegue del tipo ClusterIP, ejecuta el siguiente comando imperativo:
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ipNota: El comando expose crea un servicio pero no crea un archivo YAML. Sin embargo, kubectl traduce tu comando imperativo en un despliegue declarativo de Kubernetes.
Resultado de ejemplo:service "nginx-service-cluster-ip" exposed -
Para obtener la dirección CLUSTER-IP, ejecuta el siguiente comando:
kubectl get service nginx-service-cluster-ipResultado de ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-cluster-ip ClusterIP 10.100.12.153 <none> 80/TCP 23s -
Para usar la dirección CLUSTER-IP para acceder a la aplicación, ejecuta el siguiente comando:
curl -silent 10.100.12.153:80 | grep titleNota: Para acceder al servicio, debes iniciar sesión en un nodo de trabajo o estar dentro del contenedor de un pod.
-
Para eliminar el servicio ClusterIP, ejecuta el siguiente comando:
kubectl delete service nginx-service-cluster-ipResultado de ejemplo:
service "nginx-service-cluster-ip" deleted
Tipo de servicio NodePort
Sigue estos pasos:
-
Crea un archivo llamado nodeport.yaml.
-
Establece el tipo en NodePort, como se muestra en el siguiente ejemplo:
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 -
Crea el objeto NodePort en Kubernetes mediante un comando declarativo o imperativo.
Para crear el objeto y aplicar el archivo nodeport.yaml, ejecuta el siguiente comando declarativo:kubectl create -f nodeport.yamlAlternativa:
Para exponer un despliegue del tipo NodePort, ejecuta el siguiente comando imperativo:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeportResultado de ejemplo:
service/nginx-service-nodeport exposed -
Para obtener información sobre nginx-service, ejecuta el siguiente comando:
kubectl get service/nginx-service-nodeportResultado de ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27sImportante: NodePort crea una dirección IP de servicio a la que se puede acceder desde el clúster y usa el puerto especificado para exponer el servicio en cada nodo. El resultado del comando anterior muestra que el tipo de servicio NodePort está expuesto externamente en el puerto de la instancia de Amazon Elastic Compute Cloud (Amazon EC2) del nodo de trabajo disponible. Antes de acceder a NodeIP:NodePort desde fuera del clúster, configura los grupos de seguridad de los nodos para permitir el tráfico entrante a través del puerto que aparece en el resultado.
-
Para los nodos que están en una subred pública y son accesibles desde Internet, comprueba la dirección IP pública del nodo:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $7'} | column -tResultado de ejemplo:
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.2Alternativa:
Para los nodos que están en una subred privada y solo son accesibles a través de una nube virtual privada (VPC), comprueba la dirección IP privada del nodo:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -tResultado de ejemplo:
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 -
Para usar la IP del nodo y NodePort para acceder a la aplicación, ejecuta el siguiente comando:
curl -silent <Public/PrivateNodeIP>:30994 | grep title -
Para eliminar el servicio NodePort, ejecuta el siguiente comando:
kubectl delete service nginx-service-nodeportResultado de ejemplo:
service "nginx-service-nodeport" deleted
Tipo de servicio LoadBalancer
Sigue estos pasos:
-
Crea un archivo llamado loadbalancer.yaml.
-
Establece el tipo en LoadBalancer como se muestra en el siguiente ejemplo:
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 -
Para aplicar el archivo loadbalancer.yaml, ejecuta el siguiente comando:
kubectl create -f loadbalancer.yamlResultado de ejemplo:
service/nginx-service-loadbalancer createdAlternativa:
Para exponer un despliegue del tipo LoadBalancer, ejecuta el siguiente comando:
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancerResultado de ejemplo:
service "nginx-service-loadbalancer" exposed -
Para obtener información sobre nginx-service, ejecuta el siguiente comando:
kubectl get service/nginx-service-loadbalancer | awk {'print $1" " $2 " " $4 " " $5'} | column -tResultado de ejemplo:
NAME TYPE EXTERNAL-IP PORT(S) nginx-service-loadbalancer LoadBalancer *****.eu-west-1.elb.amazonaws.com 80:30039/TCP -
Para comprobar que puedes acceder externamente al equilibrador de carga, ejecuta el siguiente comando:
curl -silent *****.eu-west-1.elb.amazonaws.com:80 | grep title -
Para eliminar el servicio LoadBalancer, ejecuta el siguiente comando:
kubectl delete service nginx-service-loadbalancerResultado de ejemplo:
service "nginx-service-loadbalancer" deleted
Nota: De forma predeterminada, el tipo de servicio LoadBalancer crea un equilibrador de carga clásico. Para lograr una compatibilidad óptima y una fiabilidad a largo plazo, se recomienda utilizar AWS Load Balancer Controller para aprovisionar equilibradores de carga de red. Esta solución mantenida por AWS ofrece características mejoradas, mejor integración con los servicios de AWS y soporte.
Para crear un equilibrador de carga de red con un objetivo de tipo de instancia, agrega la siguiente anotación al manifiesto de servicio:
service.beta.kubernetes.io/aws-load-balancer-type: nlb
Alternativa:
Para crear un equilibrador de carga de red con destinos IP, despliega AWS Load Balancer Controller y, a continuación, crea un equilibrador de carga que utilice objetivos IP.
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 5 meses
- Respuesta aceptadapreguntada hace un año
- preguntada hace un año
- preguntada hace un año
OFICIAL DE AWSActualizada hace 3 años