Cilium 官方文档翻译(6) IPAM Cluster scope模式

Cluster scope

cluster-scope模式是cilium默认的IPAM模式,它为每个node分配PodCIDRs,并为每个节点提供host-scope级的分配器。这与 Kubernetes Host Scope 模式非常像,不同之处在于cilium operator会通过v2.CiliumNode资源管理每个node的PodCIDRs,而Kubernetes Host Scope 模式是通过kubernetes的v1.Node来为每个node分配PodCIDRs。

架构

image

kubernetes无法通过简单配置为node分配PodCIDRs场景下,Cluster scope会非常有用。

这种模式下,cliium agent会等待 v2.CiliumNode的ip地址族资源字段可用后再启动。

字段描述
Spec.IPAM.PodCIDRsIPv4 and/or IPv6 PodCIDR range

使用cluster-pool IPAM作为CRD-backend的后端

启用 cluster-pool IPAM 模式

  1. 通过helm安装cilium设置--set ipam.mode=cluster-pool选项。

  2. 根据使用IPv4/IPv6需求选定并按需调整集群级pod的CIDR:

  3. --set ipam.operator.clusterPoolIPv4PodCIDRList=<IPv4CIDR>

  4. --set ipam.operator.clusterPoolIPv6PodCIDRList=<IPv6CIDR>

  5. 使用以下选项调整要分配给每个节点的CIDR大小

  6. --set ipam.operator.clusterPoolIPv4MaskSize=<IPv4MaskSize>

  7. --set ipam.operator.clusterPoolIPv6MaskSize=<IPv6MaskSize>

  8. 部署cilium和cilium-operator,cilium 会自动等待operator把每个节点的PodCIDR分配完成

验证安装

  1. 验证cilium正确启动
$ cilium status --all-addresses
KVStore:                Ok   etcd: 1/1 connected, has-quorum=true: https://192.168.60.11:2379 - 3.3.12 (Leader)
[...]
IPAM:                   IPv4: 2/256 allocated,
Allocated addresses:
  10.0.0.1 (router)
  10.0.0.3 (health)

  1. 验证spec.ipam.podCIDRs部分
$ kubectl get cn k8s1 -o yaml
apiVersion: cilium.io/v2
kind: CiliumNode
metadata:
  name: k8s1
  [...]
spec:
  ipam:
    podCIDRs:
      - 10.0.0.0/24

故障排查

查找ip分配错误

检查 Status.Operator.Error字段:

kubectl get ciliumnodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.operator.error}{"\n"}{end}'

检查node CIDRs冲突

pod 默认的CIDR是10.0.0.0/8。如果node的网路与该网段范围冲突的话可能出现pod无法与其它node通信的问题:所有发出的数据包会认为目标是拥有目标地址所在包含CIDR的所在节点上的pod,而非其它的node。

下面两种方法可以解决该问题:

  • 显式地将clusterPoolIPv4PodCIDRList设置为非冲突的CIDR
  • node节点使用不同的CIDR

Cluster Pool v2(Beta版本)

Cluster Pool V2扩展了上述机制,允许将额外的PodCIDRs动态的分配给每个节点。每个cilium agent会通过v2.CiliumNode对象报告已分配的PodCIDRs的利用率。

如果一个节点可用pod ip资源不足,operator会为该节点分配额外的PodCIDR。与之对应如果一个节点有未使用的PodCIDRs,operator 最终会释放空闲PodCIDRs并重新分配给其它节点。

v2.CIiliumNode新增扩展了的PodCIDRs字段。

字段描述
Spec.IPAM.PodCIDRsList of assigned IPv4 and/or IPv6 PodCIDRs
Status.IPAM.PodCIDRsPodCIDR utilization (one of: in-use, depleted, or released)

当一个node的所有PodCIDR都处于 depletedreleased状态时,operator会为node分配一个新的 PodCIDR。

限制

Cluster Pool V2 是一个预览版本的特性,以下限制适用于在cluster-pool-v2beta模式下运行cilium。

  • Cluster Pool V2 只支持本地路由模式,不支持隧道模式的网络。
  • 不支持使用IPSec进行透明加密。
  • 更多限制详见 GitHub issue 18987

配置

在helm选项中设置 --set ipam.mode=cluster-pool-v2beta即可启用 Cluster Pool V2。Cluster Pool V2的CIDR池配置与常规集群相同。请参考 [使用cluster-pool IPAM作为CRD-backend的后端](#使用cluster-pool IPAM作为CRD-backend的后端)

通过下面的字段可以配置每个节点的PodCIDR触发重新分配和释放的阈值:

  • Spec.IPAM.PodCIDRAllocationThreshold

  • 定义每个节点PodCIDR池中最小可用的空闲IP数。

  • 如果PodCIDR池中的IP地址总数小于此值,则此节点当前使用的PodCIDRs将被标记为耗尽,cilium operator将为此节点分配新的PodCIDR。

  • 该值有效的定义了在无需cilium operator参与时可用IP地址的缓冲区。

  • 默认值为8

  • Spec.IPAM.PodCIDRReleaseThreshold

  • 定义节点PodCIDR池最大空闲IP数。

  • 当PodCIDR的可用空闲IP总数大于该值,cilium agent会尝试释放当前未使用的PodCIDR。

  • 默认值是16。

参考文档

  1. 原文 https://docs.cilium.io/en/stable/concepts/networking/ipam/cluster-pool/
  2. https://docs.cilium.io/en/stable/gettingstarted/ipam-cluster-pool/#gsg-ipam-crd-cluster-pool
虽然没有直接关于 Cilium 官方测试套详细介绍的引用内容,但结合 Cilium 的架构和功能特点可以推测其官方测试套可能包含的方面。 Cilium 位于容器编排系统和 Linux Kernel 之间,主要组件有 Cilium Agent、Cilium Operator 和 Cilium CLI,其功能涉及网络配置和安全策略执行等,因此官方测试套可能包含以下类型的测试: #### 功能测试 - **网络功能测试**:验证 Cilium 为容器进行网络配置的能力,例如检查是否能正确分配 IP 地址、实现网络连通性等。就像在 Cilium 架构中,Cilium Agent 通过插件与容器运行时和编排系统交互,为容器进行网络配置,测试套会对这一过程进行验证。 - **安全策略测试**:测试 Cilium 执行安全策略的准确性,如 CIDR 策略是否能正确限制对外部服务的访问等。CIDR 策略用于定义往返于不受 Cilium 管理的 endpoints 的策略,测试套会确保这些策略按预期生效[^4]。 #### 性能测试 - **网络性能测试**:测量 Cilium 在不同网络场景下的性能指标,如网络吞吐量、延迟等。通过模拟不同的网络流量,评估 Cilium网络性能的影响。 - **资源占用测试**:监控 Cilium 运行过程中对系统资源的占用情况,包括 CPU、内存等,确保其不会过度消耗资源影响集群的正常运行。 #### 兼容性测试 - **与 Kubernetes 兼容性测试**:验证 Cilium 与不同版本的 Kubernetes 的兼容性,确保在各种 Kubernetes 环境下都能正常工作。 - **与其他组件兼容性测试**:测试 Cilium 与容器运行时、其他网络插件等组件的兼容性。 #### 稳定性测试 - **长时间运行测试**:让 Cilium 在集群中长时间运行,观察是否会出现崩溃、异常等情况,确保其稳定性。 - **压力测试**:在高负载情况下测试 Cilium 的性能和稳定性,模拟大量的容器创建、销毁和网络流量。 ### 示例代码 以下是一个简单的 Python 脚本示例,用于模拟测试 Cilium网络连通性: ```python import subprocess def test_network_connectivity(pod_ip): try: result = subprocess.run(['ping', '-c', '3', pod_ip], capture_output=True, text=True) if result.returncode == 0: print(f"Network connectivity to {pod_ip} is successful.") else: print(f"Network connectivity to {pod_ip} failed.") print(result.stderr) except Exception as e: print(f"An error occurred: {e}") # 替换为实际的 Pod IP 地址 pod_ip = "10.42.0.79" test_network_connectivity(pod_ip) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值