Explicación detallada del servicio K8S


Video de referencia : https://ke.qq.com/user/index/index.html#/plan/cid=1709963&term_id=102815140

1. Concepto

1.1.Service存在的意义

1. Evitar que el pod pierda la conexión (descubrimiento de servicios)
2. Definir un conjunto de estrategias de acceso al pod (equilibrio de carga)

1.2.三种常用类型

(1) ClusterIP (utilizado dentro del clúster)

De forma predeterminada, asigne una dirección IP estable, a saber, VIP, a la que solo se puede acceder dentro del clúster

(2) NodePort (aplicación expuesta)

Habilite un puerto en cada nodo para exponer el servicio, al que se puede acceder fuera del clúster a través de NodeIP: NodePort

(3) LoadBalancer (aplicación expuesta externamente, adecuada para nube pública)

Al igual que en NodePort, se habilita un puerto en cada nodo para exponer los servicios. Además, K8s solicita al equilibrador de carga de la plataforma de nube subyacente que agregue cada [IP de nodo]: [NodePort] como backend.

Dos, modo proxy de servicio

Inserte la descripción de la imagen aquí
El servicio es implementado por kube-proxy

Implemente reglas de equilibrio de carga de dos maneras, a saber, iptables e IPVS

2.1.iptables模式

Ver reglas

iptables-save |grep <Service Name>

Proceso de implementación

接受流量->概率分配请求->根据分配请求转发到实际Pod

2.2.IPVS模式【推荐使用】

2.2.1.修改代理模式为ipvs

Cargar módulos del kernel relacionados con ip_vs

modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

Establezca el modo en ipvs

kubectl edit configmaps kube-proxy -nkube-system

Inserte la descripción de la imagen aquí
Elimina el Pod de kube-proxy para que el archivo de configuración sea efectivo

kubectl delete pod kube-proxy-9lvgh -nkube-system

Verifique el registro del Pod para ver que se haya cambiado al modo ipvs
Inserte la descripción de la imagen aquí

ipvsadm -Ln		#查看规则

Inserte la descripción de la imagen aquí

Tres, ejemplo

3.1.tomcat-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
spec:
  type: NodePort
  ports:
  - port: 8080
    name: service-port
    nodePort: 31005
  - port: 8005
    name: shutdown-port
  selector:
    tier: frontend

kubectl apply -f tomcat-service.yaml

3.2.解释

Se define un servicio llamado tomcat-service, los puertos de servicio son 8080 y 8005, y el NodePort se usa para brindar servicios al mundo exterior. Todos los ejemplos de Pod con la etiqueta "tier = frontend" pertenecen a él.

3.3.验证

kubectl get svc

Tomcat-service asigna un ClusterIP de 10.1.9.124, los puertos virtuales del servicio son 8080 y 8005, 8080 especifica el puerto nodePort como 31005 y 8005 no está especificado, K8S le asignará un puerto al azar.
Inserte la descripción de la imagen aquí

3.3.1.集群内通过ClusterIP+虚端口可以访问服务

Inserte la descripción de la imagen aquí

3.3.2.集群外通过NodeIP+nodePort端口可以访问Service服务

Inserte la descripción de la imagen aquí

kubectl get endpoints

10.244.1.15 es la dirección IP del Pod, y el puerto 8080 es el puerto expuesto por el contenedor, al que se puede acceder a través del número de puerto PodIP +
Inserte la descripción de la imagen aquí

kubectl get svc tomcat-service -o yaml

Puede ver información más detallada sobre el servicio, como nombre, espacio de nombres, clusterIP, puerto virtual

El puerto es el puerto de ClusterIP, que se utiliza para acceder dentro del clúster;
targetPort es el número de puerto expuesto por el contenedor que proporciona el servicio. Si el targetPort no se especifica en el archivo yaml, el targetPort predeterminado es el mismo que el puerto

Inserte la descripción de la imagen aquí

3.3.3.在Pod里面,建议通过ServiceName.Namespace.svc.cluster.local访问

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/anqixiang/article/details/108007552
Recomendado
Clasificación