要求:
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命令完成
- # Download and install `calicoctl`
- wget https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl
- sudo chmod +x calicoctl
- # Run the calico/node container
- sudo ETCD_ENDPOINTS=http://
: ./calicoctl node
查看calicoctl_node文档获取更多信息
systemd单元文件示例(calico-node.service)
如果使用systemd作为初始化系统,接下来的服务文件可以被使用:
- [Unit]
- Description=calicoctl node
- After=docker.service
- Requires=docker.service
- [Service]
- User=root
- Environment=ETCD_ENDPOINTS=http://
: - PermissionsStartOnly=true
- ExecStartPre=/usr/bin/wget -N -P /opt/bin https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl
- ExecStartPre=/usr/bin/chmod +x /opt/bin/calicoctl
- ExecStart=/opt/bin/calicoctl node --detach=false
- Restart=always
- RestartSec=10
- [Install]
- WantedBy=multi-user.target
替换
2.下载配置你的calico cni插件
k8s kubelet组件调用calico和calico-ipam插件
下载二进制文件,确保可被执行
- wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico
- wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam
- chmod +x /opt/cni/bin/calico /opt/cni/bin/calico-ipam
推荐作为kubelet工作过程的一部分
calico cni插件需要一个标准的cni配置文件,policy部分只有当你为networkpolicy部署calico/kube-policy-controller时被需要
- mkdir -p /etc/cni/net.d
- cat >/etc/cni/net.d/10-calico.conf <
- {
- "name": "calico-k8s-network",
- "type": "calico",
- "etcd_endpoints": "http://
: ", - "log_level": "info",
- "ipam": {
- "type": "calico-ipam"
- },
- "policy": {
- "type": "k8s"
- }
- }
- EOF
替换
查看配置指南获取更多关于calico cni的信息
3.部署calico网络控制器
calico/kube-policy-controller实现了k8s networkpolicy api通过k8s api监听pod,namespace,networkpolicy事件从而做出对应的时间相应,通过rs运行为一个单独的pod
安装policy controller:
下载policy controlly mainifest
修改
安装kubectl
- $ kubectl create -f policy-controller.yaml
一段时间后,你应该可以看到policy controller已经处于运行状态
- $ kubectl get pods --namespace=kube-system
- NAME READY STATUS RESTARTS AGE
- 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
- kubectl create -f calico.yaml
在kube-system namespace中你可以看到calico服务启动
查看 self-hosted文档获取更多信息
配置k8s
1.配置kubelet
需要配置kubelet 让pod启动时使用calico网络插件,kubelet可以配置使用calico在启动时配置参数:
- --network-plugin=cni
- --network-plugin-dir=/etc/cni/net.d
查看kubelet文档获取更多信息
kubelet.service单元配置文件示例:
- [Unit]
- Description=Kubernetes Kubelet
- Documentation=https://github.com/kubernetes/kubernetes
- After=calico-node.service
- Requires=calico-node.service
- [Service]
- ExecStartPre=/usr/bin/wget -N -P /opt/bin https://storage.googleapis.com/kubernetes-release/release/v1.4.0/bin/linux/amd64/kubelet
- ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet
- ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico
- ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico
- ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam
- ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico-ipam
- ExecStart=/opt/bin/kubelet \
- --address=0.0.0.0 \
- --allow-privileged=true \
- --cluster-dns=10.100.0.10 \
- --cluster-domain=cluster.local \
- --config=/etc/kubernetes/manifests \
- --hostname-override=$private_ipv4 \
- --api-servers=http://
:8080 \ - --network-plugin-dir=/etc/cni/net.d \
- --network-plugin=cni \
- --logtostderr=true
- Restart=always
- RestartSec=10
- [Install]
- 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文档获取更多信息