在这篇文章中,我们将了解consul connect作为服务网状结构以及consul connect与Kubernetes的集成。
所以,在我们开始consul Connect与Kubernetes集成的旅程之前,我们首先要了解一些关于服务网状结构和它的用途。
什么是服务网?
今天,软件应用程序通常被架构为微服务的分布式集合。在这些架构中,每个执行某些离散业务功能的微服务集合都应该有一个专门的基础设施层,允许你透明地添加诸如可观察性、流量管理和安全等功能,而无需将它们添加到自己的代码中。这可以通过 "服务网 "来实现。
服务网是一个专用层,为内部、云或多云基础设施提供安全的服务对服务通信。服务网通常与微服务架构模式一起使用,但在任何涉及复杂网络的情况下都能提供价值。
在基于Kubernetes的系统中,随着微服务部署的规模和复杂性的增加,它需要一些重要的功能来管理它,如发现、负载平衡、故障恢复、指标和监控。在这种情况下,服务进入了画面。
服务网状结构的特点
服务网状结构的特点分为以下三类。
- 流量管理。动态服务发现、路由、流量影子和流量分流。
- **安全性。**通过相互TLS(MTLS)进行流量加密,通过证书验证进行认证,通过访问策略进行授权,以及网络分段。
- 可观察性。 分布式跟踪和 访问日志**。**


谈到服务网的采用,Consul connect是服务网的一个著名名字。现在我们来看看consul connect的细节以及consul connect与Kubernetes的整合。
什么是 Consul Connect?
Consul是一个多网络工具,提供功能齐全的服务网状结构解决方案,解决了操作微服务和云基础设施(多云和混合云)的网络和安全挑战。
微服务架构和云基础设施的采用,需要新的网络方法。有许多供应商和工具,每个都试图以不同的方式解决问题。Consul服务网状结构解决方案对底层网络不做任何假设,采用纯软件方法,注重简单性和广泛的兼容性。
Consul作为服务网状结构简化了复杂网络环境中的服务发现,简化了在零信任网络中的应用部署。
架构
Consul的架构主要适合那些对强大网络安全有要求的应用。通过Consul Connect,你可以在云计算VPC的内置安全之上获得额外的安全层。Consul Connect使用相互TLS来自动加密容器之间的通信。


在图片中我们以AWS EKS集群为例,Consul代理在工作节点中运行。代理连接到中央Consul服务器,作为任务跟踪器,在集群中运行。Consul代理也会发现任务。在集群中运行的每个任务由一个应用容器和一个Consul Connect sidecar容器组成。在启动时,Consul Connect sidecar通过Consul代理将应用容器的IP地址注册到Consul。
Consul Connect sidecar被配置为本地代理提供者。通过这种方式,它作为一个安全的网络通道连接到另一个应用容器。假设,如果容器A想和容器B对话,那么Consul Connect会监听本地端口的流量。当容器A打开一个连接到该本地端口时,Consul Connect会查找容器B的位置和它的挎包代理,然后通过Consul Connect的挎包与容器B打开一个安全的TLS连接。
安装Consul Connect
在这里,我们将在Kubernetes中以服务器和客户端模式直接运行consul connect。我们可以通过两种方式部署consul connect。
我们将采用舵手图的安装方法。
先决条件:
- Kubernetes集群
- Helm 3
让我们开始设置
首先,我们将添加consul连接Helm Repository。
helm repo add hashicorp https://helm.releases.hashicorp.com
helm search repo hashicorp/consul
现在,我们将在集群中建立一个名字为consul的命名空间。
kubectl create namespace consul


现在,我们将在集群中安装Helm图表
helm install consul hashicorp/consul --set global.name=consul --create-namespace -n consul --values config.yaml
配置.YAML文件:
global:
name: consul
connectInject:
enabled: true
default: true
namespaceSelector: |
matchLabels:
connect-inject : enabled
controller:
enabled: true


在我们将部署测试应用程序的命名空间上启用Consul服务网,这里我们将测试应用程序部署在默认的命名空间。
现在我们将通过指定一个命名空间选择器,将consul服务网格的启用限制在一个命名空间的子集上,该选择器与附加在每个命名空间上表示是否启用consul服务网格的标签匹配。为了默认在标签选择的命名空间上启用服务网,connect insect.default的值必须设置为true 。我们这样做是因为consul connect默认在每个命名空间上启用。
kubectl label namespace default connect-inject=enabled
我们已经在默认的名字空间中部署了一个测试应用程序。在这张图片中,我们可以看到测试应用程序的每个pod都有2个容器在运行,每个微服务中都启用了consul服务网。




Consul用户界面
现在,我们将检查consul用户界面。为此,我们必须对consul服务器进行端口转发,或者我们可以在云环境中附加一个负载均衡器。
kubectl port-forward service/consul-server -n consul 8500:8500


结语
在文章中,我们看到了Kubernetes集群中Consul Connect服务网的重要性,以及我们如何将其集成到Kubernetes集群中。