初探Service服务发现机制

发布于:2025-06-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

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

本实验到此结束!