En Kubernetes, un Service es una abstracción que expone una aplicación en ejecución sobre un conjunto de pods como un servicio de red. Proporciona un nombre DNS estable y balanceo de carga para los pods. Este tema explica cómo funcionan los Services de Kubernetes, describe consideraciones importantes y ofrece recomendaciones para elegir el tipo de Service adecuado.
Requisitos previos
Se requiere un clúster de ACK Serverless. Para más información, consulte Quick start for ACK Serverless.
Cómo funcionan los Services
Un selector de etiquetas identifica a qué pods se dirige un Service. Cuando el Service recibe tráfico, distribuye las solicitudes entre todos los pods cuyas etiquetas coinciden con el selector.
A continuación se muestran los tres tipos de Service y cuándo utilizar cada uno:
|
Tipo de Service |
Patrón de acceso |
Cuándo usarlo |
|
Cluster IP |
Solo dirección IP interna del clúster (predeterminado) |
Para exponer la aplicación a otras cargas de trabajo dentro del mismo clúster |
|
Node Port |
|
Acceso directo a nivel de nodo; no disponible para clústeres de ACK Serverless |
|
Server Load Balancer |
Instancia de SLB orientada a Internet o interna |
Para exponer la aplicación a usuarios externos o a consumidores internos de la VPC |
Para consultar la especificación completa de los Services de Kubernetes, visite Kubernetes Services.
Paso 1: Crear un Deployment
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la esquina superior derecha de la página Deployments, haga clic en Create from YAML.
-
Seleccione una plantilla de ejemplo o introduzca su YAML personalizado y, a continuación, haga clic en Create.
En este ejemplo, la plantilla de muestra corresponde a un Deployment de NGINX.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 # Replace with your image name and tag. ports: - containerPort: 80 # This port must be exposed in the service. En la lista de deployments, haga clic en el nombre de la aplicación de destino o en Details dentro de la columna Actions para consultar el estado del Deployment. La página de detalles de nginx-deployment-basic muestra su información básica: el espacio de nombres default, tanto el selector como las labels son app:nginx, la anotación es
deployment.kubernetes.io/revision:1y la política de actualización es RollingUpdate (incremento máximo del 25 % e indisponibilidad máxima del 25 %). El estado indica que 2 de 2 pods están listos, 2 se actualizaron y 2 están disponibles. En la lista de pods, ambos utilizan la imagen nginx:1.7.9, se encuentran en estado Running y tienen un recuento de reinicios de 0.
Paso 2: Crear un servicio
En el panel de navegación izquierdo de la página de administración del clúster, elija .
En la página Services, haga clic en Create.
-
En el cuadro de diálogo Create Service, configure los parámetros.
Parámetro
Descripción
Name
Introduzca un nombre para el servicio.
Tipo de Service
Seleccione un tipo de Service, lo cual determina cómo se accede al servicio. Opciones:
Cluster IP: expone el servicio en una dirección IP interna del clúster. Este tipo de servicio solo es accesible desde dentro del clúster. Es el tipo predeterminado.
NotaSolo puede configurar un Headless Service cuando el Service Type es Cluster IP. Un Headless Service le permite interactuar con otros mecanismos de detección de servicios sin depender de la implementación de Kubernetes.
Node Port: expone el servicio en un puerto estático (el NodePort) de la dirección IP de cada nodo. Un Service de tipo NodePort enruta el tráfico hacia un Service de tipo ClusterIP, el cual se crea automáticamente. Puede acceder a un Service de tipo Node Port desde fuera del clúster mediante una solicitud a
<NodeIP>:<NodePort>.NotaSolo los clústeres de ACK admiten NodePort. Los clústeres de ACK Serverless no lo admiten.
Server Load Balancer: utiliza una instancia de Alibaba Cloud Server Load Balancer (SLB) para exponer el servicio. Puede elegir exponerlo a través de Internet o únicamente dentro de una red privada. Un load balancer puede enrutar tráfico hacia Services de tipo NodePort y ClusterIP.
Create SLB Instance: haga clic en Modify para cambiar la especificación de la instancia de SLB.
Use Existing SLB Instance: seleccione una instancia de SLB de la lista de instancias existentes.
NotaEl tipo Load balancer admite crear una nueva instancia de SLB o utilizar una existente. Varios Services de Kubernetes pueden compartir la misma instancia de SLB, sujetos a los siguientes límites:
Si utiliza una instancia de SLB existente, sus listeners actuales se sobrescriben.
No reutilice una instancia de SLB creada automáticamente por otro servicio, ya que esto podría provocar una eliminación accidental.
Cuando varios servicios reutilizan la misma instancia de SLB, asegúrese de que los puertos de listener del frontend sean distintos para evitar conflictos de puertos.
Al reutilizar una instancia de SLB, Kubernetes emplea los nombres de los listeners y de los grupos vServer como identificadores únicos. No modifique estos nombres.
No es posible reutilizar una instancia de SLB entre distintos clústeres.
External Traffic Policy
Establezca la política de tráfico externo. Para ver una comparación detallada, consulte Comparison of external traffic policies.
Local: el tráfico se enruta únicamente a los pods del mismo nodo que recibió la solicitud.
Cluster: el tráfico se puede reenviar a pods ubicados en otros nodos del clúster.
NotaSolo puede configurar la External Traffic Policy cuando el Tipo de Service es Node Port o Server Load Balancer.
Backend
Seleccione la aplicación de backend a la que el servicio enviará el tráfico. Si no asocia el servicio con un backend, Kubernetes no crea el objeto Endpoints correspondiente. Para más detalles, consulte Services without selectors.
Port Mapping
Agregue un puerto de servicio (el campo
porten el archivo YAML del servicio) y un puerto de contenedor (el campotargetPorten el archivo YAML del servicio). El puerto del contenedor debe coincidir con el puerto expuesto por los pods del backend.Anotaciones
Agregue una anotación para configurar parámetros del load balancer. Puede seleccionar Custom Annotation o Alibaba Cloud Annotation. Por ejemplo, la anotación
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2establece el ancho de banda máximo del servicio en 2 Mbit/s para controlar el tráfico. Para conocer más parámetros, consulte Configure a Classic Load Balancer (CLB) by using annotations.Labels
Agregue una etiqueta para identificar el servicio.
-
Haga clic en Create.
El servicio recién creado aparece en la lista de la página Services.
En la página Services, haga clic en Update o en Delete dentro de la columna Actions del Service que desea gestionar.
NotaEn la página de detalles del servicio, haga clic en el enlace junto a External Endpoint para acceder a la aplicación.