kubernetes&&基础学习3
Service
Service的概念
kubernetes Service定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略,通常称为微服务。
这一组Pod能够被Service访问到,通常是通过Label Selector
通过Label标签,监控一组Pod
Service能够提供负载均衡的能力,但是在使用上有以下的限制:
- 只提供4层负载均衡能力,而没有7层功能,但有时我们可能需要更多的匹配规则来转发请求,这点上4层负载均衡是不支持的
Service的类型
Service在k8s中有以下四种类型:
- ClusterIp : 默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP
- NodePort : 在ClusterIP 的基础上为每台机器上绑定一个端口,这样就可以通过NodeIP:NodePort来访问该服务
- LoadBalancer :在NodePort的基础上,借助cloud provider创建一个外部负载均衡器,并将请求转发到NodeIP:NodePort
- ExternalName : 把集群外部的服务引入到集群内部来,在集群内部直接使用,没有任何类型代理被创建,这只有kubernetes 1.7或更高版本的kube-dns才支持
VIP和Service代理
代理模式的分类
# 查看所有svc信息
kubectl get svc
ClusterIP
实现过程
创建Deployment
为Deployment绑定svc
# 查询全部svc信息
kubectl get svc
# 查询ipvs信息
ipvsadm -Ln
# 通过指定文件的方式删除对应的svc
kubectl delete -f svc.yaml
Headless Service
NodePort
LoadBalancer
需要花钱
ExternalName
引入外部服务集群至服务内部,令内部服务可以使用外部负载集群。如引入mysql集群。
7层代理
部署Ingress-Nginx
# 下载Ingress的yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
# 使用yaml文件创建Ingress-nginx的Pod
kubectl apply -f mandatory.yaml
# 下载svc的yaml文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
# 运行
kubectl apply -f service-nodeport.yaml
# 查看当前ingress规则
kubectl get ingress
Ingress HTTPS 代理访问
Nginx 进行 BasicAuth
Nginx进行重写