Fork me on GitHub

Controller与Service系列(二) Service基本概念

一、什么是Service

通过创建 Service,可以为一组具有相同功能的容器应用提供一个统一的入口地 址,并且将请求负载分发到后端的各个容器应用上。所以service的存在基于:
  • 服务发现
  • 负载均衡

1、服务发现

Pod因为Node节点的宕机会导致其重新调度,这样Pod就没有固定的ip,那么之前的Pod就会失联,为了防止重新调度的Pod能够找到就需要进行服务发现。

 这样虽然Pod被调度到另一个节点上,但是也可以继续被发现,不至于失联。

2、负载均衡

定义一组Pod的访问策略:

前台请求,后台将其进行负载均衡,然后分发到不同的Pod上。Service与Pod之间通过label与selector进行关联,这与Controller与Pod之间建立关联的方式一样。

二、Service类型

 对一些应用的某些部分,可能希望将其暴漏给k8s集群外部的IP地址,Service允许指定你需要的Service类型,默认的是ClusterIP类型。

  • ClusterIP:通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。 这也是默认的 ServiceType
  • NodePort:通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。 通过请求 <节点 IP>:<节点端口>,你可以从集群的外部访问一个 NodePort 服务。
  • LoadBalancer:使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。

 在之前常用的对外暴露端口使用的就是NodePort:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: MyApp
  ports:
      # 默认情况下,为了方便起见,`targetPort` 被设置为与 `port` 字段相同的值。
    - port: 80
      targetPort: 80
      # 可选字段
      # 默认情况下,为了方便起见,Kubernetes 控制平面会从某个范围内分配一个端口号(默认:30000-32767)
      nodePort: 30007

 

 

 

 

 

 

 

posted @ 2021-06-20 21:51  iveBoy  阅读(634)  评论(0编辑  收藏  举报
TOP