Kubernetes簇内的子网
我有两个部署—比如部署A和部署B。K8s子网是10.0.0.0/20。 我的要求:是否可以让部署A中的所有POD从10.0.1.0/24获取IP,让部署B中的POD从10.0.2.0/24获取IP。Kubernetes簇内的子网,kubernetes,Kubernetes,我有两个部署—比如部署A和部署B。K8s子网是10.0.0.0/20。 我的要求:是否可以让部署A中的所有POD从10.0.1.0/24获取IP,让部署B中的POD从10.0.2.0/24获取IP。 这有助于清理网络,并且借助IP本身可以确定特定的部署 Kubernetes中的部署是一种高级抽象,依赖于控制器来构建基本对象。这与对象本身不同,例如pod或服务 如果查看中的部署规范,您会注意到没有定义子网这样的事情,也没有特定于部署的IP地址,因此您无法为部署指定子网 库伯内特的观点是,豆荚是短暂
这有助于清理网络,并且借助IP本身可以确定特定的部署 Kubernetes中的部署是一种高级抽象,依赖于控制器来构建基本对象。这与对象本身不同,例如pod或服务 如果查看中的部署规范,您会注意到没有定义子网这样的事情,也没有特定于部署的IP地址,因此您无法为部署指定子网 库伯内特的观点是,豆荚是短暂的。由于IP是随机分配的,所以不应尝试通过IP地址来标识资源。如果pod死亡,它将拥有另一个IP地址。如果需要唯一稳定的网络标识符,可以尝试查看类似statefulset的内容 虽然Kubernetes不支持此功能,但我使用Calico:feature找到了解决方法 首先,您需要安装calicoctl。有几种方法可以实现文档中提到的目标 我选择将calicoctl安装为Kubernetes吊舱:
kubectl apply -f https://docs.projectcalico.org/manifests/calicoctl.yaml
要加快工作速度,可以设置别名:
alias calicoctl="kubectl exec -i -n kube-system calicoctl /calicoctl -- "
我创建了两个yaml文件来设置ip池:
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool1
spec:
cidr: 10.0.0.0/24
ipipMode: Always
natOutgoing: true
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool2
spec:
cidr: 10.0.1.0/24
ipipMode: Always
natOutgoing: true
然后,您已经应用了以下配置,但由于我的yaml被放置在我的主机文件系统中,而不是放置在calico pod本身中,因此我将yaml作为命令的输入:
➜ cat ippool1.yaml | calicoctl apply -f-
Successfully applied 1 'IPPool' resource(s)
➜ cat ippool2.yaml | calicoctl apply -f-
Successfully applied 1 'IPPool' resource(s)
列出IPTools时,您会注意到新添加的IPTools:
➜ calicoctl get ippool -o wide
NAME CIDR NAT IPIPMODE VXLANMODE DISABLED SELECTOR
default-ipv4-ippool 192.168.0.0/16 true Always Never false all()
pool1 10.0.0.0/24 true Always Never false all()
pool2 10.0.1.0/24 true Always Never false all()
然后,您可以指定要为部署选择的池:
---
metadata:
labels:
app: nginx
name: deployment1-pool1
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
annotations:
cni.projectcalico.org/ipv4pools: "[\"pool1\"]"
---
我创建了一个类似的名为deployment2的应用程序,它使用ippool2,结果如下:
deployment1-pool1-6d9ddcb64f-7tkzs 1/1 Running 0 71m 10.0.0.198 acid-fuji
deployment1-pool1-6d9ddcb64f-vkmht 1/1 Running 0 71m 10.0.0.199 acid-fuji
deployment2-pool2-79566c4566-ck8lb 1/1 Running 0 69m 10.0.1.195 acid-fuji
deployment2-pool2-79566c4566-jjbsd 1/1 Running 0 69m 10.0.1.196 acid-fuji
另外值得一提的是,在测试这一点时,我发现如果您的默认部署将有许多副本,并且ips用完,那么Calico将使用不同的池 哇……太棒了。谢谢你详细的解释。我试试看