• kubernetes calico-network


    要求

    1.已存在的k8s集群版本大于v1.1,想要使用NetworkPolicy,需要大于v1.3.0

    2.可以被所有节点访问的etcd集群(可以和k8s共享etcd集群,但是最好建立一个独立的集群)

    calico组件

    整合ks8/calico一共有三个组件:

    1.每个节点运行一个calico/node容器;包含了calico路由必须的bgp客户端

    2.calico-cni网络插件的二进制文件(这是两个二进制可执行文件和配置文件的组合);直接与kubelet集成,运行在每节点从而发现被创建的容器,添加容器到calico网络

    3.如果想要使用NetworkPolicy,需要安装Calico policy controller;实现了NetworkPolicy.

    安装calico组件

    两种方式安装:

    1.手动安装

    2.kubernetes-hosted安装(1.4以上版本)

    手动安装

    1.运行 calico/node 并且配置节点

    master节点和每个node节点需要calico/node容器,每个节点也记录在calico的数据存储中(etcd)

    可以使用calicoctl命令完成

    [plain] view plain copy 
    1. # Download and install `calicoctl`  
    2. wget https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl   
    3. sudo chmod +x calicoctl  
    4.   
    5. # Run the calico/node container  
    6. sudo ETCD_ENDPOINTS=http://<ETCD_IP>:<ETCD_PORT> ./calicoctl node  

    查看calicoctl_node文档获取更多信息 

    systemd单元文件示例(calico-node.service)

    如果使用systemd作为初始化系统,接下来的服务文件可以被使用:

    [plain] view plain copy 
    1. [Unit]  
    2. Description=calicoctl node  
    3. After=docker.service  
    4. Requires=docker.service  
    5.   
    6. [Service]  
    7. User=root  
    8. Environment=ETCD_ENDPOINTS=http://<ETCD_IP>:<ETCD_PORT>  
    9. PermissionsStartOnly=true  
    10. ExecStartPre=/usr/bin/wget -N -P /opt/bin https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl  
    11. ExecStartPre=/usr/bin/chmod +x /opt/bin/calicoctl  
    12. ExecStart=/opt/bin/calicoctl node --detach=false  
    13. Restart=always  
    14. RestartSec=10  
    15.   
    16. [Install]  
    17. WantedBy=multi-user.target  

    替换<ETCD_IP>:<ETCD_PORT>为你自己的配置

    2.下载配置你的calico cni插件

    k8s kubelet组件调用calico和calico-ipam插件

    下载二进制文件,确保可被执行

    [plain] view plain copy 
    1. wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico  
    2. wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam  
    3. chmod +x /opt/cni/bin/calico /opt/cni/bin/calico-ipam  


    推荐作为kubelet工作过程的一部分

    calico cni插件需要一个标准的cni配置文件,policy部分只有当你为networkpolicy部署calico/kube-policy-controller时被需要

    [plain] view plain copy 
    1. mkdir -p /etc/cni/net.d  
    2. cat >/etc/cni/net.d/10-calico.conf <<EOF  
    3. {  
    4.     "name": "calico-k8s-network",  
    5.     "type": "calico",  
    6.     "etcd_endpoints": "http://<ETCD_IP>:<ETCD_PORT>",  
    7.     "log_level": "info",  
    8.     "ipam": {  
    9.         "type": "calico-ipam"  
    10.     },  
    11.     "policy": {  
    12.         "type": "k8s"  
    13.     }  
    14. }  
    15. EOF  

    替换<ETCD_IP>:<ETCD_PORT>为你自己的配置 

    查看配置指南获取更多关于calico cni的信息

    3.部署calico网络控制器

    calico/kube-policy-controller实现了k8s networkpolicy api通过k8s api监听pod,namespace,networkpolicy事件从而做出对应的时间相应,通过rs运行为一个单独的pod
    安装policy controller:

    下载policy controlly mainifest

    修改<ETCD_ENDPOINTS>配置项

    安装kubectl

    [plain] view plain copy 
    1. $ kubectl create -f policy-controller.yaml  

    一段时间后,你应该可以看到policy controller已经处于运行状态 

    [plain] view plain copy 
    1. $ kubectl get pods --namespace=kube-system  
    2. NAME                                     READY     STATUS    RESTARTS   AGE  
    3. calico-policy-controller                 2/2       Running   0          1m  


    kubernetes-hosted安装


    使用k8s安装calico的方式只使用于v1.4.0以上版本,目前处于试验阶段

    在使用k8s安装calico的方式之前,你必须有一个标准的使用cni网络的k8s集群,有很多方式实现,不过在这里我们不会都覆盖,必须满足安装calico需要的配置

    下载calico self-hosted mainifest文件,calico.yaml

    编辑configmap用于配置calico的deployment,然后通过k8s安装mainifest

    [plain] view plain copy 
    1. kubectl create -f calico.yaml  

    在kube-system namespace中你可以看到calico服务启动
    查看 self-hosted文档获取更多信息

    配置k8s

    1.配置kubelet

    需要配置kubelet 让pod启动时使用calico网络插件,kubelet可以配置使用calico在启动时配置参数:

    [plain] view plain copy 
    1. --network-plugin=cni  
    2. --network-plugin-dir=/etc/cni/net.d  


    查看kubelet文档获取更多信息

    kubelet.service单元配置文件示例:

    [plain] view plain copy 
    1. [Unit]  
    2. Description=Kubernetes Kubelet  
    3. Documentation=https://github.com/kubernetes/kubernetes  
    4. After=calico-node.service  
    5. Requires=calico-node.service  
    6.   
    7. [Service]  
    8. ExecStartPre=/usr/bin/wget -N -P /opt/bin https://storage.googleapis.com/kubernetes-release/release/v1.4.0/bin/linux/amd64/kubelet  
    9. ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet  
    10. ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico  
    11. ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico  
    12. ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam  
    13. ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico-ipam  
    14. ExecStart=/opt/bin/kubelet   
    15. --address=0.0.0.0   
    16. --allow-privileged=true   
    17. --cluster-dns=10.100.0.10   
    18. --cluster-domain=cluster.local   
    19. --config=/etc/kubernetes/manifests   
    20. --hostname-override=$private_ipv4   
    21. --api-servers=http://<API SERVER IP>:8080   
    22. --network-plugin-dir=/etc/cni/net.d   
    23. --network-plugin=cni   
    24. --logtostderr=true  
    25. Restart=always  
    26. RestartSec=10  
    27.   
    28. [Install]  
    29. WantedBy=multi-user.target  

    确保kubelet和calico插件二进制文件存在

    配置kube-proxy

    为了使calico policy与k8s结合,kube-peoxy成员必须配置脱离自身绑定网卡源地址(nat转发),在v1.1.0被支持,v1.2.0作为默认启动模式

    强烈建议使用最新文档版本,若为旧版本有两种方式启用:

    1.--proxy-mode=iptables

    2.annotations api:net.experimental.kubernetes.io/proxy-mode启动iptables

    查看kube-proxy文档获取更多信息

  • 相关阅读:
    js看懂funid与funname各自的作用以及回显示是怎么找到对应位置的
    居然脑海中还记得03年的瑞星升级ID号
    [恢]hdu 2186
    [恢]hdu 2109
    [恢]hdu 2140
    [恢]hdu 2160
    [恢]hdu 2101
    [恢]hdu 2162
    [恢]hdu 2201
    [恢]hdu 2163
  • 原文地址:https://www.cnblogs.com/laiyuan/p/8607755.html
Copyright © 2020-2023  润新知