码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • k8s----网络通信机制(calico-IPIP,fiannel-VXLAN)caclicoctl命令


    文章目录

    • 1. calico(建议)纯三层
      • 1.1 网络模式
        • 1.1.1 案例1
        • 1.1.2 案例2
        • 1.1.3、其他配置
      • 1.2 BGP 边界网关协议
      • 1.2 适用场景。
      • 1.3 calico命令
      • 1.4 优势、劣势
      • 1.2 查看pod路由走向
      • 1.3 如何关掉IPIP(修改k8s网段)
        • `重新部署k8s`
      • 什么时候打开ipip协议
    • 2. flannel(三层实现二层)
        • 2.1 Flannel 网络模型 (`后端`),
        • 2.2 Flannel 组件的解释
        • 2.3 flannel pod状态
      • 2.4 VxLAN Directrouting
        • Flannel不同node上的pod的通信流程
    • 3. 如何改为:calico通信
      • 方法一:建议
      • 方法二:不建议
    • 4. 如何改为:flannel通信
      • 方法一:建议
      • 方法二:不建议
    • 如何选择网络模式
      • calico与flannel区别
    • 问题案例
      • 1、容器状态为被驱逐状态 Evicted,删掉重建后无法恢复
        • 问题原因
        • 解决方法
        • 在线修改方式
      • 2、华为云使用calico(bgp)导致整个网络瘫痪
        • 现象
        • 解决方法(使用vxlan隧道方式)
        • 问题原因,华为云不支持calico(bgp)
    • 完全卸载Calico网络插件

    1. calico(建议)纯三层

    默认使用IPIP协议:跨网段

    不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能。

    与Flannel不同,Calico不使用overlay网络

    使用BGP路由协议在主机之间路由数据包。这意味着在主机之间移动时,不需要将数据包包装在额外的封装层中。BGP路由机制可以本地引导数据包,而无需额外在流量层中打包流量。

    1.1 网络模式

    Calico是一个**纯三层**的网络解决方案,为容器提供多node间的访问通信,
    kubectl edit ippool default-ipv4-ippool

    1. ipipMode:等价于CALICO_IPV4POOL_IPIP,

      Always:始终使用IPIP隧道
      CrossSubnet:只有在跨子网的时候才使用IPIP隧道
      Never:不使用IPIP

    2. vxlanMode:vxlan隧道模式,不能与ipipMode同时使用(等价于CALICO_IPV4POOL_VXLAN)
      Always:始终使用VXLAN隧道
      CrossSubnet:只有在跨子网的时候才使用VXLAN隧道,如果物理主机在同一2层网络中则使用BGP动态路由通信方式
      Never:不使用VXLAN

    3. natOutgoing: true
      启用后,由本地池分配的容器房网外网的数据包会做伪装(masquerade),true,false

    4. nodeSelector: all()
      节点标签选择器,calico IPAM只为匹配的节点分配地址,默认:all()
      注意点:
      1、Calico覆盖网络支持IPIP、VXLAN两种协议,仅能启用其中一种。
      VXLAN协议禁止启用由"CALICO_IPV4POOL_VXLAN"项控制。

    1.1.1 案例1

    默认情况下,Calico清单启用IPIP封装。如果你期望Calico使用VXLAN封装模式,则需要在安装时候做以下操作:
    1、将"CALICO_IPV4POOL_IPIP “设置为"Never”,将"CALICO_IPV4POOL_VXLAN"设置为"Always".

    kind: DaemonSet
    apiVersion: apps/v1
    metadata:
      name: calico-node
      namespace: kube-system
      labels:
        k8s-app: calico-node
    spec:
      template:
        spec:
          containers:
            - name: calico-node
              image: calico/node:v3.14.2
              env:
                ...
                # Enable IPIP
                - name: CALICO_IPV4POOL_IPIP
                  value: "Never"
                - name: CALICO_IPV4POOL_VXLAN
                  value: "Always"
                ...
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    1.1.2 案例2

    2、如果你只想集群仅使用基于VXLAN协议的覆盖网络模式,用不到BGP动态路由模式的话,即为了节省一点资源,可以选择完全禁用Calico基于BGP的网络:

    • 将"calico_backend: “bird”“修改为"calico_backend: “vxlan””,这将禁用BIRD。

    • 从calico/node的readiness/liveness检查中去掉"- -bird-ready"和"- -bird-live"。

              livenessProbe:
                exec:
                  command:
                  - /bin/calico-node
                  - -felix-live
                 # - -bird-live
              readinessProbe:
                exec:
                  command:
                  - /bin/calico-node
                  # - -bird-ready
                  - -felix-ready
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    1.1.3、其他配置

    在清单文件的开始有ConfigMap描述Calico的配置内容,其重要的配置项解读如下:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: calico-config
      namespace: kube-system
    data:
      typha_service_name: "none"
      calico_backend: "bird"
      veth_mtu: "1440"
      cni_network_config: |-
        {
          "name": "k8s-pod-network",
          "cniVersion": "0.3.1",
          "plugins": [
            {
              "type": "calico",
              "log_level": "info",
              "datastore_type": "kubernetes",
              "nodename": "__KUBERNETES_NODE_NAME__",
              "mtu": __CNI_MTU__,
              "ipam": {
                  "type": "calico-ipam"
              },
              "policy": {
                  "type": "k8s"
              },
              "kubernetes": {
                  "kubeconfig": "__KUBECONFIG_FILEPATH__"
              }
            },
            {
              "type": "portmap",
              "snat": true,
              "capabilities": {"portMappings": true}
            },
            {
              "type": "bandwidth",
              "capabilities": {"bandwidth": true}
            }
          ]
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    1、typha_service_name: “none”
    Typha是Calico的一个扩展组件,用于Calico通过Typha直接与Etcd通信,而不是通过kube-apiserver。通常当K8S的规模超过50个节点的时候推荐启用它,以降低kube-apiserver的负载。
    支持值:

    • none,关闭Typha功能。 calico_typha,启用Typha功能。

    2、calico_backend: “bird”
    设置Calico使用的后端机制。支持值:
    bird,开启BIRD功能,根据Calico-Node的配置来决定主机的网络实现是采用BGP路由模式还是IPIP、VXLAN覆盖网络模式。
    vxlan,纯VXLAN模式,仅能够使用VXLAN协议的覆盖网络模式。

    3、veth_mtu: “0”
    设置虚拟接口"calicoxxxxx"的MTU值,默认情况下MTU是自动检测的,不需要显示的设置此字段。
    可以通过提供一个非零值来设置它。
    MTU,Maximum Transmission Unit,最大传输单元,网络设备一次发送数据包大小,单位为Byte,MTU值约小则传输速率约高,此值应由系统设置的最合理的值,通常不需要我们手动设置,最大值为1500。

    4、cni_network_config:
    在每个节点上都要安装的CNI网络插件配置。保持默认就好。
    5、spec.calicoNetwork
    配置Calico网络。

    6、spec.calicoNetwork.bgp
    开启或禁用BGP路由功能。支持值:Enabled, Disabled。

    7、spec.calicoNetwork.ipPools
    IPPool,为由节点筛选器指定节点上创建Pod分配的单个或多个地址池,以及要使用的Pod网络的实现方法。

    8、spec.calicoNetwork.ipPools.blockSize(int32)
    块大小,子网划分技术,指从CIDR(如:10.2

  • 相关阅读:
    likeadmin和fastapi的bug
    xss盲打
    租用独立服务器有哪些常见的误区?
    手机+卫星的科技狂想
    python通过docker打包执行
    深入理解 Swift Combine
    数据结构 - 平衡二叉树(AVL树)概念 | 插入与平衡调整
    云原生架构案例分析_3.某快递公司核心业务系统云原生改造
    JAVA---RMI详解1
    管理数据质量、准确性和一致性的策略
  • 原文地址:https://blog.csdn.net/weixin_45697293/article/details/126441910
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号