(七)K8S核心资源Service

这篇具有很好参考价值的文章主要介绍了(七)K8S核心资源Service。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.什么是service服务

Service

Kubernetes(K8s)中的Service是一种抽象,用于定义一组Pod的访问方式和网络规则。它提供了一个稳定的网络终结点,使得应用程序能够通过Service名称来访问后端的Pod实例。

Service为一组具有相同功能的Pod提供了一个统一的入口,隐藏了Pod背后的具体细节。通过Service,应用程序可以使用DNS名称或Cluster IP来访问后端Pod,而不需要直接暴露Pod的IP地址。这样,当Pod的IP地址发生变化时,应用程序仍然可以通过Service来访问后端的Pod。

Service还支持负载均衡,可以将请求均匀地分发到后端的多个Pod实例,从而实现高可用和水平扩展。它可以根据不同的负载均衡策略(如轮询、IP哈希等)将请求路由到不同的Pod。

Kubernetes中有多种类型的Service,包括ClusterIP、NodePort和LoadBalancer。每种类型都提供了不同的访问方式和网络配置,以满足不同的应用需求。

总之,Kubernetes的Service是一种抽象层,用于定义和管理应用程序的网络访问方式,并提供负载均衡和稳定的网络终结点。它是构建在Pod之上的一种网络抽象,为应用程序提供了方便的访问和可扩展性。

Service分类

  • ClusterIP 是默认类型的Service,它将Service暴露在集群内部的虚拟IP上。其他Pod或Service可以通过该虚拟IP和指定的端口与Service进行通信。ClusterIP类型的Service仅在集群内部可访问,对外部网络是不可见的。
  • NodePort 对外访问应用使用,在ClusterIP基础上为Service在每台机器上绑定一个端口,就可以通过: ip+NodePort来访问该服务
  • LoadBalancer(付费方案) 使在NodePort的基础上,借助公有云创建一个外部负载均衡器,并将请求转发到NodePort
    可以实现集群外部访问服务的另外一种解决方案,不过并不是所有的k8s集群都会支持,大多是在公有云托管集群中会支持该类型
  • ExternalName(很少使用)把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建,这只有 Kubernetes 1.7或更高版本的kube-dns才支持。

Service和pod的关系

service和pod之间是通过 selector.app进行关联的

yaml示例:

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  name: svc
spec:
  ports:
  - port: 80  # service服务端口
    protocol: TCP
    targetPort: 80 # pod端口,常规和容器内部端口一致
  selector: # 标签选择器,确定当前service代理控制哪些pod
    app: nginx-pod
status:
  loadBalancer: {}

2.多种port端口区分

关于K8S中端口的概念区分

  • port 是service端口,即k8s中服务之间的访问端口 ,clusterIP:port 是提供给集群内部客户访问service的入口
  • nodePort 容器所在node节点的端口,通过nodeport类型的service暴露给集群节点,外部可以访问的端口
  • targetPort 是pod的端口 ,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
  • containerPort 是pod内部容器的端口,targetPort映射到containerPort。

总结:

  • 4种端口作用不一样,port和nodePort都是service的端口
  • port暴露给集群内客户访问服务,nodePort暴露给集群外客户访问服务
  • 这两个端口到来的数据都需要经过反向代理kube-proxy流入后端pod的targetPod,从而到达pod中的容器

yaml示例;

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80 #容器端口,不指定则为默认
---
apiVersion: apps/v1
kind: Service
metadata:
  name: nginx
spec:
  type: NodePort # 有配置NodePort,外部可访问k8s中的服务 ,
  ports:
  - name: nginx
    port: 80  # 服务service的访问端口
    protocol: TCP
    targetPort: 80  # pod端口,映射到容器端口
    nodePort: 30015  # NodePort,通过nodeport类型的service暴露给集群外部访问
  selector:
    app: nginx

3.K8S服务Service的ClusterIP

在Kubernetes中使用ClusterIP类型的Service非常简单。你可以按照以下步骤进行操作:

创建和使用方式:

1.创建一个Service的定义文件(YAML格式),指定Service的名称、选择器、端口等信息。以下是一个示例

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - name: http
      port: 80
      targetPort: 8080

2.使用kubectl命令创建Service:

kubectl apply -f service-definition.yaml

3.等待Service创建成功。你可以使用以下命令来检查Service的状态:

kubectl get service my-service

通过Service的ClusterIP来访问相关的Pod。在集群内部,你可以使用Service的ClusterIP作为访问目标,而不需要直接暴露Pod的IP地址。
例如,在同一命名空间内的Pod中,你可以使用Service的ClusterIP来访问其他Pod,如下所示:

curl <cluster-ip>:<port>

请将<cluster-ip>和<port>替换为实际的Service的ClusterIP和端口。
注意:ClusterIP类型的Service默认只在集群内部可用,无法从集群外部访问。如果你需要从集群外部访问Service,可以考虑使用其他类型的Service,如NodePort或LoadBalancer。

4.K8S服务Service的NodePort和EndPoint

NodePort

特点:

NodePort是Kubernetes中一种类型的Service,它允许通过集群节点的特定端口将流量转发到Service中的Pod。

1.NodePort是Service的一种类型,它公开了一个固定的端口(NodePort),并将流量转发到Service中定义的端口(TargetPort)。

2.当创建一个NodePort类型的Service时,Kubernetes会为每个节点分配一个随机的端口号(30000-32767范围),并将此端口映射到Service的TargetPort。

3.NodePort类型的Service可以从集群外部访问。通过访问集群的任何节点的IP地址和NodePort端口,可以将流量转发到Service中的Pod。

创建和使用方式:

4.创建NodePort类型的Service的示例定义文件如下:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - name: http
      port: 80
      targetPort: 8080
      nodePort: 30080

上述示例中的nodePort字段指定了NodePort的端口号为30080。

5.使用kubectl命令创建NodePort类型的Service:

kubectl apply -f service-definition.yaml

6.从集群外部访问NodePort类型的Service时,可以使用任何节点的IP地址和指定的NodePort端口。例如:

curl <node-ip>:<node-port>

请注意,NodePort类型的Service通常用于测试或开发环境,并不适合在生产环境中直接使用。在生产环境中,建议使用LoadBalancer类型的Service或使用Ingress控制器来实现更灵活和可靠的流量管理。

Endpoint(ep)

概述:

1.是k8s中的一个资源对象,存储在etcd(存储数据库)中,记录service对应的所有pod的访问地址
2.里面有个Endpoints列表,就是当前service可以负载到的pod服务入口
3.service和pod之间的通信是通过endpoint实现的
4.查看endpoint列表 kubectl get ep svc-nodeport-nginx1 -n dev -o wide

kubernetes提供了两种负载均衡策略

  • Round Robin(轮询):在轮询负载均衡策略下,每个请求按照顺序依次分发到后端的Pod。当有多个后端Pod时,每个请求会按照轮询的方式依次发送到不同的Pod上,确保每个Pod都能平均地处理请求。

  • Session Affinity(会话亲和):在会话亲和负载均衡策略下,Kubernetes会根据客户端的源IP地址将一段时间内的请求路由到同一个后端Pod上。这样做的目的是为了保持与同一客户端的会话连续性,确保客户端在同一个Pod上处理的请求都属于同一个会话。

这两种负载均衡策略可以在Service的配置中进行指定。对于Round Robin策略,可以将Service的.spec.sessionAffinity字段设置为None(默认值),表示不启用会话亲和;对于Session Affinity策略,可以将.spec.sessionAffinity字段设置为ClientIP,表示根据客户端的源IP地址进行会话亲和。文章来源地址https://www.toymoban.com/news/detail-460009.html

到了这里,关于(七)K8S核心资源Service的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • K8S | Service服务发现

    K8S | Service服务发现

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

    2024年02月14日
    浏览(15)
  • k8s&service服务发现

    k8s&service服务发现

    Service的功能::::::::::::::::::::: 服务发现:发现pod的变化,宕机的不转发 对外发布:让外部访问到内部,稳定的对外映射一个端口号nodeport Service有两个ip,第一个是service内部访问用的 一个是向外提供服务的clusterip 定位dns,用dns解析  实例文件:

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

    k8s Service服务详解

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

    2024年02月13日
    浏览(17)
  • Kubernetes(k8s)服务service:service的发现和service的发布

    目录 一.系统环境 二.前言 三.Kubernetes service简介 四.使用hostPort向外界暴露应用程序 4.1 创建deploy 4.2 使用hostPort向外界暴露pod的端口 五.使用service服务向外界暴露应用程序 5.1 使用service服务向外界暴露pod 5.1.1 创建service服务 5.1.2 测试svc的负载均衡 六.service服务的发现 6.1 使用

    2024年02月08日
    浏览(13)
  • K8S之服务Service(十三)

    K8S之服务Service(十三)

     二,Pod与Service的关系 Service通过标签关联一组Pod Service为一组Pod提供负载均衡能力  三,定义与创建 创建service: kubectl apply -f service.yaml 查看service: kubectl get service  四,服务类型 • ClusterIP:集群内部使用 • NodePort:对外暴露应用 • LoadBalancer:对外暴露应用,适用公有云

    2024年02月08日
    浏览(13)
  • 云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)

    云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)

    Gitee-k8s学习 云原生实战-kubernetes核心实战 Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离 Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。 kubernetes很少直接控制Pod,一般都是通过Pod控制器来

    2024年02月03日
    浏览(86)
  • k8s-服务发现service和ingress

    k8s-服务发现service和ingress

    回到目录 service用于集群内部应用的网络调用,处理东西流量 ingress用于集群外部用户访问内部服务,处理南北流量 kubernetes集群中有三层网络,一类是真实存在的,例如Node Network、Pod Network,提供真实IP地址;一类是虚拟的,例如Cluster Network或Service Network,提供虚拟IP地址,不会

    2024年02月14日
    浏览(15)
  • 持续集成部署-k8s-服务发现-Service

    在K8s中, Service 是一种可以暴露一个或多个 Pod 的稳定的网络终点,从而形成逻辑上的应用服务单元,为服务发现、负载均衡、容错等提供了基础设施支持。 Service 的主要作用包括以下几个方面: 1. 实现内部服务发现 :在K8s中,往往会有多个 Pod 运行同一种应用服务, Servi

    2024年02月08日
    浏览(13)
  • k8s的service资源类型有ClusterIP、Nodeport、ExternalName、LoadBalancer、Headless(None)

    k8s的service资源类型有ClusterIP、Nodeport、ExternalName、LoadBalancer、Headless(None)

    ClusterIP 是在所有节点内生成一个虚拟IP,为一组pod提供统一的接入点,当service存在时,它的IP地址和端口不会发生改变,客户端通过service的ip和端口建立连接,由service将连接路由到该服务的任意一个后端pod上,通过这种方式,客户端不需要知道每个pod的具体ip,pod可以随时移

    2024年02月11日
    浏览(12)
  • k8s服务发现之第一弹Service概述

    Kubernetes 中 Pod 是随时可以消亡的(节点故障、容器内应用程序错误等原因)。如果使用 Deployment 运行您的应用程序,Deployment 将会在 Pod 消亡后再创建一个新的 Pod 以维持所需要的副本数。每一个 Pod 有自己的 IP 地址,然而,对于 Deployment 而言,对应 Pod 集合是动态变化的。

    2024年02月12日
    浏览(10)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包