第10章:Kubernetes Service资源


一、Service的定义

Service,定义了一组Pods的逻辑集合和一个用于访问它们的策略。一个 Service 的目标 Pod 集合通常是由Label Selector 来匹配和关联的。

在Service和pod中间,实际上还有一层是endpoint,endpoint用来映射可以对外提供服务的running的pod,且endpoint的ip和pod的ip是一致的。(注意,不是running的状态,则没有对应的endpoint。)

Endpoints 是一组实际服务的端点集合。一个 Endpoint 是一个可被访问的服务端点,即一个状态为 running 的 pod 的可访问端点。一般 Pod 都不是一个独立存在,所以一组 Pod 的端点合在一起称为 EndPoints。只有被 Service Selector 匹配选中并且状态为 Running 的才会被加入到和 Service 同名的 Endpoints 中。

注意:service和控制器没有对应关系,只是Service可以使用控制器创建的pod资源作为endpoints而已;

在Kubernetes当中,有三类IP地址:

  • Node Network
  • Pod Network
  • Service Network(Cluster Network)

二、Service的工作原理

Service的三种工作(代理)方式:

  • userspace方式,Kubernetes V1.1之前的
    userspace

  • iptables方式,Kubernetes V1.10之前的
    iptables

  • ipvs方式,Kubernetes V1.11之后的,默认是ipvs,否则会自动降级为iptables;
    ipvs

需要在kubelet的配置文件/etc/sysconfig/kubelet(不同Kubernetes版本,配置文件地址不同)当中,添加KUBELET_PROXY_MODE=ipvs,并写脚本使得主机自动装入相关的内核模板;

三、Service的服务方式

Service的服务暴露方式有四种:

  • ClusterIP(默认,仅用于集群内通信);
  • NodePort(主要用于集群外通信,在指定的范围内随机分配端口(默认值:30000-32767)。每个节点将分配的端口代理到服务中,服务需要基于ClusterIP。)
  • LoadBalancer(工作节点是在云环境中的云主机,公有云厂商提供,服务需要基于NodePort。)
  • ExternalName(将集群外部的服务引入到集群的内部,由外部FQDN和内部FQDN组成)

Headless Service,即没有ClusterIP,且必须定义为None,否则会自动分配一个ClusterIP;使用dig解析之后,可以直接看到后面的pod IP;其他则是Service的ClusterIP;
Headless Service在statefulSet服务用到;

扩展:
几种端口的区别;

  • nodePort,节点上的端口;
  • port,Service对外服务的端口;
  • targetPort,pod的端口;
  • containerPort,container的端口;

Service的yaml示例如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Davidwatt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值