ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

K8S网络插件-calico安装

2022-01-27 17:00:45  阅读:516  来源: 互联网

标签:插件 kube 网段 IPIP 节点 POD K8S calico


本文参考:kubernetes进阶实战 马永亮注

1、介绍

calico是一个三层的虚拟网络解决方案,他把每个节点都当做虚拟路由器,每个POD都是虚拟路由器下的的终端,各节点通过BGP协议生成路由规则,实现pod互通

与flannel相比calico支持网络策略,允许用户动态定义访问控制规则以管控进出容器的数据报文,为POD间通信按需设置安全策略

calico默认使用IPIP,还支持XLAN 实现跨网段节点间POD的通信,BGP实现同网段节点之间的POD通信

具体信息:https://projectcalico.docs.tigera.io/about/about-calico

2、calico部署

calico/node:每个节点服务器上的代理,提供felix、bird4、bird6和confd等守护进程,可以在每个节点上独立与k8s集群部署,也可以以deamonset,运行在k8s集群上(后面实例也才有这种方式)

calico/kube-controller:calico与k8s协同的插件

获取清单文件:curl https://docs.projectcalico.org/manifests/calico.yaml -O

2.1、清单中的重要配置:

主要配置在calico.yaml 中的calico-node deamonset中环境变量设置

CALICO_IPV4POOL_IPIP:启用IPIP隧道配置

Always:全流量使用IPIP隧道转发

Cross-SubNet:跨网段节点使用IPIP隧道转发,同一网段节点使用BGP路由直接转发

Never:不启用IPIP

CALICO_IPV4POOL_VXLAN::启用VXLAN配置

Always:全流量使用VXLAN隧道转发

Cross-SubNet:跨网段节点使用VXLAN隧道转发,同一网段节点使用BGP路由直接转发

Never:不启用VXLAN

2.2、配置POD网段和网卡

在calico-node 容器中设置环境变量:

container:

    env:

     - name: IP_AUTODETECTION_METHOD

        value: interface=ens37

     - name: CALICO_IPV4POOL_CIDR

value: "10.200.0.0/16"    #注意和安装k8s集群时为pod分配的网段一致

             - name: CALICO_IPV4POOL_BLOCK_SIZE
               value: "24"   #以该掩码位数,给节点分配POD网段,默认值为26

 3、实验

环境:

kube-master01: 10.0.2.200/24

kube-node01: 10.0.2.201/24

kube-node02: 10.0.2.202/24

kube-node04: 10.0.1.204/24

测试应用

kind: Namespace
apiVersion: v1
metadata:
  name: test
  namespace: test

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: test
  namespace: test
spec:
  replicas: 4
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      name: demo
      namespace: test
      labels:
        app: demo
    spec:
      containers:
      - name: demov10
        image: ikubernetes/demoapp:v1.0
        imagePullPolicy: Always
        ports:
        - name: demov10
          containerPort: 80
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 50m
            memory: 50Mi
test.yaml

3.1、CALICO_IPV4POOL_VXLAN 设置为:cross-subnet

CALICO_IPV4POOL_IPIP设置为:Nerver

每个节点一个calico-node pod

外加一个calico-kube-controllers pod

可以看出各节点获得的POD网段如下:

kube-master01:10.200.235.0/244

kube-node01:10.200.2.0/24

kube-node02: 10.200.175.0/24

kube-node04: 10.200.255.0/24

每个节点会生成一个calico.vxlan 接口,用于跨网段节点的POD间通信

10.20.255.0在kube-node04 10.0.1.204与其余三个节点不在一个网络,通过vxlan通信,其余节点间pod通信,直接通过BGP路由通信

3.2、CALICO_IPV4POOL_VXLAN 设置为:Nerver

CALICO_IPV4POOL_IPIP设置为:ross-subnet

跨网段节点POD使用IPIP,同网段节点POD直接通过BGP路由

每个节点都会产生一个tunl0用于IPIP封装,供跨网段节点间POD通新,同网段节点间的POD通信,直接通过BGP路由

在node节点会为每一个POD生成一个接口和POD对应

跨网段节点间POD通信

kube-node01上的pod访问kube-node04上的pod,

分别在kube-node04的ens37和tunl0口抓包分析:

 

可以看到外层IP时节点IP,内层IP为POD的IP,tunl0上也能抓到POD IP通信的报文

同一网段节点POD通信

kube-node01上的pod访问kube-node02上的pod

在kube-node02 ens37上抓包,可以看到报文未经过IPIP封装

 

 

 

标签:插件,kube,网段,IPIP,节点,POD,K8S,calico
来源: https://www.cnblogs.com/cnblo/p/15849297.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有