K8S系列之Service

Service在Kubernetes中用于提供稳定的服务发现和负载均衡。它包括ClusterIP(内部访问)、NodePort(通过节点端口暴露)、HeadlessServices(无集群IP)、LoadBalancer(外部负载均衡)和ExternalName(DNS映射外部服务)。Service的作用在于解决PodIP不固定带来的问题,确保客户端能持续访问目标应用。
摘要由CSDN通过智能技术生成

Service是什么?

service代表了一组pod向客户端提供服务,可以通过K8S的服务发现的机制来调用service,kube-proxy通过服务名映射成IP来进行调用。

为什么需要Service

这就要说起pod的特性,每个pod都是临时,当一个pod失败或者重启后就会生成一个新的pod来进行启动,会有新的IP,如果需要暴露给客户端(这里指的同一个ack集群中其它pod)进行调用,这个IP随时都会发生变化,这时就需要一个不会改变的服务名提供给客户端了,Service就是做这个用处的。

Service 的类型

ClusterIP

image.png
ClusterIP会在集群内分配一个IP仅供集群内进行访问,客户端可以通过IP或者服务名进行调用找到对应的Service后,从而找到进行POD。

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: '2023-02-02T10:09:41Z'
  labels:
    app.kubernetes.io/name: eureka-provider
    kubefed.io/managed: 'true'
  managedFields:
    - apiVersion: v1
      manager: kubefed-controller-manager
      operation: Update
      time: '2023-02-02T10:09:41Z'
  name: eureka-provider-cs01-cell-gz00cp2k00
  namespace: default
spec:
  clusterIP: 127.0.127.20
  clusterIPs:
    - 127.0.127.20
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: eureka-provider-cs01-port-0
      port: 10002
      protocol: TCP
      targetPort: 10002
  selector:
    cafe.sofastack.io/app-instance: eureka-provider-gz00cp2k00
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

NodePort

image.png
通过node节点上的port向客户端提供服务,因为node的IP不会发生改变,只需要开通一个node port到pode port的对应关系就行。

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

一种特殊的ClusterIP,不需要分配IP,通过服务名进行访问

apiVersion: v1
kind: Service
metadata:
  creationTimestamp: '2023-02-02T10:26:00Z'
  labels:
    app.kubernetes.io/name: eureka-provider
    kubefed.io/managed: 'true'
  managedFields:
    - apiVersion: v1
      fieldsType: FieldsV1
      manager: kubefed-controller-manager
      operation: Update
      time: '2023-02-02T10:26:00Z'
  name: eureka-provider-hs01-cell-gz00cp2k00
  namespace: default
spec:
  clusterIP: None
  clusterIPs:
    - None
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  selector:
    cafe.sofastack.io/app-instance: eureka-provider-gz00cp2k00
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

LoadBalancer

image.png
通过云厂商来创建负载均衡器来向集群外提供服务,不同的厂商的实现不一样;例如:阿里云是通过SLB来提供服务的。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app.kubernetes.io/name: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
  clusterIP: 10.0.171.239
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.0.2.127

ExternalName

image.png

通过返回 CNAME 记录和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com)。 无需创建任何类型代理。

apiVersion: v1
kind: Service
metadata:
  name: my-service
  namespace: prod
spec:
  type: ExternalName
  externalName: my.database.example.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值