上海网站建设微信开发,湘潭市优化办,什么网站建设最便宜,九一人才网手机版文章目录CNI 网络流量分析#xff08;六#xff09;Calico 介绍与原理#xff08;二#xff09;CNIIPAM指定 IP指定非 IPAM IPCNI 网络流量分析#xff08;六#xff09;Calico 介绍与原理#xff08;二#xff09;
CNI
支持多种 datapath#xff0c;默认是 linuxDa…
文章目录CNI 网络流量分析六Calico 介绍与原理二CNIIPAM指定 IP指定非 IPAM IPCNI 网络流量分析六Calico 介绍与原理二
CNI
支持多种 datapath默认是 linuxDataplane支持 CRI 调用时 选择 grpc 实现的 dataplane还支持 ebpfvpp通过 ipam 获取到 ip 后DoNetworking
func (d *linuxDataplane) DoNetworking(ctx context.Context,calicoClient calicoclient.Interface,args *skel.CmdArgs,result *cniv1.Result,desiredVethName string,routes []*net.IPNet,endpoint *api.WorkloadEndpoint,annotations map[string]string,
) Ns 里创建 veth 设备Host 端网卡 calixxx 配置 mac ee:ee:ee:ee:ee:ee如果有 ipv6 地址关闭 DADLinkup 网卡通过 annotation 查 是否指定 mac指定则配置指定的 mac配置 ns 里路由 default via 169.254.1.1 dev eth0169.254.1.1 dev eth0 scope link如果有 ipv6设置 /proc/sys/net/ipv6/conf/all/disable_ipv6 0 /proc/sys/net/ipv6/conf/default/disable_ipv6 0/proc/sys/net/ipv6/conf/lo/disable_ipv6 0创建 ip route6为 ns 里网卡配置 ip开启 ipforwarding开启 /proc/sys/net/ipv4/conf/calixxx/route_localnet 1Enable routing to localhost/proc/sys/net/ipv4/neigh/calixxx/proxy_delay 0arp 延迟calico 不需要/proc/sys/net/ipv4/conf/calixxx/proxy_arp 1开启 arp 代理/proc/sys/net/ipv4/conf/calixxx/forwarding。在 host 配置到该 ip 的路由指向 calixxx。通过 annotation 检查是否有浮动 ip 配置创建 ipnat创建 WorkloadEndpointsdone
IPAM
默认使用 “calico-ipam” IPAM先获取 namespace 是否通过 annotation 配置 ippoolpod 是否配置 ippool获取 pod annotation 是否有 cni.projectcalico.org/ipAddrsNoIpamcni.projectcalico.org/ipAddrs ipAddrsNoIpam : annot[cni.projectcalico.org/ipAddrsNoIpam]ipAddrs : annot[cni.projectcalico.org/ipAddrs]// Switch based on which annotations are passed or not passed.switch {case ipAddrs ipAddrsNoIpam :case ipAddrs ! ipAddrsNoIpam ! :case ipAddrsNoIpam ! :case ipAddrs ! :全不配置时直接代理调取 calico-ipam 二进制全配置时失败只配置 ipAddrsNoIpam 时必须是 calico-ipam 类型会配置成所指定的 IP只配置 ipAddrs 时必须是 calico-ipam 类型先 calico.IPAM().ReleaseIPs ip再使用指定的 IP 去代理调用 calico-ipam
通过调用 calicoClient.IPAM().AutoAssign(ctx, assignArgs) 获取 ip获取 预留 IP 和 cidr预留 IP 和 cidr 可以通过 资源 IPReservation 进行配置通过 node 相关的 cidr 去获取一个 ip。
指定 IP
apiVersion: v1
kind: Pod
metadata:name: pod5namespace: defaultannotations:cni.projectcalico.org/ipAddrs: [\10.244.153.250\]
spec:containers:- name: pod5image: nginxports:- name: nginx-portcontainerPort: 80protocol: TCPdefault pod5 1/1 Running 0 115s 10.244.153.250指定非 IPAM IP
需要先开启 feature
# kubectl edit configmap calico-config -n kube-system
// 添加feature_control: {ip_addrs_no_ipam: true,floating_ips: true}apiVersion: v1
kind: Pod
metadata:name: pod5namespace: defaultannotations:cni.projectcalico.org/ipAddrsNoIpam: [\80.90.100.200\]
spec:containers:- name: pod5image: nginxports:- name: nginx-portcontainerPort: 80protocol: TCPpod5 1/1 Running 0 54s 80.90.100.200 node112当然只有本节点能通其他节点需要自己解决路由问题
Floating_ips
apiVersion: v1
kind: Pod
metadata:name: pod5namespace: defaultannotations:cni.projectcalico.org/floatingIPs: [\172.18.22.113\]
spec:containers:- name: pod5image: nginxports:- name: nginx-portcontainerPort: 80protocol: TCP- apiVersion: projectcalico.org/v3kind: WorkloadEndpointmetadata:creationTimestamp: 2023-02-14T02:03:01Zlabels:projectcalico.org/namespace: defaultprojectcalico.org/orchestrator: k8sprojectcalico.org/serviceaccount: defaultname: node112-k8s-pod5-eth0namespace: defaultresourceVersion: 4509106uid: beb345d3-6e9f-4144-918d-4f96fa8aada5spec:containerID: dc36d90f05c1890f78b8bb8ddc72426c2730ce60b58bf926b946d0131f620c78endpoint: eth0interfaceName: cali8e9fad9b07cipNATs:- externalIP: 172.18.22.113internalIP: 10.244.146.203ipNetworks:- 10.244.146.203/32node: node112orchestrator: k8spod: pod5ports:- hostIP: hostPort: 0name: nginx-portport: 80protocol: TCPprofiles:- kns.default- ksa.default.defaultserviceAccountName: default
kind: WorkloadEndpointList
metadata:resourceVersion: 4509937