k8s集群之ClusterIP网络扩容

背景

在t环境上的不同namespace(t1-t10)复制相同的服务(20+),由于前期在进行集群容量规划时,未考虑到svc所消耗的clusterip的数量,仅仅对其网络的ip范围设定了254个,即10.0.0.0/24。因此导致出现集群的svc网络用尽。

现象

Error from server (InternalError): error when creating "deployment-evaluation-api.yaml": Internal error occurred: failed to allocate a serviceIP: range is full
在这里插入图片描述

原因分析

step1:通过终端报错,显然提示svc的网络已经用尽,无法分配ip

说明:查看k8s集群的svc网络ip使用数量,这个svc网络主要是抽象到k8s集群service时用的到ip,用于为每组service分配一个clusterip。

kubectl get svc -A | grep '10.' | wc -l  #查看整个集群的svc网络占用量

在这里插入图片描述

step2:查看apiserver中定义的svc网络(–service-cluster-ip-range)

说明:由于我的k8s集群是通过二进制部署的,我的k8s的apiserver配置位于/opt/kubernetes/cfg下面。

cat /opt/kubernetes/cfg/kube-apiserver.conf

在这里插入图片描述
可以看到,现有集群的service-cluster-ip-range是10.0.0.0/24,也就是说这个网段下只有254个可用的ip,也就验证了上面step1分析的原因。

结论

k8s集群的svc网络资源用尽

处理方法

在aipserver的配置文件中,将--service-cluster-ip-range=10.0.0.0/24改为--service-cluster-ip-range=10.0.0.0/16(10.0.0.0/16这个网络可以支持65536个ip地址,对于svc的clusterip来说已经够用了),重启apisrever服务即可。
在这里插入图片描述

systemctl restart kube-apiserver.service


在这里插入图片描述

kubectl get svc -A | wc -l

在这里插入图片描述

温馨提示

因为我是将--service-cluster-ip-range=10.0.0.0/24调整成--service-cluster-ip-range=10.0.0.0/16,原则上对我已有的svc上的clusterip是不受影响了(这个已经验证过),因为10.0.0.0/16网段是包含10.0.0.0/24网段的,所以对已有的svc网络没有影响。但是如果将10.0.0.0/24调整为
10.254.0.0/16,那势必会对整个集群的svc网络会有改动,因为虽然10.254.0.0/16的容量也大了,但是却改变了整个集群svc的网络结构。

当然在生产环境中还是建议尽可能在规划阶段都要考虑到这个容量规划的问题。

原有的t4 namespace下的svc的时间并没有刷新。
在这里插入图片描述
10.0.0.0/24
在这里插入图片描述
10.0.0.0/16
在这里插入图片描述
10.254.0.0/16
在这里插入图片描述

### 回答1: ClusterIP Service 是 Kubernetes 中一种 Service 类型,它会为后端 Pod 提供一个虚拟 IP 地址,使得在集群内部可以通过这个虚拟 IP 地址来访问后端 Pod,而不需要知道具体的 Pod IP 地址。ClusterIP Service 的优缺点如下: 优点: 1. 高可用性:ClusterIP Service 支持负载均衡,可以将请求均匀地分配给多个后端 Pod,从而提高应用的可用性。 2. 灵活性:ClusterIP Service 支持配置多种负载均衡算法和会话保持方式,可以根据实际需求进行灵活配置。 3. 安全性:ClusterIP Service 只在集群内部暴露虚拟 IP 地址,不会将后端 Pod 直接暴露给外部网络,从而提高了应用的安全性。 缺点: 1. 仅适用于集群内部访问:ClusterIP Service 只能在 Kubernetes 集群内部使用,无法通过外部网络直接访问。 2. 不支持动态扩容ClusterIP Service 只能在创建时指定后端 Pod 的数量,无法动态地根据负载自动扩容。 3. 无法实现跨集群访问:ClusterIP Service 只能在同一集群内部进行负载均衡,无法实现跨集群访问。 ### 回答2: K8s中的ClusterIP Service是一种服务发现和负载均衡机制,它有以下优点: 1. 内部服务访问:ClusterIP Service允许在集群内部创建一个虚拟的固定IP地址,用于访问部署在集群内的服务。这个IP地址可以供其他Pod或Service使用,方便进行内部通信,无需暴露到集群外部。 2. 负载均衡:通过ClusterIP Service,可以将请求均匀地分发到后端的多个Pod上,实现负载均衡。这样可以提高服务的可用性、扩展性和性能。 3. 内部DNS解析:ClusterIP Service会自动为每个Service分配一个唯一的DNS名称,这样可以通过名称来访问Service,而无需直接使用Pod的IP地址。这样,当Pod的IP地址发生变化时,不会影响到服务的访问。 然而,ClusterIP Service也有一些缺点: 1. 无法供集群外部访问:ClusterIP Service只能在集群内部使用,无法通过集群外部的IP地址直接访问。如果需要集群外部访问,需要结合其他类型的Service,如NodePort或LoadBalancer。 2. 不能实现会话保持:ClusterIP Service默认使用基于IP的负载均衡算法,不保证请求会发送到同一个后端Pod上。这就导致无法实现会话保持,对于需要保持会话状态的应用可能存在问题。 3. 无法处理动态变化:当创建或删除Pod时,ClusterIP Service需要重新配置和更新。在大规模的集群中,频繁的Pod变化可能导致Service的配置更新变得复杂和有延迟。 总的来说,ClusterIP ServiceK8s集群中有诸多优点,如方便的内部服务发现和负载均衡,但也有一些限制,无法用于集群外部访问,不支持会话保持,以及对动态变化的响应较慢。 ### 回答3: Kubernetes(k8s)是一个用于自动化管理容器化应用程序的开源平台,而ClusterIP Servicek8s中的一种服务类型。下面是ClusterIP Service的优缺点: 优点: 1. 内部访问:ClusterIP Service为内部应用程序提供了一个虚拟的集群IP地址,只对集群内可见。这允许应用程序在集群内部相互通信,同时保护应用程序免受来自外部的未经授权的访问。 2. 负载均衡:ClusterIP Service可以在后端Pod之间进行负载均衡。它可以自动将流量分发到后端Pod实例,以提高应用程序的可用性和性能。 3. 简化网络配置:通过使用ClusterIP Service,应用程序可以通过单个虚拟IP地址访问多个后端Pod实例,而不需要知道每个Pod的具体IP地址。这简化了网络配置和管理的复杂性。 4. 无需暴露端口:ClusterIP Service只在集群内部使用,没有暴露到集群外部。这样可以确保应用程序仅对集群内的其他组件可见,而不受来自外部的潜在攻击。 缺点: 1. 无法从集群外部访问:ClusterIP Service只在集群内可用,无法从集群外部直接访问。如果需要将应用程序暴露给外部用户或设备,则需要使用其他类型的Service如NodePort或LoadBalancer。 2. 需要额外配置:ClusterIP Service需要在k8s集群中进行额外的配置。这包括创建Service对象、定义后端Pod等。相对于其他类型的ServiceClusterIP Service的设置和管理需要一些额外的步骤。 3. 网络层面问题:ClusterIP Service是在网络层面上实现的,因此可能会存在一些网络层面的问题。例如,可能会出现网络延迟或丢包等问题,尤其是在大规模部署时。 总的来说,ClusterIP Service提供了许多方便和安全的特性,但也有一些限制。开发人员需要根据应用程序的具体需求和部署环境来选择合适的Service类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值