You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Calico CNI为Kubernetes Pod分配静态IP地址

Calico 为Pod分配静态IP实现方案

前提校验

执行以下操作前请先确认基础配置符合要求:

  • 你的集群Calico已启用自带IPAM功能,查看calico-config ConfigMap中ipam字段值为calico-ipam
  • 执行calicoctl get ippools -o wide确认10.222.0.0/16网段的IP池处于可用状态,disabled字段为false

实现方案

方案1:工作负载注解直接指定静态IP(轻量场景首选)

无需提前创建额外Calico资源,直接在Pod/工作负载的模板注解中配置要绑定的IP即可,IP必须属于10.222.0.0/16网段。

  • 单Pod配置示例:
apiVersion: v1
kind: Pod
metadata:
  name: static-ip-demo
  annotations:
    cni.projectcalico.org/ipAddrs: '["10.222.1.100"]'
spec:
  containers:
  - name: nginx
    image: nginx:alpine
  • Deployment/StatefulSet配置示例,注解需填写在spec.template.metadata下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: static-ip-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: static-ip
  template:
    metadata:
      labels:
        app: static-ip
      annotations:
        cni.projectcalico.org/ipAddrs: '["10.222.1.101"]'
    spec:
      containers:
      - name: nginx
        image: nginx:alpine

注意:如果指定的IP已经被其他Pod占用,新建Pod会启动失败,配置前可先执行kubectl get pods -o wide | grep 10.222.确认目标IP未被使用。

方案2:IP预留后分配(避免IP被抢占,推荐多负载场景)

如果需要批量保留一批IP不被集群自动分配给其他随机Pod,可以先创建Calico IPReservation资源锁定IP范围:

  1. 编写IP预留配置文件ip-reserve.yaml:
apiVersion: projectcalico.org/v3
kind: IPReservation
metadata:
  name: static-ip-pool
spec:
  reservedCIDRs:
  # 支持单个IP预留或小段网段预留
  - 10.222.1.100/32
  - 10.222.1.101/32
  - 10.222.1.102/32
  1. 应用配置生效:
    calicoctl apply -f ip-reserve.yaml
  2. 预留完成后,再按照方案1的方式在工作负载中指定对应的预留IP即可,不会出现IP被其他Pod抢占的问题。

配置验证

Pod启动完成后执行以下命令确认IP分配符合预期:
kubectl get pod <你的Pod名称> -o wide
也可以通过Calico命令查看全局网络端点的IP分配记录:
calicoctl get wep --all-namespaces

内容的提问来源于stack exchange,提问作者Nyquillus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 23:06:07