nodeport vs loadbalance vs ingress
nodeport, loadbalance, ingress今天的review会议上被问到为什么会出现ingress资源,为什么要用域名,解释半天没说清楚,后来发现我对k8s里面的几种服务也有点忘却了,晚上再回忆一下首先,介绍一下endpoint资源,服务并没有和pod直接相连,有一种资源介于他们两者之间-----endpoint对一个service运行kubectl describe sv...
今天的review会议上被问到为什么会出现ingress资源,为什么要用域名,解释半天没说清楚,后来发现我对k8s里面的几种服务也有点忘却了,晚上再回忆一下
首先,介绍一下endpoint资源,服务并没有和pod直接相连,有一种资源介于他们两者之间-----endpoint
对一个service运行kubectl describe svc svc-name
可以查看到endpoint资源,显示的是一个服务的端点的IP和端口。
尽管在spec服务中定义了pod选择器,但是在重定向传入连接时不会直接使用他,相反,选择器是用于构建IP和端口列表,然后存储在endpoint资源中,当客户端连接到服务时,服务代理选择这些IP和端口对中的一个,并将传入连接重定向到在该位置监听的服务器
服务暴露
有几种方式可以在外部访问服务:
- 将服务的类型设置成
nodeport
-------每个集群节点都会在节点上打开一个端口,对于nodeport服务,每个集群节点在节点本身上打开一个端口,并将在该端口上接收到的流量重定向到基础服务(service),该服务仅在内部集群IP和端口上才可访问,但也可以通过所有节点上的专用端口访问 - 将服务的类型设置成
loadbalance
,nodeport类型的一种扩展,这使得服务可以通过一个专用的负载均衡器来访问,负载均衡器将流量重定向到跨所有节点的节点端口,客户端通过负载均衡器的IP连接到服务 - 创建
ingress
资源,通过一个IP地址公开多个服务------它运行在HTTP层上,因此可以提供比工作在第四层的服务更多的功能
使用NodePort类型的服务
通过创建nodeport服务,可以让kubernetes在其所有节点上保留一个端口(所有节点上都是用相同的端口号),并将传入的连接转发给作为服务部分的pod
这与常规服务类似(他们的实际类型是ClusterIP
),但是不仅可以通过服务的内部集群IP访问nodeport服务,还可以通过任何节点的IP和预留节点端口访问nodeport服务
apiVersion: v1
kind: Service
metadata:
name: cigserver-service
spec:
type: NodePort #指定类型
ports:
- port: 80 #服务集群IP的端口号
targetPort: 8080 #背后pod的目标端口号
nodePort: 30123 #通过集群节点上此端口可以访问该服务,不强制,如果不写,k8s会随机指定一个
selector:
app: kubia
创建完成后,EXTERNAL-IP列显示<nodes>
, PORT(S)列显示集群IP(80)的内部端口和节点端口(30123) ,可以使用以下地址访问
- clusterIP:80
- <node`s IP>:30123
通过负载均衡器将服务暴露出来
apiVersion: v1
kind: Service
metadata:
name: serviceloadbalancer
spec:
type: LoadBalancer #服务类型
ports:
- port: 80
targetPort: 8080
selector:
app: kubia
没有指定特定的节点端口,k8s会随机选择一个
创建服务后,云基础架构需要一段时间才能创建负载均衡器并将其IP地址写入服务对象,即服务的``EXTERNAL-IP`。
通过ingress暴露服务
先来介绍以下为什么会出现ingress
一个重要的原因是每个loadbalance
服务都需要自己的负载均衡器,以及独有的公有的IP地址,而ingress
只需要一个公网IP就能为许多服务提供访问,当客户端向ingress
发送http请求时,ingress会根据请求的主机名和路径决定请求转发到的服务
ingress在网络栈的应用层操作,并且可以提供一些服务不能实现的功能,比如基于cookie的会话亲和性等功能
**强调:**只有ingress控制器(ingress-controller)在集群中运行,ingress资源才能工作。不同的kubernetes环境使用不同的控制器实现,有些并不提供默认的控制器
关于ingress
和ingress-controller
原理可以参考我的另一篇博客
https://blog.csdn.net/yuyang4600/article/details/104934486
参考《kubernetes in action》
更多推荐
所有评论(0)