首页/云/Kubernetes 速查/指定与更换 ClusterIP 的规则
网络与服务55 条

指定与更换 ClusterIP 的规则

ClusterIP 可在创建时从 Service 网段内指定,创建后不可修改;删除重建通常会拿到新 IP,理解这一点对依赖固定 IP 的旧系统很重要。

Kubernetes 速查云更新于 2026-10-13

虚拟 IP 能不能固定下来

ClusterIP 可以在创建时从 Service 网段内指定,创建之后就不可修改。它由 kube-proxy 或等价组件在节点上以转发规则实现,并没有对应实体网卡,这也是它 ping 不通、但端口可以连接的原因。删除重建 Service 通常会拿到新的虚拟 IP,把 IP 硬编码到调用方配置里属于反模式:应用应通过 DNS 名称访问,DNS 名在重建后保持不变。

基本信息

适用对象各版本的 Service
关键字段spec.clusterIP 与 spec.clusterIPs
可选取值范围集群 Service 网段内且未被占用的地址
可否修改不可变字段,只能删除重建
推荐访问方式使用 DNS 名称而不是固定 IP

典型使用场景

  • 兼容历史系统:外部系统必须填写固定地址时,创建时指定虚拟 IP
  • 迁移梳理:确认哪些调用方依赖固定 IP,评估改造范围
  • 排查地址冲突:核对指定地址是否已被其他服务占用
  • 理解重建影响:预估删除重建对调用方的影响面
  • 访问方式治理:把固定 IP 依赖逐步替换为 DNS 名称

指定 clusterIP 与查看网段

指定 clusterIP 与查看网段
apiVersion: v1
kind: Service
metadata:
  name: legacy-api
  namespace: prod
spec:
  clusterIP: 10.96.0.100        # 必须落在 Service 网段内且未被占用
  selector:
    app: legacy-api
  ports:
    - port: 80
      targetPort: 8080

核对网段与占用情况

核对网段与占用情况
kubectl get svc kubernetes -n default -o jsonpath='{.spec.clusterIP}'
kubectl cluster-info dump | grep -i -m1 service-cluster-ip-range
kubectl get svc -A -o custom-columns='NS:.metadata.namespace,NAME:.metadata.name,IP:.spec.clusterIP' | grep 10.96.0
kubectl get svc -A -o jsonpath='{range .items[*]}{.spec.clusterIP}{"\n"}{end}' | sort | uniq -d

相关操作与影响

操作是否允许影响
创建时指定地址允许必须是网段内未占用的地址
修改已有地址不允许必须先删除再重建
删除后重建允许虚拟 IP 可能变化,DNS 名保持不变
依赖固定 IP不推荐重建后调用方中断,且旧地址可能被他人占用
虚拟 IP 由转发规则实现,没有实体接口:ping 不通不能作为服务不可用的判断依据,应改用端口连接或 HTTP 响应来验证。
DNS 名称在 Service 重建后保持稳定,是比固定 IP 更可靠的访问方式;改造时优先把调用方的地址配置换成 DNS 名。
指定地址前先全量列出已用虚拟 IP:同一网段里被其他命名空间占用的地址同样会冲突,只在自己的命名空间里查容易漏。

易错点

  • 把虚拟 IP 写进配置文件:Service 重建后调用方全部失败,旧地址还可能被其他服务取走
  • 指定了网段之外的地址:创建请求被拒绝,需要先确认集群实际的 Service 网段范围
  • 指定已被占用的地址:创建冲突,需先找到占用方再决定是否换地址
  • 以为重建后一定能拿回原地址:在存在竞争的情况下并不保证,恢复过程不能依赖这一点

数据来源与参考

  • Kubernetes 官方文档 · Service(clusterIP 字段说明)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌