初探Service服务发现机制
1.Service简介
Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。
主要功能:服务发现和负载均衡。
Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型
2.Endpoints简介
Endpoints是一种Kubernetes资源,用来记录一个Service对应的所有健康且就绪Pod的访问地址。
包括Pod 的 IP 和端口列表。
Endpoints实际上是Service后端的可访问Pod端点集合,其中的Pod必须处于运行状态。
3.实验基础和前置条件
本实验以Kubernetes集群环境搭建与初始化_集群初始化-CSDN博客为基础和前置条件。
4.Service的负载均衡机制
4.1kube-proxy的代理模式
4.1.1iptables代理模式
4.1.2 IPVS代理模式
4.2 负载均衡策略
(1)、轮询(round-robin,rr)
(2)、最少连接(least connection,lc)
(3)、目标哈希(destination hashing,dh)
(4)、源哈希(source hashing,sh)
(5)、预计延迟时间最短(shortest expected delay)
(6)、从不排队(never queue,nq)
4.3会话保持
首次将某个客户端来源的IP发起的请求转发到后端的某个Pod,之后来自该IP的请求都将转发到该Pod。
5.通过Endpoints理解Service的工作机制
5.1创建定义Deployment对象的配置文件
创建Deployment对象的配置文件nginx-deploy.yaml 。
5.2 基于上述YAML文件创建Deployment对象
基于上述配置文件nginx-deploy.yaml创建Deployment对象,具体命令如下所示。
kubectl apply -f ch05/nginx-deploy.yaml
5.3 创建定义Service对象的配置文件
创建service对象的配置文件nginx-service.yaml
5.4 基于上述YAML文件创建service对象
基于上述配置文件nginx-service.yaml创建service对象
kubectl create -f ch05/nginx-service.yaml
5.5 查看该Service对象的ClusterIP地址和Service端口
执行以下命令,查看该Service对象的ClusterIP地址和Service端口。
kubectl get service nginx-svc
5.6 通过ClusterIP地址和Service端口进行访问
执行以下命令,测试通过ClusterIP地址和Service端口访问后端Pod承载的应用程序。
curl 10.104.123.96:8080
5.7 查看Endpoints对象列表
执行以下命令,查看Endpoints对象列表。
kubectl get endpoints
5.8 删除Service和Deployment
执行以下命令,删除我们创建的Service和Deployment对象,以恢复实验环境。
kubectl delete -f ch05/nginx-service.yaml
kubectl delete -f ch05/nginx-deploy.yaml
6.验证Service服务发现机制
6.1创建同时包含Deployment和Service的资源定义文件
创建同时包含Deployment和Service的资源定义文件nginx-deploy-service.yaml 。
6.2 基于上述YAML文件创建Deployment和Service对象
基于上述配置文件nginx-deploy-service.yaml创建Deployment和Service对象,具体命令如下所示。
kubectl apply -f ch05/nginx-deploy-service.yaml
6.3 验证基于环境变量的服务发现机制
6.3.1基于tomcat:8.0-alpine镜像创建一个Pod
执行以下命令,基于tomcat:8.0-alpine镜像创建并运行一个Pod。
kubectl run tomcat --image=tomcat:8.0-alpine
执行以下命令,查看Pod运行情况
kubectl get pods
6.3.2 监查看Pod的环境变量
执行以下命令,列出该Pod的环境变量,并筛选出包含NGINX的环境变量。
kubectl exec tomcat -- printenv | grep NGINX
6.3.3 恢复实验环境
执行以下命令,为了恢复实验环境,删除我们所创建的Pod对象tomcat。
kubectl delete pod tomcat
6.4验证基于 DNS 的服务发现机制
6.4.1基于busybox:latest镜像创建一个Pod
执行以下命令,运行一个基于busybox:latest镜像的Pod,并进入交互式伪终端。
kubectl run mybusybox --image=busybox:latest -i --tty
6.4.2 DNS域名解析验证
通过交互式伪终端,在Pod内部执行以下命令,进行DNS域名解析验证。
nslookup nginx-svc
通过交互式伪终端,在Pod内部执行以下命令,通过域名进行下载和访问。
wget nginx-svc.default.svc.cluster.local:8080
cat index.html
6.4.3 恢复实验环境
执行以下命令,为了恢复实验环境,删除我们所创建的Pod对象mybusybox。
kubectl delete pod mybusybox
本实验到此结束!