k8s集群中让POD使用固定IP的方法
- 2025-04-23 12:27:00
- 运维
- 31
- shevechco
我们之前使用k8s的时候一般都是POD由Controller来分配IP地址,如果我们想固定地址,一般都是使用hostnetwork:true等配置来使用宿主机的地址,再或者直接配置service来配置svc访问的地址,这些地址一般就是svc名字+命名空间就能得到POD的一个固定内部地址(域名),那么今天就来介绍下如何让POD分配到固定的k8s集群内部IP地址,具体操作我们来看下
首先我们需要下载calicoctl工具,下载地址:https://github.com/projectcalico/calicoctl/releases
wget https://github.com/projectcalico/calicoctl/releases/download/v3.20.6/calicoctl-linux-amd64
mv calicoctl-linux-amd64 /usr/local/bin/calicoctl
chmod +x /usr/local/bin/calicoctl
然后修改/etc/cni/net.d/10-calico.conflist文件,将ipam类型修改为calico-ipam
接着我们就使用该工具进行一些设置,先查看当前ippool
calicoctl get ippool
查看当前ippool就一个资源池,接着我们添加如下配置创建一个新的ip资源池
cat ippool.yaml
kind: IPPool
metadata:
name: fixed-ip-pool
spec:
blockSize: 27
cidr: 10.10.10.0/27
ipipMode: Always
natOutgoing: true
记着使用上述配置创建一个新的ippool
calicoctl create ippool.yaml
创建好以后再次查看ippool
calicoctl get ippool
可以查看到新的ippool
最后我们看下单个POD限制IP地址为新的ip池内地址,或者固定IP
让POD分配新的IP池内地址配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
name: inference-service
namespace: gpu_project
spec:
replicas: 1
selector:
matchLabels:
name: inference-service
template:
metadata:
labels:
name: inference-service
annotations:
"cni.projectcalico.org/ipv4pools": "[\"fixed-ip-pool\"]"
主要时添加了注解annotations和cni.projectcalico.org/ipv4pools的配置
让POD分配固定IP地址配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
name: inference-service
namespace: gpu_project
spec:
replicas: 1
selector:
matchLabels:
name: inference-service
template:
metadata:
labels:
name: inference-service
annotations:
"cni.projectcalico.org/ipAddrs": "[\"10.10.10.2\"]"
如果删除POD未被释放可以使用命令进行释放
calicoctl ipam release --ip 10.10.10.2
内容版权声明:除非注明,否则皆为本站原创文章。