简介

ServerServerAuthorizationLinkerd 中的两种策略资源,

用于控制对 mesh 应用程序的入站访问。

linkerd 安装期间,policyController.defaultAllowPolicy 字段用于指定当没有

Server 选择 pod 时的默认策略。此字段可以是以下之一:

  • all-unauthenticated: 允许所有请求。这是默认设置。
  • all-authenticated: 允许来自相同或不同集群(使用 multi-cluster)中的 mesh 客户端的请求。
  • cluster-authenticated: 允许来自同一集群中的 mesh 客户端的请求。
  • cluster-unauthenticated: 允许来自同一集群中的 mesh 和非 mesh 客户端的请求。
  • deny: 所有请求都被拒绝。(然后应创建 Policy 资源以允许服务之间的特定通信)。

可以通过在 pod spec 或其命名空间上设置注释 config.linkerd.io/default-inbound-policy 来覆盖此默认值。

pod & port 配置 Server 后,其默认行为是 deny 流量,

并且必须创建 ServerAuthorization 资源以允许 Server 上的流量。

系列

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

Server

Server 在与 server 相同的命名空间中的一组 pod 上选择一个端口。

它通常选择 pod 上的单个端口,但在按名称引用端口时它可能会选择多个端口(例如 admin-http)。

虽然 Server 资源类似于 Kubernetes 的 Service

但它增加了多个 Server 实例不能重叠的限制:它们不能选择相同的 pod/port 对。

Linkerd 附带了一个 admission controller,试图防止创建重叠的 server

当服务器选择一个端口时,默认情况下会拒绝流量,

并且必须使用 ServerAuthorization 来授权 Server 选择的端口上的流量。

Spec

Server spec 可能包含以下顶级字段:

field value
podSelector podSelector 选择相同命名空间中的 pod
port 端口名称或编号。仅考虑 pod specports 中的端口。
proxyProtocol 为入站连接配置协议发现。取代 config.linkerd.io/opaque-ports annotation。必须是 unknownHTTP/1HTTP/2gRPCopaqueTLS 之一。 如果未设置,则默认为 unknown

podSelector

这与 Kubernetes 中的 labelSelector 字段相同

属于此选择器的所有 pod 都将属于 Server 组。podSelector 对象必须恰好包含以下字段之一:

field value
matchExpressions matchExpressionslabel selector 要求的列表。要求是 AND 组合。
matchLabels matchLabels{key,value} 对的映射。

有关更多详细信息,请参阅 Kubernetes LabelSelector reference

Server 示例

一个 Server 选择具有特定标签的 pod,使用 gRPC 作为 proxyProtocol

apiVersion: policy.linkerd.io/v1beta1
kind: Server
metadata:
namespace: emojivoto
name: emoji-grpc
spec:
podSelector:
matchLabels:
app: emoji-svc
port: grpc
proxyProtocol: gRPC

一个 Server 选择带有 matchExpressionspodHTTP/2 作为 proxyProtocol,在端口 8080 上。

apiVersion: policy.linkerd.io/v1beta1
kind: Server
metadata:
namespace: emojivoto
name: backend-services
spec:
podSelector:
matchExpressions:
- {key: app, operator: In, values: [voting-svc, emoji-svc]}
- {key: environment, operator: NotIn, values: [dev]}
port: 8080
proxyProtocol: "HTTP/2"

ServerAuthorization

ServerAuthorization 提供了一种向一个或多个 Server 授权流量的方法。

Spec

ServerAuthorization spec 必须包含以下顶级字段:

field value
client client 描述授权访问 server 的客户端。
server server 在此授权适用的同一命名空间中标识 Servers

Server

Server 对象必须包含以下字段之一:

field value
name 按名称引用 Server 实例。
selector selector 选择在同一命名空间中应用此授权的 server

selector

这与 Kubernetes 中的 labelSelector 字段相同

属于此选择器的所有服务器都将应用此授权。

selector 对象必须恰好包含以下字段之一:

field value
matchExpressions matchExpressions 是标签选择器要求的列表。 要求是 AND 组合。
matchLabels matchLabels 是 {key,value} 对的映射。

client

client 对象必须包含以下字段之一:

field value
meshTLS meshTLS 用于授权 mesh 客户端访问服务器
unauthenticated 授权未经身份验证的客户端访问服务器的布尔值。

或者,它还可以包含 networks 字段:

field value
networks 限制此授权适用的客户端 IP 地址。 如果未设置,服务器将选择默认值(通常为所有 IP 或集群的 pod 网络)。

meshTLS

meshTLS 对象必须恰好包含以下字段之一:

field value
unauthenticatedTLS 一个布尔值,表示通信不需要客户端身份。这对于身份控制器非常重要,它必须终止来自尚未拥有证书的客户端的 TLS 连接。
identities 授权的代理身份字符串列表(通过 MTLS 提供)。* 前缀可用于匹配域中的所有身份。* 标识字符串表示所有身份验证客户端都已授权。
serviceAccounts 授权客户端 serviceAccount 的列表(通过 MTLS 提供)。

serviceAccount

serviceAccount 字段包含以下顶级字段:

field value
name ServiceAccount 的名称。
namespace ServiceAccount 的命名空间。如果未设置,则使用授权的命名空间。

ServerAuthorization 示例

一个 ServerAuthorization 允许 mesh

客户端使用 *.emojivoto.serviceaccount.identity.linkerd.cluster.local 代理身份,

emojivoto 命名空间中的所有服务帐户。

apiVersion: policy.linkerd.io/v1beta1
kind: ServerAuthorization
metadata:
namespace: emojivoto
name: emoji-grpc
spec:
# Allow all authenticated clients to access the (read-only) emoji service.
server:
selector:
matchLabels:
app: emoji-svc
client:
meshTLS:
identities:
- "*.emojivoto.serviceaccount.identity.linkerd.cluster.local"

一个允许任何未经身份验证的客户端的 ServerAuthorization

apiVersion: policy.linkerd.io/v1beta1
kind: ServerAuthorization
metadata:
namespace: emojivoto
name: web-public
spec:
server:
name: web-http
# Allow all clients to access the web HTTP port without regard for
# authentication. If unauthenticated connections are permitted, there is no
# need to describe authenticated clients.
client:
unauthenticated: true
networks:
- cidr: 0.0.0.0/0
- cidr: ::/0

一个允许具有特定服务帐户的 mesh 客户端的 ServerAuthorization

apiVersion: policy.linkerd.io/v1beta1
kind: ServerAuthorization
metadata:
namespace: emojivoto
name: prom-prometheus
spec:
server:
name: prom
client:
meshTLS:
serviceAccounts:
- namespace: linkerd-viz
name: prometheus
公众号:黑客下午茶

Linkerd Service Mesh 授权策略(Server & ServerAuthorization)的更多相关文章

  1. 了解 Linkerd Service Mesh 架构

    从较高的层次上看,Linkerd 由一个控制平面(control plane) 和一个 数据平面(data plane) 组成. 控制平面是一组服务,提供对 Linkerd 整体的控制. 数据平面由在 ...

  2. Linkerd Service Mesh 服务配置文件规范

    服务配置文件 为 Linkerd 提供有关服务的附加信息. 以下是可以使用服务配置文件完成的所有操作的参考. 系列 中文手册(https://linkerd.hacker-linner.com) Sp ...

  3. Linkerd stable-2.11.0 稳定版发布:授权策略、gRPC 重试、性能改进等!

    公众号:黑客下午茶 授权策略 Linkerd 的新服务器授权策略(server authorization policy)功能使您可以细粒度控制允许哪些服务相互通信.这些策略直接建立在 Linkerd ...

  4. 腾讯云 K8S 集群实战 Service Mesh—Linkerd2 & Traefik2 部署 emojivoto 应用

    Linkerd 是 Kubernetes 的服务网格. 它通过为您提供运行时调试(runtime debugging).可观察性(observability).可靠性(reliability)和安全性 ...

  5. What’s a service mesh? And why do I need one?

    https://buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/ Update 2018-02-06: Since t ...

  6. 在 Intenseye,为什么我们选择 Linkerd2 作为 Service Mesh 工具(Part.1)

    在 Intenseye,我们 follow(跟随) trends(趋势) & hype(最被炒作) 的技术,并在使用时应用最佳实践. 我们在用 Scala.Go.Python 等编写的 Kub ...

  7. Linkerd 2:5 分种厘清 Service Mesh 相关术语

    API Gateway(API 网关) API gateway 位于应用程序的前面,旨在解决身份验证和授权.速率限制以及为外部消费者提供公共访问点等业务问题. 相比之下,service mesh 专注 ...

  8. 详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代

    Linkerd 提供了许多功能,如:自动 mTLS.自动代理注入.分布式追踪.故障注入.高可用性.HTTP/2 和 gRPC 代理.负载均衡.多集群通信.重试和超时.遥测和监控.流量拆分(金丝雀.蓝/ ...

  9. Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

    一个微服务应用程序,允许用户为他们最喜欢的表情符号(emoji)投票,并跟踪排行榜上收到的投票.愿最好的 emoji 获胜. 该应用程序由以下 3 个服务组成: emojivoto-web:Web 前 ...

随机推荐

  1. Java学习(十二)

    今天安装讲师推荐下载了一个叫Hbuiler X的IDE,并且学习了选择器的知识. 作为练习,写了一下的代码 <!DOCTYPE html> <html> <head> ...

  2. python及pygame雷霆战机游戏项目实战01 控制飞机

    入门 在这个系列中,将制作一个雷霆战机游戏. 首先,将游戏设置修改一下: WIDTH = 480 HEIGHT = 600 FPS = 60 玩家精灵 要添加的第一件事是代表玩家的精灵.最终,这将是一 ...

  3. Typora下载安装教程

    Typoa下载和安装 Typora---程序员记事本!!! 这里我们选择Typora作为我们的编辑器,功能的强大需要各位自己去体会. Typora下载地址 点击链接打开,然后选择Download! 根 ...

  4. Linux——基础命令用法(上)

    一.Linux基础命令 1.Linux命令行的格式 命令行的格式为:用户名+主机名+当前工作目录 输入内容的命令格式为:命令 [-短选项/--长选项] [参数] [root@localhost ~]# ...

  5. 文本分类:Keras+RNN vs传统机器学习

    摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比. 本文分享自华为云社区<基于Keras+RNN的文本分类vs基于传统机器学习的文本分 ...

  6. 洛谷 P7360 -「JZOI-1」红包(Min-Max 容斥+推式子)

    洛谷题面传送门 hot tea. 首先注意到这个 \(\text{lcm}\) 特别棘手,并且这里的 \(k\) 大得离谱,我们也没办法直接枚举每个质因子的贡献来计算答案.不过考虑到如果我们把这里的 ...

  7. Codeforces 1276F - Asterisk Substrings(SAM+线段树合并+虚树)

    Codeforces 题面传送门 & 洛谷题面传送门 SAM hot tea %%%%%%% 首先我们显然可以将所有能够得到的字符串分成六类:\(\varnothing,\text{*},s, ...

  8. UOJ 422 - 【集训队作业2018】小Z的礼物(Min-Max 容斥+轮廓线 dp)

    题面传送门 本来说要找道轮廓线 \(dp\) 的题目刷刷来着的?然后就找到了这道题. 然鹅这个题给我最大的启发反而不在轮廓线 \(dp\),而在于让我新学会了一个玩意儿叫做 Min-Max 容斥. M ...

  9. mGWAS研究思路

    mGWAS(metabolome-based genome-wide association studies)的研究方法和GWAS类似,只是将代谢物含量作为表型性状来与基因位点进行关联.但同时它也有自 ...

  10. 61. Binary Tree Inorder Traversal

    Binary Tree Inorder Traversal My Submissions QuestionEditorial Solution Total Accepted: 123484 Total ...