Kubernetes教程

Kubernetes ClusterIP分配

在 Kubernetes 中,Service 是一种抽象的概念,用于公开一组 Pod 上运行的应用程序。Service 可以具有集群范围内的虚拟 IP 地址(使用 type: ClusterIP 的 Service)。 当客户端发起连接请求时,Kubernetes 会根据 Service 的负载均衡规则将流量分发给后台的 Pod。

一、Service ClusterIP分配

当 Kubernetes 需要为 Service 分配虚拟 IP 地址时,该分配会通过以下两种方式之一进行:

1、动态分配

集群的控制面自动从所配置的 IP 范围内为 type: ClusterIP 选择一个空闲 IP 地址。

2、静态分配

根据为 Service 所配置的 IP 范围,选定并设置 IP 地址。

在整个集群中,每个 Service 的 ClusterIP 都必须是唯一的。 尝试使用已分配的 ClusterIP 创建 Service 将返回错误。

二、预留Service的ClusterIP

有时可能希望 Services 在众所周知的 IP 上面运行,以便集群中的其他组件和用户可以使用它们。

最好的例子是集群的 DNS Service。作为一种非强制性的约定,一些 Kubernetes 安装程序 将 Service IP 范围中的第 10 个 IP 地址分配给 DNS 服务。假设将集群的 Service IP 范围配置为 10.96.0.0/16,并且希望 DNS Service IP 为 10.96.0.10,则必须创建如下 Service:

apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: "true"
kubernetes.io/name: CoreDNS
name: kube-dns
namespace: kube-system
spec:
clusterIP: 10.96.0.10
ports:
- name: dns
port: 53
protocol: UDP
targetPort: 53
- name: dns-tcp
port: 53
protocol: TCP
targetPort: 53
selector:
k8s-app: kube-dns
type: ClusterIP

但如前所述,IP 地址 10.96.0.10 尚未被保留,如果在 DNS 启动之前或同时采用动态分配机制创建其他 Service, 则它们有可能被分配此 IP,因此,将无法创建 DNS Service,因为它会因冲突错误而失败。

三、避免Service ClusterIP冲突

Kubernetes 中用来将 ClusterIP 分配给 Service 的分配策略降低了冲突的风险。ClusterIP 范围根据公式 min(max(16, cidrSize / 16), 256) 进行划分, 描述为不小于 16 且不大于 256,并在二者之间有一个渐进的步长。

默认情况下,动态 IP 分配使用地址较高的一段,一旦用完,它将使用较低范围。 这将允许用户在冲突风险较低的较低地址段上使用静态分配。

示例1:

此示例使用 IP 地址范围:10.96.0.0/24(CIDR 表示法)作为 Service 的 IP 地址。

  • 范围大小:28 - 2 = 254
  • 带宽偏移量:min(max(16, 256/16), 256) = min(16, 256) = 16
  • 静态带宽起始地址:10.96.0.1
  • 静态带宽结束地址:10.96.0.16
  • 范围结束地址:10.96.0.254

避免Service ClusterIP冲突

示例2:

此示例使用 IP 地址范围 10.96.0.0/20(CIDR 表示法)作为 Service 的 IP 地址。

  • 范围大小:212 - 2 = 4094
  • 带宽偏移量:min(max(16, 4096/16), 256) = min(256, 256) = 256
  • 静态带宽起始地址:10.96.0.1
  • 静态带宽结束地址:10.96.1.0
  • 范围结束地址:10.96.15.254

避免Service ClusterIP冲突

示例3:

此示例使用 IP 地址范围 10.96.0.0/16(CIDR 表示法)作为 Service 的 IP 地址。

  • 范围大小:216 - 2 = 65534
  • 带宽偏移量:min(max(16, 65536/16), 256) = min(4096, 256) = 256
  • 静态带宽起始地址:10.96.0.1
  • 静态带宽结束地址:10.96.1.0
  • 范围结束地址:10.96.255.254

避免Service ClusterIP冲突

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录