服务发现与负载均衡机制-Service

服务发现与负载均衡机制-Service
什么是Service?
 
Service是逻辑上的一组Pod,一种可以访问Pod的策略,而且其他Pod可以通过Service访问到这个Service代理的Pod,可以把它理解为传统架构中的反向代理。
 
相对于Pod而言,Service有一个固定的名称,不会发生改变,并且提供了负载均衡的功能。
 
通过Service的定义,可以对客户端应用屏蔽后端Pod实例数量及Pod IP地址的变化,通过负载均衡策略实现请求到后端Pod实例的转发,为客户端应用提供一个稳定的服务访问入口地址。
 
Service实现的是微服务架构中的几个核心功能:全自动的服务注册、服务发现、服务负载均衡等。
 
创建一个Service实例
 
apiVersion: v1
 
kind: Service
 
metadata:
 
  labels:
 
    app: nginx-svc
 
  name: nginx-svc
 
spec:
 
  ports:
 
  - name: http #service端口名称
 
    port: 80 #service自己的端口
 
    protocol: TCP #支持TCP UDP SCTP等
 
    targetPort: 80 #后端应用接口
 
  - name: https
 
    port: 443
 
    protocol: TCP
 
    targetPort: 443
 
  selector:
 
    app: nginx  #这个就是匹配规则,代理标签中有nginx的后端服务器
 
  sessionAffinity: None
 
  type: ClusterIP
 
执行上面的yaml文件,创建一个service
 
[root@k8s-master01 ——]# kubectl create -f nginx-svc.yaml 
 
service/nginx-svc created
 
[root@k8s-master01 ——]# kubectl get svc
 
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
 
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP          9d
 
nginx-svc    ClusterIP   10.110.150.87   <none>        80/TCP,443/TCP   15s
 
我们通过访问svc地址就能访问到后端的nginx
 
[root@k8s-master01 ——]# curl 10.110.150.87
 
<!DOCTYPE html>
 
<html>
 
<head>
 
<title>Welcome to nginx!</title>
 
<style>
 
html { color-scheme: light dark; }
 
body { width: 35em; margin: 0 auto;
 
font-family: Tahoma, Verdana, Arial, sans-serif; }
 
</style>
 
</head>
 
<body>
 
<h1>Welcome to nginx!</h1>
 
<p>If you see this page, the nginx web server is successfully installed and
 
working. Further configuration is required.</p>
 
<p>For online documentation and support please refer to
 
<a href="http://nginx.org/">nginx.org</a>.<br/>
 
Commercial support is available at
 
<a href="http://nginx.com/">nginx.com</a>.</p>
 
<p><em>Thank you for using nginx.</em></p>
 
</body>
 
</html>
 
在同一个namespace中,其他Pod访问svc只需要curl http://nginx-svc就可以
 
跨namespace的话,需要在svc名称后加。namespace名称就可以了,使用需谨慎,没必要不推荐
 
不建议通过IP地址访问,因为IP不是固定的,删除或重建后IP会随机生成

推荐阅读