通过Service访问应用 (1)
目录
通过Service访问应用
通过Pod IP访问应用
通过ClusterIP Service在集群内部访问
通过Service访问应用
通过之前的操作,应用部署完成了,我们的Demo网站已经成功启动了,那么如何访问网站呢?
通过Pod IP访问应用
我们可以通过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也变得毫无意义。那么我们应该到底如何来访问我们的应用呢?
通过ClusterIP Service在集群内部访问
Kubernetes服务(Service)就是为此而抽象出来的,为了让应用能够稳定的输出,Service应运而生。
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: #当前端口
targetPort: #目标端口
接下来,我们来执行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发布
通过Service访问应用 (1)的更多相关文章
- 通过 Service 访问 Pod - 每天5分钟玩转 Docker 容器技术(136)
本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...
- k8s通过service访问pod(五)--技术流ken
service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...
- k8s Nodeport方式下service访问,iptables处理逻辑(转)
原文 https://www.myf5.net/post/2330.htm k8s Nodeport方式下service访问,iptables处理逻辑 2017年07月11日 0条评论 976次阅读 ...
- 通过 Service 访问 Pod
我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通过动态创建和销毁 Pod 来保 ...
- 通过Service访问应用 (2)
目录 通过NodePort Service在外部访问集群应用 通过LoadBalancer Service在外部访问集群应用 Microsoft SQL Server数据库部署 为了便于理解和学习,请 ...
- linux运维、架构之路-K8s通过Service访问Pod
一.通过Service访问Pod 每个Pod都有自己的IP地址,当Controller用新的Pod替换发生故障的Pod时,新Pod会分配到新的IP地址,例如:有一组Pod对外提供HTTP服务,它们的I ...
- 通过 Service 访问 Pod【转】
本节开始学习 Service.我们不应该期望 Kubernetes Pod 是健壮的,而是要假设 Pod 中的容器很可能因为各种原因发生故障而死掉.Deployment 等 controller 会通 ...
- k8s通过service访问pod(五)
service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...
- k8s通过Service访问Pod
如何创建服务 1.创建Deployment #启动三个pod,运行httpd镜像,label是run:mcw-httpd,Seveice将会根据这个label挑选PodapiVersion: apps ...
随机推荐
- 基于Spring框架应用的权限控制系统的研究和实现
摘 要: Spring框架是一个优秀的多层J2EE系统框架,Spring本身没有提供对系统的安全性支持.Acegi是基于Spring IOC 和 AOP机制实现的一个安全框架.本文探讨了Acegi安全 ...
- eclipse导入码云-GIT项目
1.首先找到项目源码地址我随便找到一个git地址 :https://gitee.com/mingSoft/MCMS 2.打开eclipse空白处右键导入项目搜索git. 3.将第一步复制的git地址复 ...
- Oracle创建设置查询权限用户
用户创建的可以参考博客: https://blog.csdn.net/u014427391/article/details/84889023 Oracle授权表权限给用户: 语法:grant [权限名 ...
- 算法与数据结构基础 - 字典树(Trie)
Trie基础 Trie字典树又叫前缀树(prefix tree),用以较快速地进行单词或前缀查询,Trie节点结构如下: //208. Implement Trie (Prefix Tree)clas ...
- 从头开始制作OJ-在线IDE的搭建
大家好,我是Fred913. 之前,我看过各种OJ(OpenJudge) 但是,还是没有自己做的好. 所以,我就来写了这篇教程. 环境 这次,我打算使用这些:PHP 5.6 Nginx/Apache ...
- DFS-深度优先算法解决迷宫问题
/*main.cpp*/#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; int sr, sc ...
- Mina各组件介绍
Mina各组件介绍 上一篇文章已经系统的介绍了Mina的运行流程,Apache推出的Mina性能上很是高效,上章节我们知道内部有很多的类,各个类之间的依赖也是很多,他们之家都是相互依赖. 下面主要看看 ...
- OpenStack Telemetry系统架构及实践
1. 概述 早期OpenStack的计量功能由Ceilometer项目负责,后来Ceilometer一分为四,每个项目负责一个方面的工作.不得不说这是OpenStack开发中的一个特色,比如Cinde ...
- springboot的mybatis的xml相关的配置
POM文件的配置: mybatis.type-aliases-package=com.handsight.platform.fras mybatis.mapper-locations=classpat ...
- 记录一则LOCAL_LISTENER的问题
有网友反映,他在一套Oracle的测试环境中配置有两个监听,分别监听不同端口. 目前想把环境上的一套数据库同时注册到这两个监听,他将数据库参数local_listener和tnsname.ora文件配 ...