Análisis de tipos de servicios de Kubernrtes (tipos de servicios)
Charla de operación y mantenimiento para principiantes de Scofield
Primera foto
En un clúster de Kubernetes, el servicio selecciona el pod correspondiente a través del selector de etiquetas y luego reenvía la solicitud. Al ver una animación, puede experimentar directamente el selector de notas adhesivas
La relación entre pod, endpoints y servicio
1. Por ejemplo, veamos
primero el archivo de implementación y, principalmente, la parte de comentarios. Debido a que el archivo es demasiado largo, algunos campos del archivo yaml se eliminan en este artículo.
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: gogs
labels: # 定义StatefulSet的标签,为后面Service选择器提供标签
app: gogs
spec:
serviceName: gogs
replicas: 1
selector:
matchLabels: # 标签选择器,StatefulSet通过该标签选择pod
app: gogs
template:
metadata:
labels: # 定义pod的标签
app: gogs
spec:
terminationGracePeriodSeconds: 180
.......
---
apiVersion: v1
kind: Service
metadata:
name: gogs
labels:
app: gogs
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
selector: # 标签匹配器,Service通过该标签匹配到对应的Pod
app: gogs
2. Ver los resultados de ejecución
[root@k8s-node001 ~]# kubectl get po,ep,svc
NAME READY STATUS RESTARTS AGE
pod/gogs-0 1/1 Running 0 3d1h
NAME ENDPOINTS AGE
endpoints/gogs 100.68.150.197:3000 3d1h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d1h
3. Ver pod, puntos finales, detalles del servicio a través de kubectl describe
4. La información relacionada se puede ver en la figura anterior:
1. La IP de Pod y Endpoint es la misma. Endpoint se usa para mapear aquellos pods que pueden proporcionar servicios al mundo exterior. Si el estado de ejecución del pod no es, No se producirá el punto final
2. La relación entre StatefulSet y Pod se relaciona a través del selector de etiquetas
3. El servicio puede entenderse simplemente como un LoadBalancer integrado en Kubernetes, y su función es proporcionar equilibrio de carga para varios Pods.
4. El servicio usa la aplicación de etiquetas: gogs para que coincida con el Pod que necesita para equilibrar la carga
Bueno, una breve introducción a la relación entre pod, endpoints y servicio. A continuación, introduzcamos varios tipos de servicios en Kubernetes.
ClusterIP
ServiceType expuesto por el servicio IP del clúster interno, seleccione el valor, el servicio solo se puede acceder dentro del clúster, que es el
inconveniente predeterminado : el servicio solo se puede acceder dentro del clúster
castañas
apiVersion: v1
kind: Service
metadata:
name: gogs-clusterip
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: 3000
selector:
app: gogs
resultado
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gogs-clusterip ClusterIP 10.104.1.9 <none> 3000/TCP 2m11s
Se puede ver que 10.104.1.9 es una IP dentro del clúster y no se puede acceder fuera del clúster.
NodePort
Si el campo de tipo se establece en NodePort, Kubernetes asignará puertos en el rango especificado (predeterminado: 30000-32767). Cada nodo utilizará como proxy el puerto asignado aleatoriamente al servicio.
Levantar castañas
apiVersion: v1
kind: Service
metadata:
name: gogs
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
selector:
app: gogs
resultado
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
gogs NodePort 10.106.102.74 <none> 3000:30526/TCP 3d2h
Como puede ver aquí, el puerto 30526 se asigna aleatoriamente y ahora se puede acceder al servicio a través de la IP + 30526 de cualquier nodo del clúster.
Ingreso
Ingress expone rutas HTTP y HTTPS desde fuera del clúster a servicios en el clúster. El enrutamiento del tráfico se controla mediante reglas definidas en el recurso Ingress.
Ingress se puede configurar como un servicio para proporcionar URL accesibles desde el exterior, equilibrar la carga del tráfico, terminar SSL / TLS y proporcionar capacidades de alojamiento virtual basadas en nombres. El controlador Ingress generalmente es responsable de implementar Ingress a través de un equilibrador de carga, aunque también se puede configurar con enrutadores de borde u otras interfaces para ayudar a procesar el tráfico.
castaña
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gogs-gogs
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: gogs.test.cn
http:
paths:
- path: /
backend:
serviceName: gogs
servicePort: 3000
resultado
NAME CLASS HOSTS ADDRESS PORTS AGE
gogs-gogs <none> gogs.test.cn 10.26.25.21 80 3d19h
Ahora puede acceder a gogs a través del nombre de dominio gogs.test.cn.
Tenga en cuenta que gogs.test.cn necesita agregar resolución DNS a la IP de la máquina donde se encuentra el ingreso.
LoadBalancer
Al crear un servicio, puede optar por crear automáticamente un equilibrador de carga de red en la nube. Esto proporciona una dirección IP de acceso externo que puede distribuir el tráfico a los puertos correctos en los nodos del clúster. LoadBalancer generalmente lo proporcionan los proveedores de nube pública y no necesita ser autoconstruido, como se presenta aquí.
PD: los artículos de seguimiento se sincronizarán con dev.kubeops.net
Nota: Las imágenes del artículo son de Internet. Si hay alguna infracción, comuníquese conmigo para eliminarla a tiempo.