文章目录
使用阿里云主机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
使用ipvs模式的service
service的类型
ClusterIP类型
NodePort类型
LoadBalancer类型
私有仓库需要先拉取metallb镜像
headless
ExternalName类型
生产环境中,有很多业务是部署在集群之外的。从服务的角度来说,有些服务是部署在集群内的,有些是部署在集群外的。在访问外部服务的时候,如果外部服务的接口变动了该如何处理呢?那么可以使用服务的ExternalName类型。
本质就是添加dns解析记录