可用的 NGINX 服务网格

可用的 NGINX 服务网格

我们很高兴推出预览版本 NGINX 服务网格 (NSM),一个捆绑的轻量级服务网格,它使用基于 NGINX Plus 的数据平面来管理 Kubernetes 环境中的容器流量。

NSM 是免费的 скачатьздесь。 我们希望您在开发和测试环境中尝试一下 - 并期待您的反馈 在GitHub上.

随着交付规模的扩大及其复杂性的增加,微服务方法的实施充满了困难。 服务之间的通信变得更加复杂,调试问题变得更加困难,越来越多的服务需要更多的资源来管理。

NSM 通过为您提供以下解决方案来解决这些问题:

  • 安全,现在比以往任何时候都更加重要。 数据泄露每年会给公司带来数百万美元的收入和声誉损失。 NSM 确保所有连接均使用 mTLS 加密,因此黑客不会通过网络窃取敏感数据。 访问控制允许您设置服务如何与其他服务通信的策略。
  • 交通管理。 发布应用程序的新版本时,您可能需要首先限制传入的流量,以防出现错误。 通过NSM的智能容器流量管理,您可以为随着时间的推移流量会增加的新服务设置流量限制策略。 其他功能(例如速度限制和断路器)使您可以完全控制所有服务的流量。
  • 可视化。 管理数千个服务可能是调试和可视化的噩梦。 NSM 通过内置的 Grafana 仪表板帮助处理这种情况,该仪表板显示 NGINX Plus 中的所有可用功能。 而且实施的开放跟踪允许您详细监控交易。
  • 混合交付,如果您的公司与大多数其他公司一样,不使用完全在 Kubernetes 上运行的基础设施。 NSM 确保遗留应用程序不会无人看管。 在实施的 NGINX Kubernetes Ingress Controller 的帮助下,遗留服务将能够与网格服务进行通信,反之亦然。

NSM 还通过透明地对容器流量应用加密和身份验证来确保零信任环境中的应用程序安全。 它还提供事务可视性和分析,帮助您快速准确地启动部署并解决问题。 它还提供精细的流量控制,允许 DevOps 团队部署和优化部分应用程序,同时使开发人员能够构建并轻松连接其分布式应用程序。

NGINX 服务网格如何工作?

NSM 由用于水平(服务到服务)流量的统一数据平面和用于垂直流量的嵌入式 NGINX Plus 入口控制器组成,由单个控制平面管理。

控制平面专为 NGINX Plus 数据平面设计和优化,并定义分布在 NGINX Plus sidecar 上的流量控制规则。

在 NSM 中,为网格中的每个服务安装了 sidecar 代理。 它们与以下开源解决方案交互:

  • Grafana、Prometheus参数可视化,内置NSM面板帮助您工作;
  • Kubernetes 入口控制器,用于管理网格中的传入和传出流量;
  • SPIRE,CA,用于管理、分发和更新网格中的证书;
  • NATS,一个可扩展的系统,用于从控制平面向 sidecar 发送消息(例如路由更新);
  • 开放Tracing,分布式调试(支持Zipkin和Jaeger);
  • Prometheus 收集并存储 NGINX Plus sidecar 的特征,例如请求数、连接数和 SSL 握手数。

功能和组件

NGINX Plus 作为数据平面涵盖 sidecar 代理(水平流量)和 Ingress 控制器(垂直),拦截和管理服务之间的容器流量。

特点包括:

  • 相互 TLS (mTLS) 身份验证;
  • 负载均衡;
  • 容错;
  • 限速;
  • 断路;
  • 蓝绿和金丝雀部署;
  • 访问控制。

启动 NGINX 服务网格

要运行 NSM,您需要:

  • 访问 Kubernetes 环境。 许多 Kubernetes 平台都支持 NGINX Service Mesh,包括 Amazon Elastic Container Service for Kubernetes (EKS)、Azure Kubernetes Service (AKS)、Google Kubernetes Engine (GKE)、VMware vSphere 以及部署在硬件服务器上的常规 Kubernetes 集群;
  • 工具 kubectl,安装在将安装 NSM 的计算机上;
  • 访问 NGINX Service Mesh 发行包。 该包包含上传到 Kubernetes 集群中可用容器的私有注册表所需的 NSM 映像。 该包装还包含 nginx-meshctl,需要部署 NSM。

要使用默认设置部署 NSM,请运行以下命令。 在部署过程中,会显示消息指示组件安装成功,最后会显示消息指示 NSM 正在单独的命名空间中运行(您需要首先 下载 并将其放入注册表中, 约译者):

$ DOCKER_REGISTRY=your-Docker-registry ; MESH_VER=0.6.0 ; 
 ./nginx-meshctl deploy  
  --nginx-mesh-api-image "${DOCKER_REGISTRY}/nginx-mesh-api:${MESH_VER}" 
  --nginx-mesh-sidecar-image "${DOCKER_REGISTRY}/nginx-mesh-sidecar:${MESH_VER}" 
  --nginx-mesh-init-image "${DOCKER_REGISTRY}/nginx-mesh-init:${MESH_VER}" 
  --nginx-mesh-metrics-image "${DOCKER_REGISTRY}/nginx-mesh-metrics:${MESH_VER}"
Created namespace "nginx-mesh".
Created SpiffeID CRD.
Waiting for Spire pods to be running...done.
Deployed Spire.
Deployed NATS server.
Created traffic policy CRDs.
Deployed Mesh API.
Deployed Metrics API Server.
Deployed Prometheus Server nginx-mesh/prometheus-server.
Deployed Grafana nginx-mesh/grafana.
Deployed tracing server nginx-mesh/zipkin.
All resources created. Testing the connection to the Service Mesh API Server...

Connected to the NGINX Service Mesh API successfully.
NGINX Service Mesh is running.

如需更多选项,包括高级设置,请运行以下命令:

$ nginx-meshctl deploy –h

检查控制平面在命名空间中是否正常工作 nginx-mesh,您可以这样:

$ kubectl get pods –n nginx-mesh
NAME                                 READY   STATUS    RESTARTS   AGE
grafana-6cc6958cd9-dccj6             1/1     Running   0          2d19h
mesh-api-6b95576c46-8npkb            1/1     Running   0          2d19h
nats-server-6d5c57f894-225qn         1/1     Running   0          2d19h
prometheus-server-65c95b788b-zkt95   1/1     Running   0          2d19h
smi-metrics-5986dfb8d5-q6gfj         1/1     Running   0          2d19h
spire-agent-5cf87                    1/1     Running   0          2d19h
spire-agent-rr2tt                    1/1     Running   0          2d19h
spire-agent-vwjbv                    1/1     Running   0          2d19h
spire-server-0                       2/2     Running   0          2d19h
zipkin-6f7cbf5467-ns6wc              1/1     Running   0          2d19h

根据设置手动或自动注入策略的部署设置,NGINX sidecars 代理将默认添加到应用程序中。 要禁用自动添加,请阅读 这里

例如,如果我们部署应用程序 睡觉 在命名空间中 默认,然后检查 Pod - 我们将看到两个正在运行的容器,即应用程序 睡觉 以及相关的边车:

$ kubectl apply –f sleep.yaml
$ kubectl get pods –n default
NAME                     READY   STATUS    RESTARTS   AGE
sleep-674f75ff4d-gxjf2   2/2     Running   0          5h23m

我们还可以监控应用程序 睡觉 在 NGINX Plus 面板中,运行以下命令以从本地计算机访问 sidecar:

$ kubectl port-forward sleep-674f75ff4d-gxjf2 8080:8886

然后我们就进去 这里 在浏览器中。 还可以连接Prometheus来监控应用程序 睡觉.

您可以使用单个 Kubernetes 资源来配置流量策略,例如访问控制、限速、熔断等,具体参见 文件

结论

NGINX Service Mesh 可免费下载: 传送门F5。 在您的开发和测试环境中尝试一下 写信告诉我们结果.

要尝试 NGINX Plus Ingress Controller,请激活 免费试用期 30 天,或 свяжитесьснами 讨论您的用例。

公司工程师 Pavel Demkovich 翻译 南桥。 系统管理费每月 15 卢布。 作为一个单独的部门 - 培训中心 咕咕声,练习,除了练习之外别无其他。

来源: habr.com

添加评论