前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >了解 Linkerd Service Mesh 架构

了解 Linkerd Service Mesh 架构

作者头像
为少
发布2021-12-13 12:47:41
4670
发布2021-12-13 12:47:41
举报
文章被收录于专栏:黑客下午茶

从较高的层次上看,Linkerd 由一个控制平面(control plane) 和一个 数据平面(data plane) 组成。

控制平面是一组服务,提供对 Linkerd 整体的控制。

数据平面由在每个服务实例“旁边”运行的透明微代理(micro-proxies)组成,作为 Pod 中的 sidecar。这些代理会自动处理进出服务的所有 TCP 流量,并与控制平面进行通信以进行配置。

Linkerd 还提供了一个 CLI,可用于与控制平面数据平面进行交互。

系列

中文手册(https://hacker-linner.com)

CLI

Linkerd CLI 通常在集群外部运行(例如在您的本地机器上),用于与 Linkerd 交互。

控制平面(control plane)

Linkerd 控制平面是一组在专用 Kubernetes 命名空间(默认为 linkerd)中运行的服务。控制平面有几个组件,列举如下。

目标服务(destination)

数据平面代理使用 destination 服务来确定其行为的各个方面。它用于获取服务发现信息(即发送特定请求的位置和另一端预期的 TLS 身份);获取有关允许哪些类型的请求的策略信息;获取用于通知每条路由指标重试超时的服务配置文件信息;和更多其它有用信息。

身份服务(identity)

identity 服务充当 TLS 证书颁发机构, 接受来自代理的 CSR 并返回签名证书。这些证书在代理初始化时颁发,用于代理到代理连接以实现 mTLS

代理注入器(proxy injector)

proxy injector 是一个 Kubernetes admission controller,它在每次创建 pod 时接收一个 webhook 请求。此 injector 检查特定于 Linkerdannotationlinkerd.io/inject: enabled)的资源。当该 annotation 存在时,injector 会改变 pod 的规范, 并将 proxy-initlinkerd-proxy 容器以及相关的启动时间配置添加到 pod 中。

数据平面(data plane)

Linkerd 数据平面包含超轻型微代理,这些微代理部署为应用程序 Pod 内的 sidecar 容器。由于由 linkerd-init(或者,由 LinkerdCNI 插件)制定的 iptables 规则, 这些代理透明地拦截进出每个 podTCP 连接。

代理(Linkerd2-proxy)

Linkerd2-proxy 是一个用 Rust 编写的超轻、透明的微代理Linkerd2-proxy 专为 service mesh 用例而设计,并非设计为通用代理。

代理的功能包括:

  • HTTPHTTP/2 和任意 TCP 协议的透明、零配置代理。
  • HTTPTCP 流量的自动 Prometheus 指标导出。
  • 透明、零配置的 WebSocket 代理。
  • 自动、延迟感知、第 7 层负载平衡。
  • HTTP 流量的自动第 4 层负载平衡。
  • 自动 TLS
  • 按需诊断 Tap API
  • 还有更多。

代理支持通过 DNS 和目标 gRPC API 进行服务发现。

  • https://github.com/linkerd/linkerd2-proxy-api

您可以在此处阅读有关这些微代理的更多信息:

  • 为什么 Linkerd 不使用 Envoy
    • https://linkerd.io/2020/12/03/why-linkerd-doesnt-use-envoy/
  • Linkerd 最先进的 Rust 代理 Linkerd2-proxy
    • https://linkerd.io/2020/07/23/under-the-hood-of-linkerds-state-of-the-art-rust-proxy-linkerd2-proxy/

Linkerd init 容器

linkerd-init 容器作为 Kubernetes init 容器 添加到每个网格 pod 中,该容器在任何其他容器启动之前运行。它使用 iptables 通过代理将所有 TCP 流量,进出 Pod 的所有流量。

  • https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 系列
  • CLI
  • 控制平面(control plane)
    • 目标服务(destination)
      • 身份服务(identity)
        • 代理注入器(proxy injector)
        • 数据平面(data plane)
          • 代理(Linkerd2-proxy)
            • Linkerd init 容器
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档