固定 IP 使用方法

最近更新时间:2025-07-07 10:35:22

我的收藏

使用场景

适用于依赖容器固定 IP 的场景。例如,传统架构迁移到容器平台及针对 IP 做安全策略限制。对 IP 无限制的业务不推荐您使用固定 IP 模式。

能力和限制

支持 Pod 销毁 IP 保留,Pod 迁移 IP 不变,从而实现固定 IP。
支持多子网,但不支持跨子网调度固定 IP 的 Pod,因此固定 IP 的 Pod 不支持跨可用区调度。
固定 IP 的 Pod 销毁后,其 IP 只在本集群范围内保留。
固定 IP 的 Pod 支持在普通节点、原生节点和超级节点间任意迁移,且能保持 IP 不变。
VPC-CNI 网络模式集群创建之后,暂不支持修改开启/关闭固定 IP 模式。
GlobalRouter 模式集群需先关闭当前 VPC-CNI 模式,再打开实现固定 IP 模式的变更。

使用方法

您可以通过以下步骤使用固定 IP:
1. 为集群开启固定 IP 模式。
2. 创建固定 Pod IP 类型工作负载。

为集群开启固定 IP 模式

您可以通过以下两种方式为集群开启固定 IP 模式:
创建集群选择固定 IP 模式的 VPC-CNI。
为 GlobalRouter 模式附加固定 IP VPC-CNI 模式。

创建集群选择固定 IP 模式的 VPC-CNI

说明:
使用此方式启用 VPC-CNI,通过控制台或通过 YAML 创建工作负载,Pod 均默认使用弹性网卡。
1. 登录 容器服务控制台,单击左侧导航栏中集群
2. 集群管理页面,单击集群列表上方的新建
3. 创建集群 > 网络配置页面,选择容器网络插件为 VPC-CNI,并勾选“开启支持”固定 Pod IP。

为 GlobalRouter 模式附加固定 IP VPC-CNI 模式

说明:
为 GlobalRouter 模式附加固定 IP VPC-CNI 模式即创建集群时选择 Global Router 网络插件,后续在集群基本信息页面开启 VPC-CNI 模式(两种模式默认混用)。
使用此方式启用 VPC-CNI,Pod 默认不使用弹性网卡。
1. 登录 容器服务控制台,单击左侧导航栏中集群
2. 集群管理页面,选择需开启 VPC-CNI 的集群 ID,进入集群详情页。
3. 集群详情页面,选择左侧基本信息。在节点和网络信息模块中,找到 VPC-CNI 字段,单击开启
4. 在弹出窗口中勾选“开启支持”固定 Pod IP,确认 IP 回收策略,并选择子网。如下图所示:


注意:
针对固定 IP 场景,启用 VPC-CNI 后需要设置 IP 回收策略,即设置 Pod 销毁后需要退还 IP 的时长。
非固定 IP 的 Pod 销毁后可立即释放 IP(非释放回 VPC,释放回容器管理的 IP 池),不受此设置的影响。
5. 单击提交,即可完成为已有集群开启 VPC-CNI。

创建固定 Pod IP 类型工作负载

集群开启固定 IP 模式后,如果您存在业务需要在容器服务 TKE 中部署,并存在固定 Pod IP 的需求,您需要使用 Pod 重建名称不变的工作负载,常见的为 Kubernetes 原生提供的 StatefulSets。TKE 提供扩展 StatefulSet 固定 IP 的能力,该类型的 StatefulSet 创建的 Pod 将通过弹性网卡分配真实的 VPC 内的 IP 地址。容器服务 TKE VPC-CNI 的插件负责 IP 分配,当 Pod 重启或迁移,可实现 IP 地址不变。
您可以通过创建固定 IP 类型 StatefulSet 来满足以下场景:
通过来源 IP 授权。
基于 IP 做流程审核。
基于 Pod IP 做日志查询等。
注意:
固定 IP 类型 StatefulSet 存在使用限制,仅支持 StatefulSet 生命周期内固定 IP。
您可通过以下两种方法创建固定 IP:
通过控制台
通过 Yaml
1. 登录 容器服务控制台,单击左侧导航栏中集群
2. 选择需要使用固定 IP 模式的集群 ID 名称,进入该集群的管理页面。
3. 选择工作负载 > StatefulSet,进入 StatefulSet 的集群管理页面。
4. 单击新建。在新建 StatefulSet 中勾选网络模式 > 使用 VPC-CNI 模式,并开启固定 Pod IP。如下图所示:



IP 地址范围:目前仅支持随机。
固定 Pod IP:选择开启
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
k8s-app: busybox
name: busybox
namespace: default
spec:
replicas: 3
selector:
matchLabels:
k8s-app: busybox
qcloud-app: busybox
serviceName: ""
template:
metadata:
annotations:
tke.cloud.tencent.com/networks: "tke-route-eni"
tke.cloud.tencent.com/vpc-ip-claim-delete-policy: Never
creationTimestamp: null
labels:
k8s-app: busybox
qcloud-app: busybox
spec:
containers:
- args:
- "10000000000"
command:
- sleep
image: busybox
imagePullPolicy: Always
name: busybox
resources:
limits:
tke.cloud.tencent.com/eni-ip: "1"
requests:
tke.cloud.tencent.com/eni-ip: "1"
spec.template.annotations:tke.cloud.tencent.com/networks: "tke-route-eni" 表明 Pod 使用共享网卡的 VPC-CNI 模式,如果使用的是独立网卡的 VPC-CNI 模式,请将值修改成"tke-direct-eni"该注解仅在 GlobalRouter 附加固定 IP VPC-CNI 模式的集群中需要添加,创建集群时就选择 VPC-CNI 模式的集群中无需添加
spec.template.annotations:创建 VPC-CNI 模式的 Pod,您需要设置 annotations,即 tke.cloud.tencent.com/vpc-ip-claim-delete-policy,默认是 “Immediate”,Pod 销毁后,关联的 IP 同时被销毁。如需固定 IP,则需设置成 “Never”,Pod 销毁后 IP 也将会保留,那么下一次同名的 Pod 拉起后,会使用之前的 IP。
spec.template.spec.containers.0.resources:创建共享网卡的 VPC-CNI 模式的 Pod,需要添加 requests 和 limits 限制,即 tke.cloud.tencent.com/eni-ip。如果是独立网卡的 VPC-CNI 模式,则添加 tke.cloud.tencent.com/direct-eni。该资源只需给 Pod 的第一个容器添加即可,其他容器无需添加。此外,该资源默认情况下会自动添加,您只需声明tke.cloud.tencent.com/networks注解即可。