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!
¿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, 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.
Crear 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 -t
Resultado 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 que se llame 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.yaml
Resultado de ejemplo:
service/nginx-service-cluster-ip created>/code>
-o-
Para exponer una implementación del tipo ClusterIP, ejecuta el siguiente comando imperativo:
kubectl expose deployment nginx-deployment --type=ClusterIP --name=nginx-service-cluster-ip
Nota: El comando expose crea un servicio pero no crea un archivo YAML. Sin embargo, kubectl traduce tu comando imperativo en un objeto declarativo de implementación 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-ip
Resultado 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 title
Nota: 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-ip
Resultado de ejemplo:
service "nginx-service-cluster-ip" deleted
Tipo de servicio NodePort
Sigue estos pasos:
-
Crea un archivo que se llame 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.yaml
-o-
Para exponer un despliegue del tipo NodePort, ejecuta el siguiente comando imperativo:
kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service-nodeport
Resultado de ejemplo:
service/nginx-service-nodeport exposed
-
Para obtener información sobre nginx-service, ejecuta el siguiente comando:
kubectl get service/nginx-service-nodeport
Resultado de ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service-nodeport NodePort 10.100.106.151 <none> 80:30994/TCP 27s
Importante: 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 -t
Resultado 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.2
-o-
Para los nodos que están en una subred privada y solo son accesibles a través de una nube privada virtual (VPC), comprueba la dirección IP privada del nodo:
kubectl get nodes -o wide | awk {'print $1" " $2 " " $6'} | column -t
Resultado 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-nodeport
Resultado de ejemplo:
service "nginx-service-nodeport" deleted
Tipo de servicio LoadBalancer
Sigue estos pasos:
-
Crea un archivo que se llame 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.yaml
Resultado de ejemplo:
service/nginx-service-loadbalancer created
-o-
Para exponer una implementación del tipo LoadBalancer, ejecuta el siguiente comando:
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancer
Resultado 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 -t
Resultado 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-loadbalancer
Resultado de ejemplo:
service "nginx-service-loadbalancer" deleted
Nota: De forma predeterminada, el tipo de servicio LoadBalancer crea un equilibrador de carga clásico.
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
-o-
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 destinos IP.
Vídeos relacionados


Contenido relevante
- Respuesta aceptadapreguntada hace 3 meseslg...
- preguntada hace un meslg...
- preguntada hace 2 meseslg...
- preguntada hace 3 meseslg...
- Respuesta aceptadapreguntada hace 2 meseslg...
- OFICIAL DE AWSActualizada hace 3 años