Kubernetes之service服务暴露

service的IP地址仅在集群内部可达,然而,总会有些服务需要暴露到外部网络中接受各类客户端的访问,此时就需要在集群的边缘为其添加一层转发机制,以实现外部流量进入到集群的service的资源之上,这种操作称为服务暴露。

主要包含以下几种类型:

  • ClusterIP
  • NodePort
  • LoadBalancer
  • ExternalName

ClusterIP

通过集群内部IP地址暴露服务,此地址仅在集群内部可达,而无法被集群外部的客户端访问,此为默认的service类型。

NodePort

这种类型是建立在ClusterIP基础上的,其在每个节点的IP地址的某静态端口(NodePort)暴露服务,因此,它依然会为Service分配集群IP地址,并将此作为NodePort的路由目标。

简单来说,NodePort类型就是在工作节点的IP地址选择一个端口用于将集群外部的请求转发至对应目标service的ClusterIP和Port,这种类型的资源还是可以和ClusterIP一样接受集群内部的请求,也可以受到集群外部客户端通过套接字来进行的请求。

kind: Service
apiVersion: v1
metadata:
  name: myNodeport
apec: 
  type: NodePort
  selector:
    app: myNodePort
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32223

NodePort即节点Port,通常安装部署Kubernetes集群系统时会预留一个端口范围用于NodePort,默认为30000~32767之间的端口。

LoadBalancer

NodePort虽然能够于集群外部访问得到,但是外部客户端必须事先知道NodePort或集群中至少一个节点的IP地址,且当选定的节点发生故障时,客户端还得自行选择请求访问的其他节点,所以出现了该类型的service,这种结构是建立在NodePort类型之上的,其通过cloud Provider提供的负载均衡将服务暴露到集群外部,因此LoadBalancer一样具有NodePort和ClusterIP。

简而言之,一个LoadBalancer类型的service会指向关联至Kubernetes集群外部的、切实存在的某个负载均衡的设备,该设备通过工作节点之上的NodePort向集群内部发送请求流量。此类型的优势在于,它能够把来自于集群外部客户端的请求调度至所有节点(或部分节点)的NodePort之上,而不是依赖于客户端自己去决定连接到那台机器,从而避免了客户端由于指定的节点故障而导致服务不可用。

kind: Service
apiVersion: v1
metadata:
  name: myLoadBalancer
apec: 
  type: LoadBlancer
  selector:
    app: myLoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32223

用户还可以通过使用,spec.loadBalancerIP指定创建的负载均衡器使用的IP地址,spec.loadBalancerSourceRanges指定负载均衡器的客户端来源地址范围。

ExternalName

通过将service映射至由externalName字段的内容指定的主机名来暴露服务,此主机名需要被DNS服务解析至CNAME类型的记录。换言之,此种类型并非定义Kubernetes集群提供的服务,而是将集群外部的某服务以DNS CNAME记录的方式映射到集群内,从而让集群内的pod资源能够访问外部的service的一种实现方式。因此这种类型的service没有clusterIP和NodePort也没有标签选择器用于选择pod资源,因此也不会有EndPoints的存在了。

kind: Service
apiVersion: v1
metadata:
  name: myExternalName
  namespace: default
apec: 
  type: ExternalName
  externalName: redis
  ports:
  - protocol: TCP
    port: 6379
    targetPort: 6379
    nodePort: 0
  selector: {}

参考书籍《Kubernetes进阶实战》
个人github账号:https://github.com/SpecialAll

发布了49 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41999455/article/details/104379838