En el artículo anterior Guía paso a paso para implementar y administrar KubernetesCubrimos los fundamentos de KubernetesSu arquitectura, componentes clave (como pods, implementaciones y servicios) y principios generales para la implementación y administración de clústeres. Ahora, profundizaremos en el trabajo con Vainas—las unidades ejecutables más pequeñas en KubernetesPara gestionar eficazmente su comunicación y disponibilidad, Kubernetes usos Servicios, cuyo propósito general fue mencionado anteriormente.
En este artículo, exploraremos la funcionalidad de los Servicios a través de ejemplos prácticos: sus tipos (ClusterIP, NodePort, LoadBalancer), configuraciones de manifiesto YAML y casos de uso para garantizar una comunicación estable entre los componentes de la aplicación.
Kubernetes Servicios revisados
Primero, recordemos qué Kubernetes Servicios Son. En resumen, son objetos que proporcionan acceso estable a las aplicaciones en un clúster, incluso cuando los pods cambian dinámicamente. De forma más completa, Kubernetes Servicios Son un mecanismo fundamental para garantizar una comunicación de red estable entre los componentes de la aplicación en un entorno de clúster en constante cambio. En pocas palabras, los servicios actúan como “puntos de entrada estables” A un grupo de pods, incluso si estos se recrean, escalan o mueven entre nodos. A continuación, se muestra una ilustración de los principales tipos de servicios en K8s:

Problemas abordados por Kubernetes Servicios:
Desde Pods en Kubernetes son efímeras (sus direcciones IP cambian durante los reinicios, el escalamiento o las actualizaciones), lo que crea desafíos para los componentes de la aplicación (por ejemplo, frontend y backend) que requieren un método de comunicación estable.
Kubernetes Los servicios resuelven estos problemas mediante las siguientes acciones:
- Identificadores fijos:Los servicios asignan una dirección IP estable (ClusterIP), DNS nombre o IP externa, independientemente del ciclo de vida de los Pods.
- Balanceo de carga:El tráfico se distribuye automáticamente entre los pods seleccionados mediante etiquetas (por ejemplo, `app: backend`).
- Actualización automática:Los servicios rastrean dinámicamente los cambios en el conjunto de Pods a través de EndpointSlices, actualizando la lista de instancias disponibles.
Nuestras Kubernetes Tipos de servicios con ejemplos
ClusterIP: para acceso interno a pods dentro del clúster
Configuración de ejemplo:
simple-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376Comando para crear el Servicio:
kubectl apply -f simple-service.yamlComprobación:
kubectl get services # Viewing ClusterIP
kubectl describe service/my-service # Details Service and EndpointsLoadBalancer está diseñado para el acceso público a través de un balanceador de carga en la nube.
Configuración de ejemplo:
# nodeport-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app.kubernetes.io/name: MyApp
ports:
- port: 80
targetPort: 9376
nodePort: 30007 # Optional (default: random port in range)
Comando para crear el Servicio:
kubectl apply -f nodeport-service.yamlAcceso:
curl http://:30007 # replace with node IP ExternalName está diseñado para vincularse a un recurso externo a través de DNS Nombre C.
Configuración de ejemplo:
# loadbalancer-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-loadbalancer
spec:
type: LoadBalancer
selector:
app.kubernetes.io/name: MyApp
ports:
- port: 80
targetPort: 9376Comando para crear el Servicio:
kubectl apply -f loadbalancer-service.yamlComprobando la IP externa:
kubectl get service/my-loadbalancer -o wide # Viewing EXTERNAL-IPEl servicio sin cabeza (sin ClusterIP) está diseñado para el acceso directo a los pods sin equilibrio de carga.
Configuración de ejemplo:
# externalname-service.yaml
apiVersion: v1
kind: Service
metadata:
name: external-db
spec:
type: ExternalName
externalName: my.database.example.comComando para crear el Servicio:
kubectl apply -f externalname-service.yamlUso:
Otros pods pueden acceder a `external-db` como DNS nombre
El servicio sin cabeza (sin ClusterIP) está diseñado para el acceso directo a los pods sin equilibrio de carga.
Ejemplo de configuración:
# headless-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-headless
spec:
clusterIP: None
selector:
app.kubernetes.io/name: MyApp
ports:
- port: 80
targetPort: 9376
Comando para crear el Servicio:
kubectl apply -f headless-service.yamlDNS comprobación:
nslookup my-headless.default.svc.cluster.local # Returns the IPs of all PodsEjemplos adicionales:
La configuración del servicio multipuerto está diseñada para simplificar la configuración de aplicaciones que requieren múltiples puertos.
Configuración:
# multi-port-service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-multi-port
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 8080
- name: metrics
protocol: TCP
port: 9090
targetPort: 9090comando:
kubectl apply -f multi-port-service.yamlLa configuración del servicio sin un selector (EndpointSlices manual) se utiliza para integrarse con recursos externos Kubernetes
Configuración del servicio:
# service-without-selector.yaml
apiVersion: v1
kind: Service
metadata:
name: my-external-service
spec:
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
La configuración de EndpointSlice está diseñada para una gestión flexible de puntos finales (incluidos sistemas externos):
Configuración:
# endpointslice.yaml
apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
name: my-service-1
labels:
kubernetes.io/service-name: my-external-service
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 9376
endpoints:
- addresses: ["10.4.5.6"]
- addresses: ["10.1.2.3"]comandos:
kubectl apply -f service-without-selector.yamlkubectl apply -f endpointslice.yamlComandos útiles:
Ver todos los servicios se utiliza para mostrar una lista de todos los servicios en el espacio de nombres actual:
kubectl get servicesLa visualización de puntos finales tiene como objetivo mostrar una lista de puntos finales: las direcciones IP y los puertos de los pods asociados con el servicio:
kubectl get endpointsDNS La verificación de un Servicio tiene como objetivo comprobar la DNS Resolución del nombre del servicio dentro de un Pod:
kubectl exec -it -- nslookup La eliminación de un servicio tiene como objetivo quitar el servicio del clúster:
kubectl delete service/PREGUNTAS MÁS FRECUENTES: Kubernetes Servicios
- Q1: ¿Qué es un Kubernetes ¿Servicio?
A1: un Kubernetes Un servicio es una abstracción que proporciona acceso estable a la red a un conjunto de pods. Los servicios garantizan una comunicación fiable entre los componentes, incluso cuando los pods se recrean, escalan o se mueven entre nodos. - P2: ¿Por qué se necesitan los servicios en Kubernetes?
A2: Los pods son efímeros, lo que significa que sus direcciones IP pueden cambiar durante los reinicios o el escalado. Los servicios solucionan esto proporcionando direcciones IP fijas. DNS nombres o direcciones externas, junto con equilibrio de carga y actualizaciones automáticas de puntos finales. - P3: ¿Cuáles son los principales tipos de servicios en Kubernetes?
A3: Los tipos de núcleo incluyen:
ClusterIP: acceso interno dentro del clúster
NodePort: expone el servicio en un puerto estático en cada nodo
LoadBalancer: se integra con los balanceadores de carga del proveedor de la nube para acceso externo
ExternalName: asigna un servicio a un externo DNS nombre
Servicio sin cabeza: acceso directo al pod sin equilibrio de carga - P4: ¿Cómo creo un Kubernetes ¿Servicio?
A4: Los servicios se definen en manifiestos YAML y se aplican mediante kubectl apply -f Usted especifica el tipo, el selector (etiquetas) y los puertos para configurar cómo se enruta el tráfico a los pods. - Q5: ¿Puede un servicio tener múltiples puertos?
A5: Sí. Los servicios multipuerto permiten exponer varios puertos del mismo conjunto de pods, lo cual es útil para aplicaciones que sirven HTTP, métricas y otros protocolos simultáneamente. - Q6: ¿Cómo puedo verificar que un servicio está funcionando?
A6: Utilice comandos como kubectl get services para enumerar los servicios, kubectl describe service/ Para ver detalles y nslookup dentro de un Pod para comprobar DNS Nuestro proceso de sublimación de tinta infunde la imagen directamente en el recubrimiento, dotando al producto final de una profundidad de color excepcional y una resolución de alta definición. - P7: ¿Qué pasa si necesito conectar un servicio a puntos finales externos?
A7: Puede crear un Servicio sin un selector y definir manualmente puntos finales a través de objetos EndpointSlice, lo que permite la integración con recursos externos. Kubernetes racimo. - Q8: ¿Cómo gestionan los servicios el equilibrio de carga?
A8: Los servicios distribuyen automáticamente el tráfico entrante entre los pods seleccionados según las etiquetas, lo que garantiza una carga uniforme y una alta disponibilidad dentro del clúster.