Kubernetes之部署calico网络Update

部署calico网络

Calico组件介绍:

  • Felix:Calico agent 运行在每台node上,为容器设置网络信息:IP,路由规则,iptable规则等
  • etcd:calico后端存储
  • BIRD: BGP Client: 负责把Felix在各node上设置的路由信息广播到Calico网络( 通过BGP协议)。
  • BGP Route Reflector: 大规模集群的分级路由分发。
  • calico: calico命令行管理工具

calico的部署:

参照官方文档:https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/hosted

  1. 下载部署的yaml文件:
    wget https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/rbac.yaml
    wget https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/calico.yaml
  2. 对于RBAC文件,不用做修改,直接创建即可:
    $ kubectl create -f calico-rbac.yaml
    clusterrole "calico-kube-controllers" created
    clusterrolebinding "calico-kube-controllers" created
    clusterrole "calico-node" created
    clusterrolebinding "calico-node" created
  3. 配置calico
    $ vim calico.yaml
    data:
    #Configure this with the location of your etcd cluster.
    etcd_endpoints: "https://10.3.1.15:2379,https://10.3.1.16:2379,https://10.3.1.17:2379"
    
    #If you‘re using TLS enabled etcd uncomment the following.
    #You must also populate the Secret below with these files.
    etcd_ca: "/calico-secrets/etcd-ca"   #取消原来的注释即可
    etcd_cert: "/calico-secrets/etcd-cert"
    etcd_key: "/calico-secrets/etcd-key"
    ....
    apiVersion: v1
    kind: Secret
    type: Opaque
    metadata:
    name: calico-etcd-secrets
    namespace: kube-system
    data:
    etcd-key: (cat /etc/kubernetes/ssl/etcd-key.pem | base64 | tr -d ‘\n‘) #将输出结果填写在这里
    etcd-cert: (cat /etc/kubernetes/ssl/etcd.pem | base64 | tr -d ‘\n‘) #将输出结果填写在这里
    etcd-ca: (cat /etc/kubernetes/ssl/ca.pem | base64 | tr -d ‘\n‘) #将输出结果填写在这里
    #如果etcd没用启用tls则为null
    #上面是必须要修改的参数,文件中有一个参数是设置pod network地址的,根据实际情况做修改:
    - name: CALICO_IPV4POOL_CIDR
     value: "192.168.0.0/16"

    关于ConfigMap部分主要参数如下:

    • etcd_endpoints:Calico使用etcd来保存网络拓扑和状态,该参数指定etcd的地址,可以使用K8S Master所用的etcd,也可以另外搭建。calico_backend:Calico的后端,默认为bird。
    • cni_network_config:符合CNI规范的网络配置,其中type=calico表示,Kubelet从 CNI_PATH(默认为/opt/cni/bin)找名为calico的可执行文件,用于容器IP地址的分配。
    • etcd如果配置了TLS安全认证,则还需要指定相应的ca、cert、key等文件

    关于通过DaemonSet部署的calico-node服务的主要参数:
    该POD中主包括如下两个容器:
    calico-node:calico服务程序,用于设置Pod的网络资源,保证pod的网络与各Node互联互通,它还需要以HostNetwork模式运行,直接使用宿主机网络。
    install-cni:在各Node上安装CNI二进制文件到/opt/cni/bin目录下,并安装相应的网络配置文件到/etc/cni/net.d目录下。

calico-node服务的主要参数:

  • CALICO_IPV4POOL_CIDR: Calico IPAM的IP地址池,Pod的IP地址将从该池中进行分配。
  • ALICO_IPV4POOL_IPIP:是否启用IPIP模式,启用IPIP模式时,Calico将在node上创建一个tunl0的虚拟隧道。
  • FELIX_LOGSEVERITYSCREEN: 日志级别。
  • FELIX_IPV6SUPPORT : 是否启用IPV6。
  • IP Pool可以使用两种模式:BGP或IPIP。使用IPIP模式时,设置 CALICO_IPV4POOL_IPIP="always",不使用IPIP模式时,设置为"off",此时将使用BGP模式。
  • IPIP是一种将各Node的路由之间做一个tunnel,再把两个网络连接起来的模式,启用IPIP模式时,Calico将在各Node上创建一个名为"tunl0"的虚拟网络接口。

4.创建:

$ kubectl create -f calico.yaml
configmap "calico-config" created
secret "calico-etcd-secrets" created
daemonset "calico-node" created
deployment "calico-kube-controllers" created
deployment "calico-policy-controller" created
serviceaccount "calico-kube-controllers" created
serviceaccount "calico-node" created

calico# kubectl get deployment,pod -n kube-system
NAME                              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/calico-kube-controllers    1         1         1            1           4m
deploy/calico-policy-controller   0         0         0            0           4m

NAME                                           READY     STATUS    RESTARTS   AGE
po/calico-kube-controllers-56d9f8c44c-6hftd    1/1       Running   0          4m
po/calico-node-6k827                           2/2       Running   0          4m
po/calico-node-wfbpz                           2/2       Running   0          4m
#calico-node用的是daemonset,会在每个node上启动一个

创建的资源如下:
DaemonSet:
name: calico-node 这个pod里运行两个容器
hostNetwork: true
serviceAccountName: calico-node

 #两个容器:
      name: calico-node
      image: quay.io/calico/node:v2.6.5 

      name: install-cni
      image: quay.io/calico/cni:v1.11.2
      command: ["/install-cni.sh"]

Deployment

    name ---calico-kube-controllers replicas: 1   #网络策略控制器
    serviceAccountName: calico-kube-controllers
    containers:
          name: calico-kube-controllers
          image: quay.io/calico/kube-controllers:v1.0.2

5.修改kubelet配置:
设置各node上Kubelet服务的启动参数: --network-plugin=cni, 可能还要加上这两个参数:

  • --cni-conf-dir:CNI插件的配置文件目录,默认为/etc/cni/net.d 该目录下的配置文件内容需要符合CNI规范
  • --cni-bin-dir:CNI插件的可执行文件目录,默认为/opt/cni/bin
  • 设置 master上的kube-apiserver服务的启动参数: --allow-privileged=true (因为calico-node需要以特权模式运行在各node上),设置好后,重新启动kubelet。

这样通过calico就完成了Node间容器网络的设置 ,在后续的pod创建过程中,Kubelet将通过CNI接口调用 calico进行Pod的网络设置包括IP地址,路由规则,Iptables规则。

  1. 验证各Node间网络联通性:
    kubelet启动后主机上就生成了一个tunl0接口。

    #第一台Node查看:
    [email protected]# ip route
    192.168.77.192/26 via 10.3.1.17 dev tunl0  proto bird onlink
    #第二台Node查看:
    [email protected]# ip route
    192.168.150.192/26 via 10.3.1.16 dev tunl0  proto bird onlink 

    每台node上都自动设置了到其它node上pod网络的路由,去往其它节点的路都是通过tunl0接口,这就是IPIP模式。如果设置CALICO_IPV4POOL_IPIP="off" ,即不使用IPIP模式,则Calico将不会创建tunl0网络接口,路由规则直接使用物理机网卡作为路由器转发。

原文地址:http://blog.51cto.com/newfly/2085836

时间: 2024-10-02 03:54:53

Kubernetes之部署calico网络Update的相关文章

Kubernetes之部署calico网络

部署calico网络 Calico组件: Felix:Calico agent     运行在每台node上,为容器设置网络信息:IP,路由规则,iptable规则等 etcd:calico后端存储 BIRD:  BGP Client: 负责把Felix在各node上设置的路由信息广播到Calico网络 , 通过BGP协议来着 BGP Route Reflector: 大规则集群的分级路由分发. calico: calico命令行管理工具 为Node节点部署calico网络,参照官方文档:htt

如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)

Calico 是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个 IP,每个 host 都是 router,把不同 host 的容器连接起来.与 VxLAN 不同的是,Calico 不对数据包做额外封装,不需要 NAT 和端口映射,扩展性和性能都很好. 与其他容器网络方案相比,Calico 还有一大优势:network policy.用户可以动态定义 ACL 规则,控制进出容器的数据包,实现业务需求. 实验环境描述 Calico 依赖 etcd 在不同主机间共享和交换信息,存储 Cal

kubernetes容器集群部署Flannel网络

Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来. VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封并将数据发送给目的地址. Fannel:Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP.VXLAN.AWS VPC和GCE路由等数据转发方式. 多主机容器网络通信其他主流方案:隧道方案(We

kubernetes集成calico网络

1.物理环境 172.16.0.55 k8s1  master 172.16.0.57 k8s2  node 172.16.0.47 k8s3  node [[email protected] ~]# docker ps |grep per a394542f2340        alectolytic/netperf:latest                                   "sleep 36000000"         16 hours ago      

Centos下Kubernetes+Flannel部署(新)

一.准备工作 1) 三台centos主机 k8s master: 10.11.151.97  tc-151-97 k8s node1: 10.11.151.100  tc-151-100 k8s node2: 10.11.151.101  tc-151-101 2)程序下载(百度网盘) k8s-1.1.3,Docker-1.8.2,ETCD-2.2.1,Flannel-0.5.5 二.ETCD集群部署 ETCD是k8s集群的基础,可以单结点也可以以集群的方式部署.本文以三台主机组成ETCD集群进

[译]Kubernetes 分布式应用部署和人脸识别 app 实例

原文地址:KUBERNETES DISTRIBUTED APPLICATION DEPLOYMENT WITH SAMPLE FACE RECOGNITION APP 原文作者:skarlso 译文出自:掘金翻译计划 好的,伙计,让我们静下心来.下面将会是一个漫长但充满希望和有趣的旅程. 我将使用 Kubernetes 部署分布式应用程序.我试图创建一个类似于真实世界 app 的应用程序.显然,由于时间和精力有限,我不得不忽略一些细节部分. 我的重点将放在 Kubernetes 和应用部署上.

轻松部署calico

一.资源 官方文档 https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration 二.Calico 部署注意事项 在使用 Calico 前当然最好撸一下官方文档,地址在这里 Calico 官方文档,其中部署前需要注意以下几点 官方文档中要求 kubelet 配置必须增加 --network-plugin=cni 选项 kube-proxy 组件必须采用 iptables proxy

kubernetes 二进制部署ansible playbook 一键生成

脚本仓库地址 https://github.com/qist/k8s #支持 Ubuntu 18及以上的系统,CentOS7及CentOS8 系统 # k8s 版本 14,15,16,17 号版本 ansible 安装 #Ubuntu 系列安装 apt -y install ansible #CentOS 8 安装 dnf -y install ansible # CentOS 7 安装 yum -y install ansible # 修改ansible 配置 ## 说明id_rsa_stor

System Center 2012 R2 CM系列之部署Windows Server Update Services(WSUS)服务器

1. Windows更新服务器(Windows Server Update Service (WSUS))介绍 1) 技术概述: Windows Server Update Services (WSUS) 启用信息技术管理员部署最新的 Microsoft 产品更新.在 Windows Server 2012 中,WSUS 是可安装以管理和分配更新的服务器角色.WSUS 服务器可以作为组织内其他 WSUS 服务器的更新源.充当更新源的 WSUS 服务器被称为上游服务器.在 WSUS 实现过程中,网