一文搞懂 Kubernetes Gateway API 的 Policy Attachment( 二 )


文章图片
mesh-policy-attachment
设计
▍策略与资源关联标准化
策略与资源关联的设计引入了TargetReferenceAPI的概念 , 即每个策略上必须要有一个targetRef字段 , 通过该字段将资源与策略进行关联 , 完成解耦 。 apiVersion:networking.example.net/v1alpha1kind:TimeoutPolicymetadata:name:foospec:default:connectionTimeout:3readTimeout:5targetRef:kind:HTTPRoutename:example
targetRef字段一次只能指定一个资源 , 但是每个策略配置配置不同粒度的资源 。 比如上面的重试策略 , 附加在同命名空间下名为example的HTTPRoute上 。 将所有具有该特征的流量 , 连接超时为3 , 读取超时为5 。
targetRef字段的结构固定的 , 由GatewayAPI的PolicyTargetReference进行定义 , 包含了资源的最最基础信息 。 typePolicyTargetReferencestruct{GroupGroup`json:"group"`KindKind`json:"kind"`NameObjectName`json:"name"`Namespace*Namespace`json:"namespace,omitempty"`}
▍默认值和覆盖值
默认值体现的是缺省状态下的策略设置 , 比如前面具有HTTPRouteexample描述的特征的流量 , 通过spec.default配置了默认超时时间 。
下面的策略 , 则使用spec.override对所有进入Gateway资源example(网关实例)的流量连接超时为5 。
那最终哪个值会生效呢?我们可以这样理解 , 所有的覆盖值的优先级会高于默认值 。 也就是符合匹配策略条件的流量 , 会优先使用覆盖值 。 apiVersion:networking.example.net/v1alpha1kind:TimeoutPolicymetadata:name:foospec:override:connectionTimeout:5targetRef:kind:Gatewayname:example
▍策略的优先级
默认值和覆盖值的优先级已经有了 , 上面在介绍资源的时候提到了资源的级别 , 并且策略也可以附加到不同的资源上 。 比如下面的策略定义了读取超时的默认值以及连接超时的覆盖值 , 附加到了Serviceexample上 , 实际作用的资源是后端(Backend)工作负载 。 apiVersion:networking.example.net/v1alpha1kind:TimeoutPolicymetadata:name:foospec:override:connectionTimeout:1default:readTimeout:10targetRef:kind:Servicename:example
流量的路径是Gatewayexample->HTTPRouteexample->Backendexample 。
对于覆盖值 , 优先级与资源的级别相同;而默认值 , 则与资源的级别正好相反 。 因此 , 最终的生效设置是:connectionTimeout:5#fromgatewayoverridereadTimeout:10#frombackenddefault
一文搞懂 Kubernetes Gateway API 的 Policy Attachment
文章图片
policy-hierarchy
现状
目前PolicyAttachment只是提供了概念的设计 , 还有很多方面暂未完善 , 而且具体的处理细节也依赖各个实现的设计 。 比如如何为外部资源(服务)配置策略、同一资源上的策略优先级、如何为多种资源配置相同的策略等等 , 同时PolicyAttachment并未提供各种策略的API 。
截止文章发出时 , 了解到的Linkerd在1.12中参考PolicyAttachment的设计实现了AuthorizationPolicy , 并计划待GatewayAPI中的设计稳定后切换到GatewayAPI的CRD 。
如果你了解有其他的PolicyAttachment实现 , 可以在文章下面留言 。
参考资料
策略附件(PolicyAttachment):
https://gateway-api.sigs.k8s.io/references/policy-attachment/
TargetReferenceAPI:
https://gateway-api.sigs.k8s.io/references/policy-attachment/#target-reference-api
微软最有价值专家(MVP)
微软最有价值专家是微软公司授予第三方技术专业人士的一个全球奖项 。 29年来 , 世界各地的技术社区领导者 , 因其在线上和线下的技术社区中分享专业知识和经验而获得此奖项 。
MVP是经过严格挑选的专家团队 , 他们代表着技术最精湛且最具智慧的人 , 是对社区投入极大的热情并乐于助人的专家 。 MVP致力于通过演讲、论坛问答、创建网站、撰写博客、分享视频、开源项目、组织会议等方式来帮助他人 , 并最大程度地帮助微软技术社区用户使用Microsoft技术 。