今天的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环境使用不同的控制器实现,有些并不提供默认的控制器

关于ingressingress-controller原理可以参考我的另一篇博客

https://blog.csdn.net/yuyang4600/article/details/104934486

参考《kubernetes in action》

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐