ip pool的使用
约 701 字大约 2 分钟
2025-08-19
可以使用 Calico IP Pool 为不同团队分配独立的 IP 地址空间。
场景描述
假设我们有一个 Kubernetes 集群,需要为两个团队(开发团队和测试团队)分配独立的 IP 地址范围:
- 开发团队使用 10.0.1.0/24
- 测试团队使用 10.0.2.0/24
- 默认情况下 Pod 使用 10.0.0.0/24
步骤 1:创建多个 IP Pool
首先创建三个 IP Pool 定义文件:
default-pool.yaml:
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: default-pool
spec:
cidr: 10.0.0.0/24
blockSize: 26
ipipMode: Never
natOutgoing: truedev-pool.yaml:
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: dev-pool
spec:
cidr: 10.0.1.0/24
blockSize: 26
ipipMode: Never
natOutgoing: truetest-pool.yaml:
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: test-pool
spec:
cidr: 10.0.2.0/24
blockSize: 26
ipipMode: Never
natOutgoing: true应用这些配置:
calicoctl apply -f default-pool.yaml
calicoctl apply -f dev-pool.yaml
calicoctl apply -f test-pool.yaml步骤 2:验证 IP Pool 创建
calicoctl get ippools -o wide输出应该类似于:
NAME CIDR NAT IPIPMODE DISABLED
default-pool 10.0.0.0/24 true Never false
dev-pool 10.0.1.0/24 true Never false
test-pool 10.0.2.0/24 true Never false步骤 3:为不同团队分配 IP Pool
方法一:通过命名空间注解
为开发团队的命名空间添加注解:
kubectl create namespace dev-team
kubectl annotate namespace dev-team \
cni.projectcalico.org/ipv4pools='["dev-pool"]'为测试团队的命名空间添加注解:
kubectl create namespace test-team
kubectl annotate namespace test-team \
cni.projectcalico.org/ipv4pools='["test-pool"]'方法二:通过 Pod 注解(更细粒度控制)
创建开发团队的 Pod:
apiVersion: v1
kind: Pod
metadata:
name: dev-app
namespace: dev-team
annotations:
cni.projectcalico.org/ipv4pools: '["dev-pool"]'
spec:
containers:
- name: dev-app
image: nginx创建测试团队的 Pod:
apiVersion: v1
kind: Pod
metadata:
name: test-app
namespace: test-team
annotations:
cni.projectcalico.org/ipv4pools: '["test-pool"]'
spec:
containers:
- name: test-app
image: nginx步骤 4:验证 IP 分配
检查 Pod 分配的 IP 地址:
kubectl get pods -n dev-team -o wide
kubectl get pods -n test-team -o wide开发团队的 Pod IP 应该来自 10.0.1.0/24 范围,测试团队的 Pod IP 应该来自 10.0.2.0/24 范围。
步骤 5:创建网络策略(可选)
为了加强隔离,可以创建 NetworkPolicy 限制团队间的通信:
dev-team-policy.yaml:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: dev-team-isolation
namespace: dev-team
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
team: dev
egress:
- to:
- namespaceSelector:
matchLabels:
team: dev为命名空间添加标签:
kubectl label namespace dev-team team=dev
kubectl label namespace test-team team=test高级示例:节点特定的 IP Pool
如果想让特定节点使用特定的 IP Pool,可以这样做:
- 为节点添加标签:
kubectl label node <node-name> pool-group=high-perf- 创建专用 IP Pool:
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: high-perf-pool
spec:
cidr: 10.0.3.0/24
nodeSelector: pool-group == "high-perf"
ipipMode: Never
natOutgoing: true- 应用配置:
calicoctl apply -f high-perf-pool.yaml这样,调度到标记为 pool-group=high-perf 节点上的 Pod 将自动从 10.0.3.0/24 范围获取 IP 地址。
清理
删除示例资源:
kubectl delete namespace dev-team test-team
calicoctl delete ippool default-pool dev-pool test-pool更新日志
2025/8/19 11:24
查看所有更新日志
0004e-add ip pool于
