经过Service访问应用 html
经过Pod IP访问应用 前端
经过ClusterIP Service在集群内部访问 数据库
经过以前的操做,应用部署完成了,咱们的Demo网站已经成功启动了,那么如何访问网站呢?api
咱们能够经过Pod IP来访问以前部署的网站,可是前提是咱们须要知道Pod IP。咱们能够经过“kubectl get”命令的参数“-o wide”来输出相关的信息,好比Pod IP:浏览器
kubectl get pods -lapp=demo -o wide
若是网络是通畅的,那么咱们能够在任意的节点上访问咱们的应用,如:服务器
curl --head http://10.0.2.12
咱们使用curl以get方式请求demo应用,返回请求头为200,那么表示咱们已经成功访问了Demo。若是你还不太相信,咱们能够经过安装了UI界面的CentOS节点服务器的浏览器上访问这些Pod IP,以下所示:网络
虽然咱们经过Pod IP成功的访问到了应用,可是Pod有生老病死,若是“死”了呢,咱们如何访问?Deployment会重建么?咱们来试一试:架构
kubectl delete pods -lapp=demo kubectl get pods -lapp=demo -o wide
很不幸的是,如上图所示,POD IP变掉了。那么意味着POD IP会随着POD的生老病死而发生变化。并且,不只存在这个问题,若是咱们直接使用POD IP,那么多个POD也变得毫无心义。那么咱们应该到底如何来访问咱们的应用呢?app
Kubernetes服务(Service)就是为此而抽象出来的,为了让应用可以稳定的输出,Service应运而生。curl
Service在Kubernetes中是一个抽象的概念,它定义了一组逻辑上的Pod和一个访问它们的策略(一般称之为微服务)。Service是经过标签选择器来绑定一组Pod 的Endpoints(端点)对象,当Pod的IP发生变化,Endpoints也随之变化。当Service接受到请求时,就能经过EndPoints找到请求转发的目标Pod地址。也就是说,一般状况下,Service定义了集群IP和端口,EndPoints则维护了一组Pod IP和端口。
了解了这些,接下来咱们就使用ClusterIP Service来访问刚才的Demo应用。
ClusterIP Service是默认的Service类型,其经过集群的内部IP暴露服务,所以仅能在集群内部访问,经常使用于数据库等应用。
这里,咱们定义一个简单的Service集群IP配置:
apiVersion: v1 kind: Service #资源类型 metadata: #标准元数据 name: demo-service #服务名称 spec: #规范定义 type: ClusterIP #服务类型,不填写此字段则默认为ClusterIP类型,也就是集群IP类型 selector: #标签选择器 app: demo #标签 ports: #端口 - protocol: TCP #协议,可以支持TCP和UDP port: 80 #当前端口 targetPort: 80 #目标端口
接下来,咱们来执行Service的建立而且分别查询了Service和Endpoints:
kubectl create -f clusterIPService.yaml kubectl get services demo-service -o wide kubectl get endpoints demo-service -o wide
如上图所示,咱们建立了集群IP为“11.13.47.67”的Service,端口为80(一般状况下,咱们将port和targetPort设置为相同的值)。同时咱们经过Endpoints列表看到,Endpoints自动绑定了5个Pod IP。接下来咱们试试在集群内(节点上)访问:
注意:若是咱们须要在建立时设置Service固定IP该如何去设置呢?能够经过字段“spec.clusterIp”进行设置,值须要符合Service IP段要求。
浏览器很是完美的呈现了Demo。在集群内是能够访问了,若是咱们提供对外服务呢?好比咱们但愿咱们的Demo被其余电脑访问,以得到用户的赞扬,老板的好评,那么该如何处理呢?咱们下一篇再来分析!
开源导入导出通用库Magicodes.ExporterAndImporter发布
原文出处:https://www.cnblogs.com/codelove/p/11506881.html