首页 > 其他分享 >Calico 网络基础配置

Calico 网络基础配置

时间:2023-08-25 20:00:10浏览次数:43  
标签:node name IP 配置 网络 calico Calico VXLAN

Calico 网络配置概述

通常,我们建议在没有网络覆盖/封装的情况下运行Calico。这为您提供了最高性能和最简单的网络;离开工作负载的数据包就是传输到网络上的数据包。

然而,当在无法轻松了解工作负载IP的底层网络上运行时,选择性地使用覆盖/封装可能会很有用。一个常见的例子是,如果您在AWS中跨多个VPC/子网使用Calico网络。在这种情况下,Calico可以选择性地只封装在VPC/子网之间路由的流量,并在每个VPC/个子网内不封装地运行。您还可以决定将整个Calico网络封装为覆盖网络来运行,这是一种快速入门的方法,无需在底层网络中设置BGP对等或其他路由信息。

Calico 网络概念

路由工作负载 IP 地址

网络通过静态路由或 BGP 路由分配等第 3 层路由技术或第 2 层地址学习来了解工作负载 IP 地址。因此,它们可以将未封装的流量路由到最终目的地端点的正确主机。但是,并非所有网络都能够路由工作负载 IP 地址。例如,您不拥有硬件的公共云环境、跨 VPC 子网边界的 AWS 以及您无法通过 BGP 对等 Calico 与底层网络或轻松配置静态路由的其他场景。这就是 Calico 支持封装的原因,因此您可以在工作负载之间发送流量,而无需底层网络了解工作负载 IP 地址。

封装类型

Calico 支持两种类型的封装:VXLAN 和 IP in IP。在某些不支持 IP in IP 的环境中(例如 Azure)支持 VXLAN。VXLAN 的每个数据包开销稍高,因为标头较大,但除非您运行网络密集型工作负载,否则您通常不会注意到差异。两种封装类型之间的另一个小区别是 Calico 的 VXLAN 实现不使用 BGP,而 Calico 的 IP in IP 实现在 Calico 节点之间使用 BGP。

跨子网

通常,仅当流量经过无法自行路由工作负载 IP 地址的路由器时,才需要对工作负载流量进行封装。Calico 可以对以下内容执行封装:所有流量、无流量或仅对跨越子网边界的流量执行封装。

Calico 网络最佳实践

Calico有一个选项,可以选择性地只封装跨越子网边界的流量。我们建议将跨子网选项与IP-in-IP或VXLAN一起使用,以最大限度地减少封装开销。跨子网模式在AWS多AZ部署、Azure VNET以及使用路由器连接具有L2连接的节点池的网络中提供了更好的性能。

请注意,切换封装模式可能会导致正在进行的连接中断。应制定相应的计划。

Calico 网络资源自定义

1. DaemonSet/calico-node 容器。
2. Calico CNI二进制文件和网络配置。
3. deployment/calico-kube-controllers 控制器。
4. secret/calico-etcd-secrets 
5. ConfigMap/calico-config 配置安装的参数。

IP Pool

IP 池资源清单

apiVersion: projectcalico.org/v3     
kind: IPPool
metadata:
  name: <string>                 # 此 IPPool 资源的名称
spec:
  cidr: <string>                 # 用于此池的 IP 范围,有效的 IPv4 或 IPv6 CIDR。子网长度必须至少足够大以容纳单个块(默认情况下对于 IPv4 的掩码为/26,IPv6 的掩码为/122 )
  blockSize:<int>               # 此池使用的分配块的CIDR大小。块按需分配给主机,并用于聚合路由。只有在创建池时才能设置该值。IPv4为20至32(含),IPv6为116至128(含),默认情况下对于 IPv4 的掩码为/26,IPv6 的掩码为/122
  ipipMode: <string>             # 定义使用IPIP的模式。不能与vxlanMode同时设置。 可选值:Always, CrossSubnet, Never      
  vxlanMode: <string>            # 定义使用vxlan的模式。不能与ipipMode同时设置。 可选值:Always, CrossSubnet, Never
  natOutgoing: <boolean>         # 启用后,从该池中的Calico网络容器发送到任何Calico IP池之外的目的地的数据包将被伪装。可选值:true, false
  disabled: <boolean>            # 如果设置为true,Calico IPAM将不会分配此池中的地址。可选值:true, false
  disableBGPExport: <boolean>    # 禁用导出通过BGP从此IP池的CIDR路由。可选值:true, false
  nodeSelector: <selector>       # 选择Calico IPAM应将此池中的地址分配给的节点。
  allowedUses: <list of strings> # 控制池是否用于某些类型的自动分配。可选值:Workload, Tunnel, 默认为["Workload", "Tunnel"]
    - Workload
    - Tunnel

示例

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: my.ippool-1
spec:
  cidr: 10.1.0.0/16
  ipipMode: CrossSubnet
  natOutgoing: true
  disabled: false
  nodeSelector: all()
  allowedUses:
    - Workload
    - Tunnel

配置默认 IP 池

默认 IP 池由 Calico 在安装时自动配置。您可以根据安装方法配置这些默认 IP 池。

operator 部署

对于运营商管理的集群,您可以在默认安装的IP池部分配置封装。例如,以下安装片段将跨子网启用VXLAN。
kind: Installation
apiVersion: operator.tigera.io/v1
metadata:
  name: default
spec:
  calicoNetwork:
    ipPools:
      - cidr: 192.168.0.0/16
        encapsulation: VXLANCrossSubnet

manifests 部署

对于Calico的清单安装,您可以在Calico节点守护程序集的环境中使用CALICO_IPV4POOL_VXLAN和CALICO_IPV4POOL_IPIP(以及用于IPv6的CALICO_Ipv6POOL_VXLAN)环境变量来控制默认的IP池封装模式。使用CALICO_IPV4POOL_CIDR环境变量来控制默认 IP 范围
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Always"
# Enable or Disable VXLAN on the default IP pool.
- name: CALICO_IPV4POOL_VXLAN
  value: "Never"
# Enable or Disable VXLAN on the default IPv6 IP pool.
- name: CALICO_IPV6POOL_VXLAN
  value: "Never"
# IPV4地址池的定义,value值需要与kube-controller-manager的--cluster-network选项的值保持一致
- name: CALICO_IPV4POOL_CIDR
  value: "192.168.0.0/16"

查看IP池

# calicoctl get ipPool default-ipv4-ippool -o yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-ipv4-ippool
spec:
  blockSize: 24
  cidr: 10.244.0.0/16
  ipipMode: Always
  natOutgoing: true
  nodeSelector: all()
  vxlanMode: Neve

IPAM

在地址分配方面,Calico在JSON格式的CNI插件配置文件中使用专有的calico-ipam插件,该插件并不会使用Node.podCIDR 中定义的子网作为节点本地为Pod分配地址的地址池,而是根据Calico插件为各节点配置的地址池进行地址分配。

使用 host-local IPAM

operator 部署

kind: Installation
apiVersion: operator.tigera.io/v1
metadata:
  name: default
spec:
  calicoNetwork:
    ipPools:
      - cidr: 192.168.0.0/16
      - cidr: 2001:db8::/64
  cni:
    type: Calico
    ipam:
      type: HostLocal

manifests 部署

需要在部署清单中DaemonSet/calico-node资源的Pod模板的calico-node容器添加USE_POD_CIDR环境变量值设置为true,并修改ConfigMap/calico-config资源中cni_network_config键的plugins.ipam.type值为host-local,且使用podCIDR为子网
使用CNI主机本地IPAM插件时,subnet字段允许使用两个特殊值usePodCidr和usePodCirIPv6。这告诉插件根据Node.Spec.PodCIDR字段从Kubernetes API中确定要使用的子网。Calico不使用范围的网关字段,因此该字段不是必需的,如果存在,则会被忽略。
DaemonSet/calico-node资源的Pod模板的calico-node容器添加USE_POD_CIDR环境变量值设置为true
# Calico默认并不会从Node.Spec.PodCIDR中分配地址,但可通过将如下变量设置为true并结合host-local这一IPAM插件来强制从PodCIDR中分配地址
- name: USE_POD_CIDR
  value: "true"
ConfigMap/calico-config资源中cni_network_config键的plugins.ipam.type值为host-local,且使用podCIDR为子网
{
  "name": "any_name",
  "cniVersion": "0.1.0",
  "type": "calico",
  "kubernetes": {
    "kubeconfig": "/path/to/kubeconfig",
    "node_name": "node-name-in-k8s"
  },
  "ipam": {
    "type": "host-local",
    "ranges": [[{ "subnet": "usePodCidr" }], [{ "subnet": "usePodCidrIPv6" }]],
    "routes": [{ "dst": "0.0.0.0/0" }, { "dst": "2001:db8::/96" }]
  }
}
在Kubernetes API数据存储中使用host-local IPAM时,配置在calico/node和Typha deployemt中的node.podCIDR字段设置环境变量USE_POD_CIDR=true。

查看IP分配情况

# calicoctl ipam show --show-blocks
+----------+-------------------------------------------+------------+------------+-------------------+
| GROUPING |                   CIDR                    | IPS TOTAL  | IPS IN USE |     IPS FREE      |
+----------+-------------------------------------------+------------+------------+-------------------+
| IP Pool  | 10.65.0.0/16                              |      65536 | 5 (0%)     | 65531 (100%)      |
| Block    | 10.65.79.0/26                             |         64 | 5 (8%)     | 59 (92%)          |
| IP Pool  | fd5f:abcd:64::/48                         | 1.2089e+24 | 7 (0%)     | 1.2089e+24 (100%) |
| Block    | fd5f:abcd:64:4f2c:ec1b:27b9:1989:77c0/122 |         64 | 7 (11%)    | 57 (89%)          |
+----------+-------------------------------------------+------------+------------+-------------------+

IP-in-IP网络

默认起用的网络。

从 IP-in-IP 切换到 VXLAN

将环境变量名称CALICO_IPV4POOL_IPIP替换为CALICO_IPV 4POOL_VXLAN。将新变量的值保留为“Always”。
完全禁用Calico IP-in-IP基于BGP的网络:
  将ConfigMap/calico-node 中 calicobackend:“bird”替换为calicobackend:“vxlan”。这将禁用BIRD。
  在DaemonSet/calico-node资源的Pod模型中禁用calico-node容器的存活探针和就绪探针对bird的检测

禁用IP-in-IP

# 设置在IPv4类型的地址池上启用的IP-IP及其类型,支持3种可用值 Always(全局流量)、Cross-SubNet(跨子网流量)和Never
- name: CALICO_IPV4POOL_IPIP
  value: "Never"
# 是否在IPV4地址池上启用VXLAN隧道协议,取值及意义与Flannel的VXLAN后端相同,但在全局流量启用VXLAN时将完全不再需要BGP网络,建议将相关的组件禁用
- name: CALICO_IPV4POOL_VXLAN
  value: "Always"

禁用BGP

将ConfigMap/calico-node 中 calicobackend:“bird”替换为calicobackend:“vxlan”。这将禁用BIRD。
kind: ConfigMap
apiVersion: v1
metadata:
  name: calico-config
  namespace: kube-system
data:
  # Typha is disabled.
  typha_service_name: "none"
  # Configure the backend to use.
  calico_backend: "vxlan"
  ...
在DaemonSet/calico-node资源的Pod模型中禁用calico-node容器的存活探针和就绪探针对bird的检测
livenessProbe:
  exec:
    command:
      - /bin/calico-node
      - -felix-live
      # - -bird-live
readinessProbe:
  exec:
    command:
      - /bin/calico-node
      # - -bird-ready
      - -felix-ready

参考文档

https://docs.tigera.io/calico/latest/networking/configuring/vxlan-ipip

标签:node,name,IP,配置,网络,calico,Calico,VXLAN
From: https://www.cnblogs.com/wangguishe/p/17651504.html

相关文章

  • VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)
    账号秘密都对,但是缺登录不成功的问题诀窍可能是:在属性设置中把LeetCode版本改成cn。点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可。  大家可移步原博文:https://blog.csdn.net/qq_37263248/article/details/124304402......
  • 网络请求-Android篇(Okhttp和Retrofit)
    一.OkHttp的介绍和基本用法OkHttp是一个流行的开源Java和Android应用程序的HTTP客户端。它由SquareInc.开发,提供了一种简单高效的方式来进行应用程序中的HTTP请求。要在Java或Android项目中使用OkHttp,您需要将OkHttp依赖项添加到您的build.gradle文件中。然后,您可以创建一个......
  • Nodejs 安装后的小配置
    Nodejs安装小配置配置npm配置全局安装位置和缓存路径位置npmconfigsetprefix"D:\Environment\node\node_global"npmconfigsetcache"D:\Environment\node\node_cache"配置npm​仓库镜像#设置淘宝源npmconfigsetregistryhttps://registry.npm.taobao.org......
  • 资深网络工程师的网络排障全过程,太强了!【附工具下载】
    下午好,我的网工朋友我们知道,交换机是局域网中一种很重要的网络设备,它的工作状态与客户端系统的上网状态息息相关。可是,在实际工作过程中,交换机的状态很容易受到外界的干扰,那样一来局域网中就会出现各种各样的网络故障。为了保证网络运行稳定,我们必须在平时对交换机进行妥善管理、维......
  • Feign的自定义配置
           ......
  • 通过运行中的容器生成 Docker Compose 配置文件
    背景笔者之前有一次不小心删除了原始的docker-compose.yml文件,不过正在运行的Docker容器还在,找了许久,发现一个方法可以从这些容器中生成一个等效的DockerCompose配置文件。本文将介绍使用autocompose工具从正在运行的容器中反向生成docker-compose.yml文件。安装所需工......
  • django配置swagger自动生成接口文档以及自定义参数设置
    首先安装swagger所用的包pipinstalldrf-yasg然后再settings.py中注册app     接口采用的token认证,在settings.py配置认证方式SWAGGER_SETTINGS={'USE_SESSION_AUTH':False,'SECURITY_DEFINITIONS':{......
  • Nacos配置管理-配置热更新
                 ......
  • 微服务配置拉取
            ......
  • 网络规划设计师真题解析--IP地址类(一)
    将地址块192.168.0.0/24按照可变长子网掩码的思想进行子网划分,若各部门可用主机地址需求如下表所示,则共有(27)种划分方案,部门3的掩码长度为(28)。(2018年)(27)A.4B.8C.16D.32(28)A.25B.26C.27D.28部门所需地址总数部门1100部门250部门316部门410部门58答案:(27)C(28)C解析:(27)部门所......