Artigo Diretório
Vídeo de referência : https://ke.qq.com/user/index/index.html#/plan/cid=1709963&term_id=102815140
1. Conceito
1.1.Service存在的意义
1. Impedir que o pod perca a conexão (descoberta de serviço)
2. Defina um conjunto de estratégias de acesso ao pod (balanceamento de carga)
1.2.三种常用类型
(1) ClusterIP (usado dentro do cluster)
Por padrão, atribua um endereço IP estável, ou seja, VIP, que só pode ser acessado dentro do cluster
(2) NodePort (aplicativo exposto externamente)
Habilite uma porta em cada nó para expor o serviço, que pode ser acessado fora do cluster por meio de NodeIP: NodePort
(3) LoadBalancer (aplicativo exposto externamente, adequado para nuvem pública)
Semelhante ao NodePort, uma porta é habilitada em cada nó para expor serviços. Além disso, o K8s solicita que o balanceador de carga da plataforma de nuvem subjacente adicione cada [Node IP]: [NodePort] como um back-end
Dois, modo de proxy de serviço
O serviço é implementado por kube-proxy
Implementar regras de balanceamento de carga de duas maneiras, ou seja, iptables e IPVS
2.1.iptables模式
Ver regras
iptables-save |grep <Service Name>
Processo de implementação
接受流量->概率分配请求->根据分配请求转发到实际Pod
2.2.IPVS模式【推荐使用】
2.2.1.修改代理模式为ipvs
Carregar módulos de kernel relacionados ao ip_vs
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
Defina o modo para ipvs
kubectl edit configmaps kube-proxy -nkube-system
Exclua o Pod do kube-proxy para tornar o arquivo de configuração efetivo
kubectl delete pod kube-proxy-9lvgh -nkube-system
Verifique o log do pod para ver se ele foi alterado para o modo ipvs
ipvsadm -Ln #查看规则
Tres exemplo
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.解释
Um serviço denominado tomcat-service é definido, as portas de serviço são 8080 e 8005 e o NodePort é usado para fornecer serviços para o mundo externo. Todos os exemplos de pod com o rótulo "tier = frontend" pertencem a ele.
3.3.验证
kubectl get svc
O serviço Tomcat atribui um ClusterIP de 10.1.9.124, as portas virtuais do serviço são 8080 e 8005, 8080 especifica a porta nodePort como 31005 e 8005 não é especificado, K8S atribuirá aleatoriamente uma porta a ela.
3.3.1.集群内通过ClusterIP+虚端口可以访问服务
3.3.2.集群外通过NodeIP+nodePort端口可以访问Service服务
kubectl get endpoints
10.244.1.15 é o endereço IP do Pod e a porta 8080 é a porta exposta pelo contêiner, que pode ser acessada por meio do PodIP + número da porta
kubectl get svc tomcat-service -o yaml
Você pode ver informações mais detalhadas sobre o serviço, como nome, namespace, clusterIP, porta virtual
A porta port é a porta do ClusterIP, que é usada para acesso dentro do cluster;
targetPort é o número da porta exposto pelo contêiner que fornece o serviço. Se targetPort não for especificado no arquivo yaml, o targetPort padrão é o mesmo que a porta