Cluster Mesh 是 Cilium 的多集群实现,能够帮忙 Cilium 实现跨数据中心、跨 VPC 的多 Kubernetes 集群治理,ClusterMesh 次要有以下性能:
1. 通过隧道或间接路由的形式,在多个 Kubernetes 集群间进行 Pod IP 路由,而无需任何网关或代理。
2. 应用规范 Kubernetes 服务发现机制。
3. 跨多个集群的网络策略。策略能够应用 Kubernetes 原生的 NetworkPolicy 资源或者扩大的 CiliumNetworkPolicy CRD。
4. 通明加密本集群以及跨集群节点间所有通信的流量。
接下来让咱们一起看看 Cilium Cluster Mesh 有哪些具体的应用场景。
1 应用场景
1.1 高可用
对大多数人来说,高可用是最广泛的应用场景。能够在多个区域(regions)或可用区(availability zones)中运行多个 Kubernetes 集群,并在每个集群中运行雷同服务的正本。一旦产生异样,申请能够故障转移到其余集群。
1.2 共享服务
某些公共根底服务能够在集群间进行共享(如密钥治理,日志记录,监控或 DNS 服务等),以防止额定的资源开销。
1.3 拆分有状态和无状态服务
运行有状态或无状态服务的操作复杂性是十分不同的。无状态服务易于扩大,迁徙和降级。齐全应用无状态服务运行集群可使集群放弃灵便和麻利。有状态服务(例如 MySQL,Elasticsearch, Etcd 等)可能会引入潜在的简单依赖,迁徙有状态服务通常波及存储的迁徙。为无状态和有状态服务别离运行独立的集群能够将依赖复杂性隔离到较少数量的集群中。
2 架构
Cilium Cluster Mesh 的架构如下:
每个 Kubernetes 集群都保护本人的 etcd 集群,保留本身集群的状态。来自多个集群的状态永远不会在本集群的 etcd 中混同。
每个集群通过一组 etcd 代理裸露本人的 etcd,在其余集群中运行的 Cilium agent 连贯到 etcd 代理以监督更改。
Cilium 应用 clustermesh-apiserver Pod 来建设多集群的互联,在 clustermesh-apiserver Pod 中有两个容器:其中 apiserver 容器负责将多集群的相干信息写入 etcd 容器;etcd 容器(etcd 代理)用来存储 Cluster Mesh 相干的配置信息。
从一个集群到另一个集群的拜访始终是只读的。这确保了故障域放弃不变,即一个集群中的故障永远不会流传到其余集群。
3 前提条件
3.1 装置相干软件
装置 Kubectl:kubernetes.io/zh/docs/tas…
装置 Kind:kind.sigs.k8s.io/docs/user/q…
装置 Helm:helm.sh/docs/intro/…
装置 Cilium Cli:github.com/cilium/cili…
Kind [1](Kubernetes in Docker)是一个应用 Docker 容器运行本地 Kubernetes 集群的工具。为了不便试验,本文应用 Kind 来搭建 Kubernetes 多集群环境。
3.2 环境要求
1. 必须为所有 Kubernetes 的工作节点调配惟一的 IP 地址,并且节点之间 IP 路由可达。
2. 每个集群都要调配惟一的 Pod CIDR。
3.Cilium 必须应用 etcd 作为 kv 存储。
4. 集群之间的网络必须互通,具体的通信的端口号参见防火墙规定 [2]。
本试验相干的配置文件能够在: cluster_mesh [3] 获取。