【K8S系列】第十二讲:Service进阶

这篇具有很好参考价值的文章主要介绍了【K8S系列】第十二讲:Service进阶。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

​编辑

序言

1.Service介绍

1.1 什么是Service

1.2 Service 类型

1.2.1 NodePort

1.2.2 LoadBalancer

1.2.3 ExternalName

1.2.4 ClusterIP

2.yaml名词解释

 3.投票 

k8s service port type,K8S系列,kubernetes,容器,云原生

序言

当发现自己的才华撑不起野心时,就安静下来学习吧

三言两语,不如细心探索

今天学习一下Service相关内容,希望此文,能帮助读者对 k8s Service有进一步的认识

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

1.Service介绍

1.1 什么是Service

Kubernetes Service 定义了这样一种抽象:

  • 一个 Pod 的逻辑分组
  • 一种可以访问这组Pod的策略

也可以理解为微服务。 这一组 Pod 能够被 Service 访问到,通常是通过 Label Selector实现的。

Service 通过标签来选取服务后端,一般配合

  • Replication Controller
  • Deployment

从而保证后端容器的正常运行。

这些匹配标签的 Pod IP 和端口列表组成 endpoints,由 kube-proxy 负责将服务 IP 负载均衡到这些 endpoints 上。

如下图,展示的是Service与Pod、RC的关系

k8s service port type,K8S系列,kubernetes,容器,云原生

总结:

k8s的Service定义了一个服务的访问入口地址。

前端的应用通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,来自外部的访问请求被负载均衡到后端的各个容器应用上。 

1.2 Service 类型

Service 类型有四种,总接下来:

  1. NodePort
  2. LoadBalancer
  3. ExternalName
  4. ClusterIP

在定义Service的时候可以指定一个需要的类型的Service。

如果不指定,则默认是ClusterIP类型

1.2.1 NodePort

只对外部可见

通过每个 Node 节点上的 IP 和静态端口(NodePort)暴露服务。

NodePort 服务会路由到 ClusterIP 服务,这个 ClusterIP 服务会自动创建。

通过请求可以从集群的外部访问一个 NodePort 服务

主要适合:集群外业务访问的场景

如下:

apiVersion: v1
kind: Service
metadata:
  name: test-service
spec:
  selector:
    app: test
  type: NodePort # 指定service 类型
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    name: test-http
    nodePort: 30000 # 范围:30000-32767

设置 type 的值为 "NodePort",Kubernetes master 将从给定的配置范围内(默认:30000-32767)分配端口

每个 Node 将从该端口(每个 Node 上的同一端口)代理到 Service。

该端口将通过 Service 的 spec.ports[*].nodePort 字段被指定,这里指定的是30000

如果不指定的话会自动生成一个端口。

1.2.2 LoadBalancer

使用云提供商的负载局衡器,可以向外部暴露服务。

外部的负载均衡器可以路由到 NodePort 服务和 ClusterIP 服务,

需要结合具体的云厂商进行操作

1.2.3 ExternalName

ExternalName 是 Service 的特例

  • 没有 selector
  • 没有定义任何的端口和 Endpoint

对于运行在集群外部的服务,它通过返回该外部服务的别名这种方式来提供服务。

示例:

kind: Service
apiVersion: v1
metadata:
  name: test-service
  namespace: test
spec:
  type: ExternalName # 类型
  externalName: test.service.com

1.2.4 ClusterIP

只对内部可见,外部无法访问

Service的IP地址,通过集群的内部 IP 暴露服务,服务只能够在kubernetes集群内部可以访问,此为虚拟IP地址

默认的ServiceType。

kubectl -n test get Service # 即可看到ClusterIP

test 是命名空间

2.yaml名词解释

以下为yaml名词解释:文章来源地址https://www.toymoban.com/news/detail-781836.html

apiVersion: v1 # 版本
kind: Service # 类型
metadata: #元数据 类型string
  name: test #Service名称 类型string
  namespace: test #命名空间,不指定时默认为default命名空间
  labels: #自定义标签属性列表 类型string     
    - name: string 
  annotations: #自定义注解属性列表    
    - name: string
spec: #详细描述 类型list[]
  selector: [] #Label Selector配置,选择具有指定label标签的pod作为管理范围
  type: string #service的类型,指定service的访问方式,默认ClusterIP
               #ClusterIP:虚拟的服务ip地址,用于k8s集群内部的pod访问,在Node上kube-porxy通过设置的iptables规则进行转发
               #NodePort:使用宿主机端口,能够访问各Node的外部客户端通过Node的IP和端口就能访问服务器
               #LoadBalancer:使用外部负载均衡器完成到服务器的负载分发,
               #需要在spec.status.loadBalancer字段指定外部负载均衡服务器的IP,并同时定义nodePort和clusterIP用于公有云环境。
  clusterIP: string  #虚拟服务IP地址,当type=ClusterIP时,如不指定,则系统会自动进行分配,也可以手动指定。当type=loadBalancer,需要指定
  sessionAffinity: string  #是否支持session,可选值为ClietIP,默认值为空,ClientIP表示将同一个客户端(根据客户端IP地址决定)的访问请求都转发到同一个后端Pod
  ports: #service需要暴露的端口列表    
  - name: string #端口名称 类型string
    protocol: TCP  #端口协议,支持TCP或UDP,默认TCP 类型string
     port: 80 #服务监听的端口号 类型int
     targetPort: 8080 #需要转发到后端的端口号 类型int
     nodePort: 8080 #当type=NodePort时,指定映射到物理机的端口号 类型:int
  status: #当type=LoadBalancer时,设置外部负载均衡的地址,用于公有云环境    
    loadBalancer: #外部负载均衡器    
      ingress: #外部负载均衡器 
      ip: string #外部负载均衡器的IP地址
      hostname: string #外部负载均衡器的机主机

 3.投票

到了这里,关于【K8S系列】第十二讲:Service进阶的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s service

    程序在容器中、容器在Pod中,可以通过pod的ip来访问应用程序,但是podIP会随着创建销毁而改变。由此,Service出现: Service会对提供同一个服务的 多个pod进行聚合 ,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。 在整个Service的生命周期中

    2024年02月13日
    浏览(30)
  • K8S--service

    Service 是将集群中的 一个或一组 Pod应用程序公开为网络服务的方法。我们都知道pod是不稳定的,有可能时时刻刻都在创建和销毁,这一时刻运行的 Pod 集合可能不同于下一刻运行该应用的 Pod 集合,并且新创建的pod的ip地址会改变,所以我们不应该寄期望于pod的稳定性和可靠性

    2024年01月19日
    浏览(40)
  • k8s指南-Service

    目录: (1)k8s指南-概述 (2)k8s指南-架构 (3)k8s指南-工作负载(1) (4)k8s指南-工作负载(2) (5)k8s指南-工作负载(3) (6)k8s指南-工作负载(4) (7)k8s指南-Service (8)k8s指南-Ingress (9)k8s指南-DNS与服务发现 (10)K8S指南-平滑升级与自动扩缩容 在k8s集群中,虽然每个pod都会被分配一个单独的ip地址,但

    2024年02月08日
    浏览(29)
  • k8s service (二)

    K8s  service (二) Endpoint Endpoint 是 kubernetes 中的一个资源对象,存储在 etcd 中,用来记录一个 service 对应的所有 pod 访问地址,它是根据 service 匹配文件中 selector 描述产生的。 一个 Service 由一组 Pod 组成,这些 Pod 通过 Endpoints 暴露出来, Endpoints 是实现是服务的端点集合。换句

    2024年02月12日
    浏览(24)
  • k8s service (三)

    K8s service (三) LoadBalancer类型的Service LoadBalancer和NodePort其实是同一种方式,目的都是向外暴露一个端口,区别在于LoadBalancer会在集群的外部再来做一个负载均衡设备,而这个设备需要外部环境支持的,外部服务发送到这个设备上的请求,会被设备负载之后转发到集群中     E

    2024年02月11日
    浏览(24)
  • k8s 配置service失败

    服务暴露的端口不可用 查看容器的状态是否为Running。   进入容器,然后对容器进行curl。 如果是refuse或者其他返回,说明服务完全不可用。 很多人认为修改了pod的端口信息,那么代表着服务的端口也自动迁移过去,这个是根本不可能的。 pod的端口信息和服务的端口信息完全

    2024年02月07日
    浏览(27)
  • k8s Service服务详解

    k8s中Service定义了这样一种抽象:一个pod的逻辑分组,一种可以访问他们的策略—通常称为微服务。这一组pod能够被Service访问到,通常是通过Label Selector Service能够提供负载均衡的能力,但是在使用上有以下限制: 只提供4层负载均衡能力,而没有7层功能,但有时我们可能需要

    2024年02月13日
    浏览(36)
  • K8S | Service服务发现

    服务发现与负载均衡。 在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问; 对于测试「Tes」环境或者生产「Pro」环境,出于安全或者环境隔离性来考虑,在正常情况下只会开放

    2024年02月14日
    浏览(49)
  • k8s之Service详解

        Kubernetes Serivce是一组具有相同label Pod集合的抽象(可以简单的理解为集群内的LB),集群内外的各个服务可以通过Service进行互相通信。 Service创建 当用户在kubernetes集群中创建了含有label的Service之后,同时会在集群中创建出一个同名的Endpoints对象,用于存储该Service下的Pod I

    2024年02月16日
    浏览(27)
  • 玩转k8s:Service详解

    在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入

    2024年02月05日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包