为Pod配置固定IP
使用场景
在云原生网络2.0下,会为每个Pod分配用户VPC网络下的一张网卡,支持为StatefulSet工作负载的Pod(容器网卡)固定IP,适用于需要针对具体IP地址做访问控制、服务注册、服务发现、日志审计等场景。
例如,当有一个需要访问云上数据库的StatefulSet类型业务,需要在对云上数据库进行严格的访问控制,只允许该业务进行访问,则可固定该业务的Pod IP,配置云上数据库的安全组只允许该业务的容器IP可进行访问。
约束限制
- 仅以下指定版本的CCE Turbo集群支持用户配置Pod固定IP:
- v1.23集群:v1.23.7-r0及以上版本
- v1.25集群:v1.25.3-r0及以上版本
- v1.25以上版本集群
- 目前只支持StatefulSet类型的Pod或无ownerReferences的Pod固定IP,暂不支持Deployment、DaemonSet等其他类型的工作负载配置Pod固定IP,且不支持已设置HostNetwork的Pod配置固定IP。
- 对Pod的IP地址无明确要求的业务不建议配置固定IP,因为配置了固定IP的Pod,Pod重建的耗时会略微变长同时IP地址的利用率会下降。
- 不支持直接修改Pod对象的固定IP的annotations的值,如果直接修改的话,后台不会生效;如有修改诉求,请直接修改对应的StatefulSet工作负载spec.template字段下的annotations配置。
- 当固定IP的Pod重建调度时,如果待调度的节点上没有剩余的网卡配额(预绑定的网卡会占用节点的网卡配额),固定IP的网卡会尝试抢占预绑定的网卡,此时固定IP的Pod启动会略微变慢。使用固定IP的节点,请合理配置节点网卡动态预热以确保不会全预热网卡。
通过kubectl命令行设置
您可以通过对StatefulSet添加annotations来设置是否开启Pod固定IP功能,如下所示。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: serviceName: nginx replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx annotations: pod.alpha.kubernetes.io/initialized: 'true' yangtse.io/static-ip: 'true' yangtse.io/static-ip-expire-no-cascading: 'false' yangtse.io/static-ip-expire-duration: 5m spec: containers: - name: container-0 image: nginx:alpine resources: limits: cpu: 100m memory: 200Mi requests: cpu: 100m memory: 200Mi imagePullSecrets: - name: default-secret
annotation |
默认值 |
参数说明 |
取值范围 |
---|---|---|---|
yangtse.io/static-ip |
false |
是否开启Pod固定IP,只有StatefulSet类型的Pod或无ownerReferences的Pod支持,默认不开启。 |
"false"或"true" |
yangtse.io/static-ip-expire-duration |
5m |
删除固定IP的Pod后,对应的固定IP网卡过期回收的时间间隔。 |
支持时间格式为Go time type,例如1h30m、5m。关于Go time type,请参见Go time type。 |
yangtse.io/static-ip-expire-no-cascading |
false |
是否关闭StatefulSet工作负载的级联回收。 默认为false,表示StatefulSet删除后,会级联删除对应的固定IP网卡。如果您需要在删除StatefulSet对象后,在网卡过期回收时间内保留对应的固定IP,用于下一次重建同名的StatefulSet再次使用对应的固定IP,请将该参数设为true。 |
"false"或"true" |