Calico 是什么?

Calico是一个用于容器、虚拟机和基于本地主机的工作负载的开源网络和网络安全解决方案。Calico支持广泛的平台,包括Kubernetes、OpenShift、Docker EE、OpenStack和bare metal服务。Calico将灵活的网络功能与随处运行的安全实施相结合,提供了一个具有本地Linux内核性能和真正的云本地可伸缩性的解决方案。 总之,calico是把Host当做Internet中的路由器,使用BGP同步路由,并使用iptables来做安全访问策略,设计出了Calico方案。 可以现实的功能:

  • Calico是一个比较有趣的虚拟网络解决方案,完全利用路由规则实现动态组网,通过BGP协议通告路由。
  • Calico的好处是endpoints组成的网络是单纯的三层网络,报文的流向完全通过路由规则控制,没有overlay等额外开销。
  • Calico的endpoint可以漂移,并且实现了acl。
  • Calico的缺点是路由的数目与容器数目相同,非常容易超过路由器、三层交换、甚至node的处理能力,从而限制了整个网络的扩张。
  • Calico的每个node上会设置大量(海量)的iptables规则、路由,运维、排障难度大。
  • Calico的原理决定了它不可能支持VPC,容器只能从calico设置的网段中获取ip。
  • Calico目前的实现没有流量控制的功能,会出现少数容器抢占node多数带宽的情况。
  • Calico的网络规模受到BGP网络规模的限制。

文件目录结构

. ├── Kubefile ├── cni │ ├── custom-resources.yaml │ └── tigera-operator.yaml ├── images │ └── shim │ └── CalicoImageList └── registry └── docker └── registry

Dockerfile 我们可以将所有内容构建到单个镜像中 (FROM labring/kubernetes),或者我们也可以使用 FROM scratch 指令从零构建应用镜像。

Single image
Application images
FROM labring/kubernetes:v1.24.0
COPY cni ./cni
COPY images ./images
COPY registry ./registry
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"]

CalicoImageList:Docker 镜像列表文件。 cni:包含 kubectl apply 命令要执行的配置文件。 registry:registry 镜像仓库数据保存目录。 sealos build -t kubernetes-calico:1.24.0-amd64 --platform linux/amd64 --os linux -f Kubefile .:构建 OCI 镜像。 manifests:将 yaml 文件中的镜像解析到 Docker 镜像列表中。

构建 Calico 镜像

目录结构 . ├── Kubefile ├── cni │ ├── custom-resources.yaml │ └── tigera-operator.yaml

Dockerfile All in one Application images 该镜像包含 Kubernetes 和 Calico。

FROM labring/kubernetes:v1.24.0-amd64
COPY cni ./cni
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"]

cni:包含 kubectl apply 命令要执行的配置文件。 sealos build -t kubernetes-calico:1.24.0-amd64 --platform linux/amd64 -f Kubefile .:构建 OCI 镜像。

构建 OpenEBS 镜像

目录结构 . ├── Kubefile ├── cni │ ├── custom-resources.yaml │ └── tigera-operator.yaml └── manifests └── openebs-operator.yaml

Dockerfile
All in one
Application images
FROM labring/oci-kubernetes-calico:1.24.0-amd64
COPY cni ./cni
COPY manifests ./manifests
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml","kubectl apply -f manifests/openebs-operator.yaml"]

cni : 包含 kubectl apply 命令要执行的配置文件。

sealos build -t labring/kubernetes-calico-openebs:1.24.0-amd64 --platform linux/amd64 -f Kubefile . --构建 OCI 镜像。

建议您需要将 Calico CMD 添加到 OpenEBS CMD 层,因为 Dockerfile 会覆盖旧层。

构建跨平台镜像

下载 x86_64 架构的buildah

wget -qO "buildah" https://github.com/labring/cluster-image/releases/download/depend/buildah.linux.amd64  && \
  chmod a+x buildah && mv buildah /usr/bin

下载 aarch64 构架的buildah

wget -qO "buildah" https://github.com/labring/cluster-image/releases/download/depend/buildah.linux.arm64  && \
  chmod a+x buildah && mv buildah /usr/bin

多架构构建镜像

$ sealos build -t $prefix/oci-kubernetes:$version-amd64 --platform linux/amd64 -f Kubefile  .
$ sealos build -t $prefix/oci-kubernetes:$version-arm64 --platform linux/arm64 -f Kubefile  .

$ buildah login --username $username --password $password $domain
$ buildah push $prefix/oci-kubernetes:$version-amd64
$ buildah push $prefix/oci-kubernetes:$version-arm64
$ buildah manifest create $prefix/oci-kubernetes:$version
$ buildah manifest add $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version-amd64
$ buildah manifest add $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version-arm64
$ buildah manifest push --all $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version

其他

欢迎有问题及时交流~ 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多交流