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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1031

相关推荐