继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

通过Service来暴露你的应用

慕神8447489
关注TA
已关注
手记 1273
粉丝 174
获赞 956

目标

  • 了解什么是Kubernetes Services

  • 了解什么是Kubernetes Labels

  • 将一个应用暴露在Kubernetes之外

Kubernetes Services
每个Pod都有一个在集群中唯一的IP的,但是这些IP没有暴露在Kubernetes之外的。考虑到Pod可能会在某个时间点被中断,被删除或者被其他Pod所替换,我们需要一种机制来让Pod和应用能够自动的发现对方。Kubernetes通过将一个或多个Pod组合成Service的方式实现这种机制。一个Kubernetes Service代表的是一系列Pod构成的一个逻辑集合的抽象层,它为这些Pod提供了负载均衡,服务发现和外部通信暴露功能。
这个抽象层允许我们将Pod暴露给来自集群外部的流量。Service有它自己的集群内唯一IP和暴露的端口用来接收外部流量。如果你要将Service暴露给外部,有下面几种方式:

  • LoadBalancer - 提供一个公共的IP地址(比较典型的场景是你的Kubernetes运行在GCP或者AWS上)

  • NodePort - 将服务暴露在集群中的每个节点上的同一个端口上(通过NAT的方式,Kubernetes集群和Minikube都可以使用)

Service架构

https://img.mukewang.com/5c4c133500018dd706060463.jpg

Service可以对发送到Pod上的流量进行负载均衡。当我们的Service是由某个特定的Deployment所构成的Pod组合成的时候,这个功能非常有用(我们的实例会在下一个模块中使用这个功能,因为我们需要多个实例同时运行)

Service同时负责对集群内的服务发现进行相关的处理(详情请见 Accessing the Service)。例如我们可以允许一个前端服务(比如web server)可以接收来自后端服务(数据库服务之类)的请求而不需要在一个Pod内。

Service通过Label Selector(标签选择器)来匹配一系列的Pod,Label Selector允许在Label上做一系列的逻辑操作。

你可以在用kubectl run命令启动Deployment的时候通过添加创--expose参数来建一个Service

Label是附加在对象(比如Pod)上的键值对,你可以把他们当做是社交媒体上面的标签(类似话题?)。
Label对使用者来说是具体特别含义的,因此可以用来组织对象,类似:
生产环境(production, test, dev)
应用版本((beta, v1.3)
服务或者server类型(frontend, backend, database)

Labels

https://img4.mukewang.com/5c4c1325000178f908390807.jpg

Label可以在对象创建的时候设置给它,也可以在其他任意时间修改。kubectl run命令会设置一些默认的Label/Label Selector在新的Pod或者Deployment上。Label和Label Selector之间的关联定义了Deployment和它创建的Pod之间的关联。现在我们可以在Service的帮助下暴露我们的应用了,并且可以给它们设置一些Label



作者:JeryZen
链接:https://www.jianshu.com/p/a2e54c681fda


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP