首页 » 翻译 » Kubernetes » 正文

CKA 认证系列课程笔记12 services NodePort

kubernetes 中服务 这个对象的出现是为了解决一个问题,那就是pod 的不稳定性,因为pod 会因为各种原因删除,创建,更新, 所以pod 的IP是变动的

例如,我们创建了一个Mysql 的pod , 我们如果使用pod 的IP地址进行通信,那么如果这个pod 发生了变化,我们是无法自动获取到新的IP地址的,所以服务就出现了

service1

 

Service 是在pod 前边的一层,service的地址是不会变的,也就是说,我们只需要对应的给mysql 的pod 创建一个service , 那么 , 无论pod 的ip 发生什么变化,我们都不需要关心,因为service 会监听pod的新地址,并把我们的请求发送到正确的地址

我们来看一下具体的三种类型的Service 类型,分别是: NodePort , ClusterIP,LoadBalancer

service2
先说一下NodePort:

如下图所示,NodePort 这个service 其实就是 同时监听 我们的Pod 和 物理主机, 把物理主机的30000-32767 端口转发到 Pod 的80端口

这样,当我们请求物理主机的30000-32767端口的时候就可以访问到我们的Pod里的服务了

service3

如何创建:

其中比较关键的就是selector , 这个selector决定了service 把流量发送到哪些pod,因为我们可能有上百个pod ,我们必须精确找到我们的pod, 所以

selector里边的值要和pod 定义里边的label 匹配,这样,service 和pod的联系就建立了,如下图:

 

 

 

service4

注意,Service 是整个cluster 级别的,并不是和某个Node绑定的,你可以访问任何的Node的IP加端口,都可以访问到我们的pod ,即使你访问的Node上没有对应的POD, kubernetes也会通过IPtalbles 给你转发到其他对的Node ,然后到对的pod

 

 

service5

 

 

ClusterIP 类型的Service 是为了解决内部service之间的相互访问

clusterip

 

也就是前段的Pod ,通过Service来访问后端的POD,同样是因为pod 的IP地址会 发生变化,所以我们使用Service

创建也非常简单

查看:

 

创建完成以后,我们就可以通过clusterip 的80端口来访问pod的80端口了

LoadBalance 是一种特殊的Service ,他必须要有所在云平台的支持,例如AWS, GCP

因为我们从不能把我们所有的Node IP地址发给客户去访问我们的pod,我们希望他们能通过域名类似: www.503error.com这样的域名来访问我们的pod , 这个时候我们就可以定义一个Loadbalance 类型的Service

loadb

 

aws 为例,我们把域名指向创建出来的alb ,然后alb会自动的把流量转发到我们的pod上,具体实现原理就不详细说了,就是通过target group之类的

创建方法也非常简单,换一下types就可以了

 

 

 

 

 

 

Zhiming Zhang

Senior devops at Appannie
一个奔跑在运维路上的胖子
Zhiming Zhang

Latest posts by Zhiming Zhang (see all)