Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Implemente un microservicio Java de muestra en Amazon EKS y exponga el microservicio mediante un Equilibrador de carga de aplicación
Creado por Vijay Thompson (AWS) y Akkamahadevi Hiremath (AWS)
Resumen
Este patrón describe cómo implementar un microservicio Java de muestra como una aplicación en contenedores en Amazon Elastic Kubernetes Service (Amazon EKS) mediante la utilidad de línea de comandos eksctl
y Amazon Elastic Container Registry (Amazon ECR). Puede usar un equilibrador de carga de aplicación para equilibrar la carga del tráfico de la aplicación.
Requisitos previos y limitaciones
Requisitos previos
Una cuenta de AWS activa
La interfaz de la línea de comandos de AWS (AWS CLI) versión 1.7, instalada y configurada en Linux, macOS o Windows
Un daemon de Docker
en ejecución La utilidad de línea de comandos
eksctl
, instalada y configurada en macOS, Linux o Windows (para obtener más información, consulte Introducción a Amazon EKS — eksctl en la documentación de Amazon EKS).La utilidad de línea de comandos
kubectl
, instalada y configurada en macOS, Linux o Windows (para obtener más información, consulte Instalar o actualizar eksctl en la documentación de Amazon EKS).
Limitaciones
Este patrón no cubre la instalación de un certificado SSL para el Equilibrador de carga de aplicación.
Arquitectura
Pila de tecnología de destino
Amazon ECR
Amazon EKS
Elastic Load Balancing
Arquitectura de destino
El siguiente diagrama muestra una arquitectura para organizar en contenedores un microservicio Java en Amazon EKS.

Herramientas
Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.
Amazon Elastic Kubernetes Service (Amazon EKS) le ayuda a ejecutar Kubernetes en AWS sin necesidad de instalar ni mantener su propio plano de control o nodos de Kubernetes.
La interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su intérprete de comandos de línea de comandos.
Elastic Load Balancing distribuye automáticamente el tráfico entrante entre varios destinos, como instancias, contenedores y direcciones IP de Amazon Elastic Compute Cloud (Amazon EC2), en una o más zonas de disponibilidad.
eksctl
le ayuda a crear clústeres en Amazon EKS. kubectl
permite ejecutar comandos en clústeres de Kubernetes. Docker
le ayuda a crear, probar y entregar aplicaciones en paquetes llamados contenedores.
Epics
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un clúster de Amazon EKS. | Para crear un clúster de Amazon EKS que utilice dos EC2 instancias de Amazon t2.small como nodos, ejecute el siguiente comando:
notaEl proceso puede tardar entre 15 y 20 minutos. Una vez creado el clúster, se añade la configuración de Kubernetes adecuada al archivo kubeconfig. Puede usar el archivo | Desarrollador, administrador del sistema |
Verifique el clúster de Amazon EKS. | Para comprobar que se ha creado el clúster y que puede conectarse a él, ejecute el comando | Desarrollador, administrador del sistema |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un repositorio de Amazon ECR. | Siga las instrucciones de Creación de un repositorio privado en la documentación de Amazon ECR. | Desarrollador, administrador del sistema |
Cree un archivo XML POM. | Cree un archivo | Desarrollador, administrador del sistema |
Cree un archivo de origen. | Cree un archivo de origen llamado
Asegúree de usar la siguiente estructura de directorios:
| |
Cree un Dockerfile. | Cree un archivo | Desarrollador, administrador del sistema |
Cree y envíe la imagen de Docker. | En el directorio en el que desee que su
notaModifique la región de AWS, el número de cuenta y los detalles del repositorio en los comandos anteriores. Asegúrese de anotar la URL de la imagen para usarla más adelante. importanteUn sistema macOS con un chip M1 tiene problemas para crear una imagen que sea compatible con Amazon EKS que se ejecuta en una AMD64 plataforma. Para resolver este problema, utilice docker buildx |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Cree un archivo implementación. | Cree un archivo YAML llamado notaUtilice la URL de la imagen que copió anteriormente como ruta del archivo de imagen del repositorio de Amazon ECR. | Desarrollador, administrador del sistema |
Implemente los microservicios de Java en el clúster de Amazon EKS. | Para crear una implementación en su clúster de Amazon EKS, ejecute el comando | Desarrollador, administrador del sistema |
Verifique el estado de los pods. |
| Desarrollador, administrador del sistema |
Cree un servicio. |
| Desarrollador, administrador del sistema |
Instalación del complemento controlador del equilibrador de carga de AWS. | Siga las instrucciones de Instalación del complemento controlador del equilibrador de carga de AWS en la documentación de Amazon EKS. notaDebe tener el complemento instalado para crear un Application Load Balancer o Network Load Balancer para un servicio de Kubernetes. | Desarrollador, administrador del sistema |
Cree un recurso de ingreso. | Cree un archivo YAML llamado | Desarrollador, administrador del sistema |
Cree un Equilibrador de carga de aplicación. | Para implementar el recurso de ingreso y crear un Equilibrador de carga de aplicación, ejecute el comando | Desarrollador, administrador del sistema |
Tarea | Descripción | Habilidades requeridas |
---|---|---|
Pruebe y verifique la aplicación. |
| Desarrollador, administrador del sistema |
Recursos relacionados
Creación de un repositorio privado (documentación de Amazon ECR)
Enviar una imagen de Docker (documentación de Amazon ECR)
Controladores de ingreso
(taller de Amazon EKS) Docker buildx
(documentación de Docker)
Información adicional
Ejemplo de archivo POM
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>helloWorld</groupId> <artifactId>helloWorld</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.sparkjava</groupId><artifactId>spark-core</artifactId><version>2.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version> <configuration><finalName>eksExample</finalName><archive><manifest> <addClasspath>true</addClasspath><mainClass>eksExample.HelloWorld</mainClass><classpathPrefix>dependency-jars/</classpathPrefix> </manifest></archive> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version> <configuration><source>1.8</source><target>1.8</target></configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <goals><goal>attached</goal></goals><phase>package</phase> <configuration> <finalName>eksExample</finalName> <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs> <archive><manifest><mainClass>eksExample.HelloWorld</mainClass></manifest></archive> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
Ejemplo de Dockerfile
FROM bellsoft/liberica-openjdk-alpine-musl:17 RUN apk add maven WORKDIR /code # Prepare by downloading dependencies ADD pom.xml /code/pom.xml RUN ["mvn", "dependency:resolve"] RUN ["mvn", "verify"] # Adding source, compile and package into a fat jar ADD src /code/src RUN ["mvn", "package"] EXPOSE 4567 CMD ["java", "-jar", "target/eksExample-jar-with-dependencies.jar"]
Ejemplo de archivo de implementación
apiVersion: apps/v1 kind: Deployment metadata: name: microservice-deployment spec: replicas: 2 selector: matchLabels: app.kubernetes.io/name: java-microservice template: metadata: labels: app.kubernetes.io/name: java-microservice spec: containers: - name: java-microservice-container image: .dkr.ecr.amazonaws.com/: ports: - containerPort: 4567
Ejemplo de archivo de servicio
apiVersion: v1 kind: Service metadata: name: "service-java-microservice" spec: ports: - port: 80 targetPort: 4567 protocol: TCP type: NodePort selector: app.kubernetes.io/name: java-microservice
Ejemplo de archivo de recursos de ingreso
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: "java-microservice-ingress" annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/load-balancer-name: apg2 alb.ingress.kubernetes.io/target-type: ip labels: app: java-microservice spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: "service-java-microservice" port: number: 80