allbet电脑版下载:【K8S】Service服务详解,看这一篇就够了!!

admin 3周前 (06-20) 科技 5 0

k8s用命名空间namespace把资源举行隔离,默认情形下,相同的命名空间里的服务可以相互通讯,反之举行隔离。

1.1 Service

Kubernetes中一个应用服务会有一个或多个实例(Pod,Pod可以通过rs举行多复本的确立),每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏障这些后端实例的动态转变和对多实例的负载平衡,引入了Service这个资源工具,如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
  labels:
    app: nginx
spec:
  type: ClusterIP
  ports:
    - port: 80
       targetPort: 80
  selector:  #service通过selector和pod确立关联
    app: nginx

凭据建立Service的type类型差别,可分成4种模式:

  • ClusterIP: 默认方式。凭据是否天生ClusterIP又可分为通俗Service和Headless Service两类:
    • 通俗Service:通过为Kubernetes的Service分配一个集群内部可接见的牢固虚拟IP(Cluster IP),实现集群内的接见。为最常见的方式。
    • Headless Service:该服务不会分配Cluster IP,也不通过kube-proxy做反向署理和负载平衡。而是通过DNS提供稳固的络ID来接见,DNS会将headless service的后端直接剖析为podIP列表。主要供StatefulSet使用。
  • NodePort:除了使用Cluster IP之外,还通过将service的port映射到集群内每个节点的相同一个端口,实现通过nodeIP:nodePort从集群外接见服务。
  • LoadBalancer:和nodePort类似,不外除了使用一个Cluster IP和nodePort之外,还会向所使用的公有云申请一个负载平衡器(负载平衡器后端映射到各节点的nodePort),实现从集群外通过LB接见服务。
  • ExternalName:是 Service 的特例。此模式主要面向运行在集群外部的服务,通过它可以将外部服务映射进k8s集群,且具备k8s内服务的一些特征(如具备namespace等属性),来为集群内部提供服务。此模式要求kube-dns的版本为1.7或以上。这种模式和前三种模式(除headless service)最大的差别是重定向依赖的是dns条理,而不是通过kube-proxy。
    好比,在service界说中指定externalName的值"my.database.example.com":

此时k8s集群内的DNS服务会给集群内的服务名 ..svc.cluster.local 建立一个CNAME纪录,其值为指定的"my.database.example.com"。
当查询k8s集群内的服务my-service.prod.svc.cluster.local时,集群的 DNS 服务将返回映射的CNAME纪录"foo.bar.example.com"。

备注: 前3种模式,界说服务的时刻通过selector指定服务对应的pods,凭据pods的地址建立出endpoints作为服务后端;Endpoints Controller会watch Service以及pod的转变,维护对应的Endpoint信息。kube-proxy凭据Service和Endpoint来维护内陆的路由规则。当Endpoint发生转变,即Service以及关联的pod发生转变,kube-proxy都会在每个节点上更新iptables,实现一层负载平衡。 而ExternalName模式则不指定selector,响应的也就没有port和endpoints。 ExternalName和ClusterIP中的Headles Service同属于Headless Service的两种情形。Headless Service主要是指不分配Service IP,且不通过kube-proxy做反向署理和负载平衡的服务。

1.2 Port

Service中主要涉及三种Port: * port 这里的port示意service露出在clusterIP上的端口,clusterIP:Port 是提供给集群内部接见kubernetes服务的入口。

  • targetPort

containerPort,targetPort是pod上的端口,从port和nodePort上到来的数据最终经由kube-proxy流入到后端pod的targetPort上进入容器。

  • nodePort

nodeIP:nodePort 是提供给从集群外部接见kubernetes服务的入口。

总的来说,port和nodePort都是service的端口,前者露出给从集群内接见服务,后者露出给从集群外接见服务。从这两个端口到来的数据都需要经由反向署理kube-proxy流入后端详细pod的targetPort,从而进入到pod上的容器内。

1.3 IP

使用Service服务还会涉及到几种IP:

  • ClusterIP

Pod IP 地址是现实存在于某个网卡(可以是虚拟装备)上的,但clusterIP就不一样了,没有网络装备承载这个地址。它是一个虚拟地址,由kube-proxy使用iptables规则重新定向到其内陆端口,再平衡到后端Pod。当kube-proxy发现一个新的service后,它会在内陆节点打开一个随便端口,建立响应的iptables规则,重定向服务的clusterIP和port到这个新建的端口,最先接受到达这个服务的毗邻。

  • Pod IP

Pod的IP,每个Pod启动时,会自动建立一个镜像为gcr.io/google_containers/pause的容器,Pod内部其他容器的网络模式使用container模式,并指定为pause容器的ID,即:network_mode: "container:pause容器ID",使得Pod内所有容器共享pause容器的网络,与外部的通讯经由此容器署理,pause容器的IP也可以称为Pod IP。

  • 节点IP

Node-IP,service工具在Cluster IP range池中分配到的IP只能在内部接见,若是服务作为一个应用程序内部的条理,照样很合适的。若是这个service作为前端服务,准备为集群外的客户提供营业,我们就需要给这个服务提供公共IP了。指定service的spec.type=NodePort,这个类型的service,系统会给它在集群的各个署理节点上分配一个节点级别的端口,能接见到署理节点的客户端都能接见这个端口,从而接见到服务。

 

,

欧博开户www.allbetgame.us

欧博开户www.allbetgame.us

皇冠体育声明:该文看法仅代表作者自己,与本平台无关。转载请注明:allbet电脑版下载:【K8S】Service服务详解,看这一篇就够了!!

网友评论

  • (*)

最新评论

站点信息

  • 文章总数:530
  • 页面总数:0
  • 分类总数:8
  • 标签总数:818
  • 评论总数:167
  • 浏览总数:3013