取消零地址的终点
作者: easwars创建于 2026年9月10日更新于 2026年9月14日
标签Status: Help WantedP2Type: Bug
QQ 使用大小写 - 此特性会解决什么问题 ?
在调查#9259期间,随机潜入'在接到零地址的终点(len(endpoint. ),我们注意到,我们的密码库没有一致地验证、过滤或处理有零地址的端点:
- `resolver.Validate Endpoints'没有呼叫者,允许空端点**:
- `resolver.Validate Endpoints'是按[gRFC A61](https://GitHub.com/grpc/ proposition/blob/master/A61-IPv4-IPv6-dualstack-backends.md)增加的,但目前整个存储处有零呼叫者。
- 此外,"更难解决"。 验证 Endpoints ' 只检查 *entire list * 是否包含所有端点的至少一个地址;它不能验证单个端点至少有一个地址.
- Channel/解析器包件不进行验证:
- " 解冻者 " ,通过 " 解冻者 " 。 端点直接指向平衡器,而不验证端点包含地址。
- ** 不平衡的平衡器处理**:
随机潜入 ' 最近在9259号增加了明确的过滤,以避免在编制终点 ' 索引时出现出界恐慌。 地址[0]。- " 终结点 " 最初是 " 如果 " (终结点)。 地址:========================================================================================================================================================================================= 目前,一个空端点会产生一个有“解”的儿童平衡器。 状态{末点: [] solver. Endpoint{ 空端点}.
- " 先挑先取 " 平地 " 终点。 地址...
(仅跳过空端点),其他平衡器或自定义的 pieole 政策可能假定len(端点)。 地址 > 0 ' 。
- xDS EDS unmarshaling 生成假“":0”地址:
- 在
unmarshal eds.go'中,parseAddress(lbEndpoint.GetEndpoint (.GetAddress (.GetSocketAddress ()))'不能证实套接字地址是否存在。 如果缺少,parseAddress(nil)'产生':0',将一个端点与地址`':0'合成,而不是去掉终点。 (如果多个端点缺少地址,则由于重复地址相撞于"":0"上,它只能是NACK. - 检查C++和Java的执行,看看他们的行为是什么,然后决定我们的行为。
建议的解决办法
- ** 澄清合同**: " 解决办法 " 。 终点必须至少包含一个地址。
- 更新`resolver.Validate Endpoints'(或通道/resolver包装),以验证每个端点至少有一个地址。
- 拨起"解"。 验证小政策和/或`resolver-wrapper'中的终点。
- 在xDS客户端EDS解析中,验证是否有套接字地址(或适当拒绝/NACK)。
- ** 更进一步**:探讨本评论所指明的备选办法。
++ 附加上下文
- 由#9259触发.
- 相关的gRFC:[A61: . . . . . . .
内容来源: grpc/grpc-go