AlinsRan commented on PR #2703:
URL: 
https://github.com/apache/apisix-ingress-controller/pull/2703#issuecomment-3956165731

   > 谢谢@AlinsRan感谢您就如何使此行为可配置提出的反馈意见。我评估了两种方案,并建议采用**模式枚举**配置,而不是简单的布尔切换。
   > 
   > ### 建议:(`listener_port_match_mode`枚举:`auto`| `explicit`| `off`)
   > 模式枚举不是简单的二元开/关,而是提供三种不同的行为:
   > 
   > 模式 行为
   > `auto`(默认) `server_port`当路由显式指向某个监听器(`sectionName``or` 
`port`)**或**匹配到多个监听器端口时,注入变量。这是当前的行为,并保持了向后兼容性。
   > `explicit` **仅**当路由明确指向监听器时才注入`server_port`变量。不支持多端口启发式注入。****
   > `off`      切勿注入`server_port`变量。监听端口仅作为基础设施级别的元数据处理。
   > ### 为什么选择枚举类型而不是布尔类型?
   > 1. **网关 API 语义**:规范区分了隐式连接(路由连接到网关,所有监听器)和显式目标
   >    (路由指定目标`sectionName`或监听器`port`)。布尔值可以混淆这两种`explicit`方式——`mode` 
保留了这种区别,而 `true` 则`off`提供了纯粹的
   >    基础架构语义。
   > 2. **避免将来出现破坏性变更**:如果我们发布了一个布尔值,以后又需要该`explicit`行为,我们就必须破坏配置模式或添加
   >    第二个字段。
   > 3. **增加的复杂度极小**:区别主要在于一条`switch`语句、一个类型定义和一个验证检查。配置
   >    方式与布尔方法几乎完全相同。
   > 
   > ### 行为矩阵
   > 设想 `auto`  `explicit`      `off`
   > 明确`sectionName`目标  注入      注入      禁止注射(警告)
   > 明确`port`目标 注入      注入      禁止注射(警告)
   > 多个监听端口,无明确目标       注入      无需注射    无需注射
   > 单个监听端口,无显式目标       无需注射    无需注射    无需注射
   > ### 配置示例
   > ```yaml
   > listener_port_match_mode: auto  # Options: auto, explicit, off. Default: 
auto.
   > ```
   > 
   > 默认的自动模式保持完全向后兼容性。只需要基础架构语义的用户可以取消设置,而只需要显式的基于意图的注入的用户可以启用显式模式。
   > 
   > 您觉得这种方法可以接受吗?还是更喜欢简单的布尔切换(enable_listener_port_match: true/false)?
   > 
   > BR, 约翰内斯
   
   Very good.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to