k8s——5、service

文章目录

  • service简介
  • 使用iptables处理service
  • 使用ipvs模式的service
    • service的类型
      • ClusterIP类型
      • NodePort类型
      • LoadBalancer类型
      • headless
      • ExternalName类型


使用阿里云主机ECS,
四台主机信息如下:
server1 — 私网IP:10.0.0.2 ----公网IP: 47.108.54.185 ---- 搭建docker仓库harbor
server2 — 私网IP:10.0.0.3 ----公网IP: 47.108.144.231 ---- k8s集群主节点
server3 — 私网IP:10.0.0.4 ----公网IP: 47.108.115.206 ---- k8s集群节点
server4 — 私网IP:10.0.0.5 ----公网IP: 47.108.28.42 ---- k8s集群节点

参考:
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands官网文档

service简介

  • Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应用可以方便的实现服务发现和负载均衡

  • Service默认只支持4层负载均衡能力,没有7层功能(可以通过Ingress实现)

  • Service的类型:
    ClusterIP:默认值,k8s系统给Service自动分配的虚拟IP,只能在集群内部访问。
    NodPort:将Service通过指定的集群节点上的端口暴露给外部,访问任意一个NodelP:nodePort都将路由到ClusterIP。
    Loadalancer:在Nodeort的基础上,借助cloud provider创建一个外部的负载均衡器,并将请求转发到:NodePort,此模式只能在云服务器上使用。
    ExternaName:将服务通过DNS CNAME记录方式转发到指定的域名(通过spec.extemINAME设定)

由于Pod会随时起停,所以分配固定IP不合适。且直接将容器地址暴露给外网也是不安全的做法。所以,在这中间,就需要Service来实现

  • Service是由kube-proxy组件,加上iptables来共同实现的
  • kube-proxy通过iptables处理Service的过程,需要在宿主机上设置相当多的iptables规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU资源
  • IPVS模式的Service,可以使k8s集群支持更多量级的Pod

开启kube-proxy的ipvs模式:
yum install -y ipvsadm #所有节点安装
kubectl edit cm kube-proxy -n kube-system #修改IPVS模式

使用iptables处理service

k8s——5、service_第1张图片

k8s——5、service_第2张图片
k8s——5、service_第3张图片

k8s——5、service_第4张图片

使用ipvs模式的service

k8s——5、service_第5张图片
k8s——5、service_第6张图片
k8s——5、service_第7张图片
k8s——5、service_第8张图片
k8s——5、service_第9张图片
k8s——5、service_第10张图片
k8s——5、service_第11张图片
k8s——5、service_第12张图片
k8s——5、service_第13张图片
k8s——5、service_第14张图片

service的类型

ClusterIP类型

k8s——5、service_第15张图片
k8s——5、service_第16张图片

NodePort类型

在这里插入图片描述
k8s——5、service_第17张图片
k8s——5、service_第18张图片
k8s——5、service_第19张图片

LoadBalancer类型

k8s——5、service_第20张图片
在这里插入图片描述
k8s——5、service_第21张图片
k8s——5、service_第22张图片
k8s——5、service_第23张图片
k8s——5、service_第24张图片
k8s——5、service_第25张图片
k8s——5、service_第26张图片
k8s——5、service_第27张图片私有仓库需要先拉取metallb镜像
k8s——5、service_第28张图片
k8s——5、service_第29张图片
k8s——5、service_第30张图片
k8s——5、service_第31张图片
k8s——5、service_第32张图片
k8s——5、service_第33张图片

headless

k8s——5、service_第34张图片
k8s——5、service_第35张图片
k8s——5、service_第36张图片
k8s——5、service_第37张图片
k8s——5、service_第38张图片
k8s——5、service_第39张图片
k8s——5、service_第40张图片

ExternalName类型

生产环境中,有很多业务是部署在集群之外的。从服务的角度来说,有些服务是部署在集群内的,有些是部署在集群外的。在访问外部服务的时候,如果外部服务的接口变动了该如何处理呢?那么可以使用服务的ExternalName类型。
本质就是添加dns解析记录

k8s——5、service_第41张图片
k8s——5、service_第42张图片
k8s——5、service_第43张图片
k8s——5、service_第44张图片
k8s——5、service_第45张图片
k8s——5、service_第46张图片
k8s——5、service_第47张图片
k8s——5、service_第48张图片
k8s——5、service_第49张图片
k8s——5、service_第50张图片

你可能感兴趣的:(kubernetes,运维,linux)