Directorio de artículos
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
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
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
ipvsadm -Ln #查看规则
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.
3.3.1.集群内通过ClusterIP+虚端口可以访问服务
3.3.2.集群外通过NodeIP+nodePort端口可以访问Service服务
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 +
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