首页 > 其他分享 >第八章 Service和Ingress

第八章 Service和Ingress

时间:2022-11-29 09:11:27浏览次数:43  
标签:Ingress Service -- 第八章 集群 NodePort spec 客户端

1 Service资源的基础应用

1.1 创建Service资源

  创建Service对象的常用方法有两种:一是直接使用"kubectl expose"命令;另一种是使用资源配置文件,它与此前使用的资源清单文件配置其他资源的方法类似。

1.1.1 第一种方法:

  pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs)

  Kubectl语法

kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type]

  示例:

  为rc的nginx创建一个service,该服务位于端口80上,并连接到端口8000的容器上。

# kubectl expose rc nginx --port=80 --target-port=8000

  为deploy创建一个类型为NodePort的,对外暴露端口为80,名称为myapp的服务

# kubectl expose deployment myapp --type=”NodePort" --port=8O --name=myapp

  注意:Service资源的默认类型为ClusterIP,它仅能接收来自于集群内的Pod对象中的客户端程序的访问请求。 

1.1.2 第二种方法:

  定义Service资源对象时,spec的两个较为常用的内嵌字段分别为selector和ports,分别用于定义使用的标签选择器和要暴露的端口。

apiVersion: v1 
kind: Service
metadata:
  name: myapp-svc 
spec:
  selector: 
    app:myapp
  ports:
  - protocol: TCP
    port: 80 
    targetPort: 80

2 Service会话粘性

  Service资源还支持Session affinity(会话粘性)机制,它能将来自同一个客户端的请求始终转发至同一个后端的Pod对象,这意味着他会影响调度算法的流量分发功能,进而降低其负载均衡的效果。

  Session affinity的效果仅会在一定时间期限内生效,默认值为10800秒,超出此时长之后,客户端再次访问被调度算法重新调度。另外,Service资源的Session affinity机制仅能基于客户端IP地址识别客户端身份,他会把经由同一个NAT服务器进行源地址转发的所有客户端识别为同一个客户端,调度粒度粗糙且效果不佳,因此,实践中并不推荐使用此种方法实现粘性会话。

  Service资源通过.spec.sessionAffinity和.spec.sessionAffinityConfig两个字段配置粘性会话。spec.sessionAffinity字段用于定义要使用的粘性会话类型,它仅支持使用“None”和“ClientIp”两种属性。

  • None:不使用sessionAffinity,默认值
  • ClientIP:基于客户端IP地址识别客户端身份,把来自同一个源IP地址的请求始终调度至同一个Pod对象

  在启用粘性会话机制时,.spec.sessionAffinityConfig用于配置会话保持时长,他是一个嵌套字段,使用格式如下,可用时长范围为“1-86400”,默认为10800秒

spec:
  sessionAffinity: ClientIp 
  sessionAffinityConfig:
    clientIP:
    timeoutSeconds: <integer>

3 服务暴露

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

3.1 Service类型

  Kubernetes的Service共有四种类型:ClusterIP、NodePort、LoadBalancer和ExternalName。

  • ClusterIP:通过集群内部IP地址暴露服务,此地址仅在集群内部可达,而无法被集群外部的客户端访问。此为默认的Service类型
  • NodePort:这种类型建立在ClusterIP类型之上,其在每个Node节点的某静态端口暴露服务,简单来说,NodePort类型就是在工作节点的IP地址上选择一个端口用于将集群外部的用户请求转发至目标Service的ClusterIP和Port,因此,这种类型的Service既可如ClusterIP一样受到集群内部客户端Pod的访问,可会受到集群外部客户端通过套接字<NodeIP>:<NodePort>进行请求。
  • LoadBalancer:这种类型构建在NodePort类型之上,也就是通过公有云LB将NodePort暴露的<NodeIP>:<NodePort>配置在LB上,实现负载均衡
  • ExternalName:目的是让集群内的Pod资源能够访问外部的Service的一种实现方式

3.2 NodePort类型的Service资源

apiVersion: v1
kind: Service  
metadata:
  name: myapp-svc-nodeport 
spec:
  type: NodePort
  selector: 
    app:myapp
  ports:
  - protocol: TCP
    port: 80 
    targetPort: 80 
    nodePort: 32223
==============================
port: 80    #表示service端口
targetPort: 80    #表示Pod容器端口
nodePort: 32223   #表示Node节点暴露端口

3.3 LoadBalancer类型的Service资源

  NodePort类型的Service资源虽然能够于集群外部访问,但外部客户端必须得事先得知NodePort和集群中至少一个节点的IP地址,且选定的节点发生故障时,客户端还得自行选择请求访问其他节点,另外,集群节点很可能是某IaaS云环境中使用私有IP地址的VM,或者是IDC中使用的私有地址的物理机,这类地址对互联网客户端不可达,因为,一般,还应该在集群外创建一个具有公网IP地址的负载均衡器,由他接入外部客户端的请求并调度至集群节点相应的NodePort之上。

apiVersion: v1
kind: Service  
metadata:
  name: myapp-svc-lb 
spec:
  type: LoadBalancer
  selector: 
    app:myapp
  ports:
  - protocol: TCP
    port: 80 
    targetPort: 80 
    nodePort: 32223

3.4 ExternalName Service

  ExternalName类型的Service资源用于将集群外部的服务发布到集群中以供Pod中的应用程序访问,因此,它不需要使用标签选择器关联任何的Pod对象,但必须要使用spec.externalName属性定义一个CNAME记录用于返回外部真正提供服务的主机的别名,而后通过CNAME记录值获取到相关主机的IP地址。

apiVersion: v1 
kind: Service
metadata :
  name : external-redis-svc
  namespace: default 
spec:
  type: ExternalName 
  externaIName : redis.ilinux.io 
  ports:
  - protocol: TCP
    port: 6379 
    targetPort: 6379 
    nodePort: 0
    selector: {}

  待Service资源external-redis-svc创建完成后,各Pod对象即可通过external-redis-svc或其FQDN格式个名称external-redis-svc.default.svc.cluster.local访问相应的服务。

4 Headless类型的Service资源

 

标签:Ingress,Service,--,第八章,集群,NodePort,spec,客户端
From: https://www.cnblogs.com/weidongliu/p/16932820.html

相关文章

  • Ionic2中的相册选择和拍照上传——ImgService
    目录​​目录​​​​前言​​​​Cordova准备​​​​ImgService服务的实现​​​​ImgService服务的使用​​​​示例效果​​​​相册选择器的汉化​​​​参考​​前言......
  • 【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获
    问题描述AppService中,如何通过ApplicationSetting来配置KeyVault中的值呢? 问题解答首先,AppService服务可以直接通过引用的方式,无需代码的情况下,为Application......
  • Execute Crond Service on openEuler
    一、ExecuteCrondServiceonopenEuler1crond概述crond就是计划任务/定时任务常见有闹钟、PC端定时关机shutdown-s-t200,定时执行计划任务执行一些周期性的任务......
  • WCF 4.0路由服务Routing Service
    在面向服务的应用系统中,最重要的概念就是消息,消息的传输是一个非常重要的问题。而在大多数情况下,消息要经历多个网络节点,这里会涉及到消息路由问题。WS规......
  • ClusterIP类型的Service
    Service使用实验环境准备在使用service之前,首先利用Deployment创建出3个pod,注意要为pod设置`app=nginx-pod`的标签创建deployment.yaml,内容如下:apiVersion:apps/v1k......
  • ServiceEntry和workloadentry
    部署client[root@masterServiceEntry-and-WorkloadEntry]#kubectlapply-f00-Deploy-Client/deployment.apps/clientcreatedservice/clientcreated[root@master......
  • System.Runtime.InteropServices浅见
    System.Runtime.InteropServices提供了相应的类或者方法来支持托管/非托管模块间的互相调用。System.Runtime.InteropServices中几个比较重要的类:DllImportAttribute: 该......
  • 调试Windows Service
       通常的处理办法是,在service运行后,在调试器中选择attachtoprocess.   然而这种做法也有一定的局限性,例如在service启动时的OnSta......
  • Service详解之Service介绍
    Service介绍在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解......
  • WebService传输DataSet的一点想法和实践-.NET教程,Web Service开发
    其实这个标题很大,实现起来也可以有许多的办法。甚至,应否这样做也许都能惹出许多的争论(比如,为什么用ws而不是remoting?为什么传dataset而不是entity[]?)。      由于ds......