文章目录
- 一、概述
- 二、calicoctl 安装
- 三、calicoctl 简单使用
- 3.1 calicoctl 认证信息配置
- 3.2 calicoctl 操作各种资源
- 3.3 calicoctl 操作 IPPool
- 3.3.1 calicoctl 查看 IPPool
- 3.3.2 calicoctl 创建 IPPool
- 方式1:使用 calicoctl 创建 IPPool
- 方式2:使用 kubectl 创建 IPPool
- 3.3.3 calicoctl 将Pod应用字对应的IPPool
- 3.3.4 calicoctl 给Pod实现固定 IP
- 3.4 网络策略(NetworkPolicy)
- 四、Kube-ipam
- 1)安装kube-ipam
- 2)子网和etcd配置
- 3)固定IP示例演示
一、概述
这里是Calico第三篇了,我们已经学习了Calico作为一个cni插件的三个功能:
(1) 给Pod分配虚拟IP,并完成Pod之间的网络通信,包括同一Node上的Pod、不同Node上的Pod两种情况 (作为cni插件的基本功能)
(2) 给Pod分配固定IP (由Calico自定义的 IPPool 实现)
(3) 给Pod分配网络策略NetworkPolicy
我们操作calico之前还是使用kubectl命令,但是其实这是操作k8s集群的二进制文件,calico有专门的操作自己的二进制文件calicoctl,本文来熟练使用这个二进制文件/工具。
官方文档:https://projectcalico.docs.tigera.io/reference/calicoctl/
二、calicoctl 安装
Github网络不好的话,也可以从这里下载:https://www.syjshare.com/res/225M82WB
三、calicoctl 简单使用
calicoctl通过读写calico的数据存储系统(datastore)进行查看或者其他各类管理操作,通常,它需要提供认证信息经由相应的数据存储完成认证。在使用Kubernetes API数据存储时,需要使用类似kubectl的认证信息完成认证。它可以通过环境变量声明的DATASTORE_TYPE和KUBECONFIG接入集群,例如以下命令格式运行calicoctl:
3.1 calicoctl 认证信息配置
3.2 calicoctl 操作各种资源
calicoctl 是 Calico 客户端管理工具。 可以方便的管理 calico 网络,配置和安全策略,calicoctl 命令行提供了许多资源管理命令,允许您创建,修改,删除和查看不同的 Calico 资源,网络资源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profile等。
从这里知道,calicoctl + verb + resource 构成整个命令,其中,verb 包括从 calicoctl --help 里面看到的所有的,resource 包括从 kubectl api-resources | grep calico 看到的所有的资源。
3.3 calicoctl 操作 IPPool
3.3.1 calicoctl 查看 IPPool
使用calicoctl命令,可以查看calico生成虚拟ip的资源池
3.3.2 calicoctl 创建 IPPool
IP 池 是 Calico 使用的 IP 地址范围 工作负载终端节点(workloadendpoints)。
使用 calicoctl create -f ippool.yaml , 则 apiVersion: projectcalico.org/v3
使用 kubectl apply -f ippool.yaml , 则 apiVersion: crd.projectcalico.org/v1
方式1:使用 calicoctl 创建 IPPool
定义两个在此群集中使用的 IP 池。 您可以仅使用一个 池,但我们定义了两个,编排操作如下:
执行并查看
方式2:使用 kubectl 创建 IPPool
如果使用kubectl创建,就必须查询apiVersion和kind
修改
注意:这里的 --allow-version-mismatch 应该是跳过一个版本不匹配检查之类的。
3.3.3 calicoctl 将Pod应用字对应的IPPool
Pod应用字对应的IPPool:利用注解cni.projectcalico.org/ipv4pools。
3.3.4 calicoctl 给Pod实现固定 IP
calicoctl/kubectl 给Pod实现固定 IP :利用注解 cni.projectcalico.org/ipAddrs
3.4 网络策略(NetworkPolicy)
网络策略资源 (NetworkPolicy) 表示应用的一组有序规则 到与 标签选择器。NetworkPolicy 是命名空间资源。 NetworkPolicy 在特定命名空间中 仅适用于 工作负载终端节点资源 在该命名空间中。两个资源位于同一命名空间中,如果 namespace 两者上的值设置相同。 看 全局网络策略资源 对于非命名空间网络策略。
【示例】此示例策略允许来自 TCP 流量 frontend 端口 6379 的终结点 database 端点。
执行
想了解更多网络策略,可以查看官方文档:https://projectcalico.docs.tigera.io/reference/resources/networkpolicy
四、Kube-ipam
Kube-ipam 基于etcd分布式存储实现kubernetes动态IP网络分配管理,确保集群中IP地址的唯一性。Kube-ipam支持给kubernetes集群中的Pod固定IP地址,同时支持resolv.conf的DNS配置。这个需要基于网络插件(例如:macvlan、ipvlan、kube-router、bridge、calico等),这里就使用calico网络插件来实现。
一些场景往往对IP地址有依赖,需要使用固定IP地址的Pod,可以使用kube-ipam轻松解决这类问题。例如,mysql主从架构的时候,主database与从database之间的同步;例如keepalived做集群HA的时候,两个节点之间检测通信等;例如某些安全防护设备,需要基于IP地址进行网络安全访问策略限制的场景等。
GitHub地址:https://github.com/cloudnativer/kube-ipam
1)安装kube-ipam
请确保你的kubelet正确的配置了network-plugin、cni-conf-dir 和 cni-bin-dir 参数。下面给出一个kubelet的配置示例供你参考:
下载安装 kube-ipam
2)子网和etcd配置
你可以通过 subnet 参数设置IP子网信息,通过 gateway 设置网关信息。你可以通过 etcdConfig 配置etcd的证书和endpoint地址。编辑所有kubernetes node主机的 /etc/cni/net.d/1-kube-ipam.conf 文件。
3)固定IP示例演示
这里没有真正的去验证,只是稍微说一下,还可以通过kube-ipam进行固定IP配置。我们使用 Calico IPPool 就可以做到了。