MCPRemoteProxy podTemplateSpec ports without protocol cause repeated Deployment updates

未关闭
#7,064 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
半天
新手友好度
68/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
go, kubernetes
领域
backend, devops

调研方向

Start in cmd/thv-operator/controllers/mcpremoteproxy_controller.go at remoteProxyContainerFieldsNeedUpdate and compare its port check with ContainerPortsDiffer in cmd/thv-operator/pkg/controllerutil/authserver.go. The issue also flags env, probe, and security context comparisons as possible defaulting gaps. Check or add focused tests for repeated reconciliation with an omitted port protocol; done means the Deployment no longer updates repeatedly for that case.

由索引模型根据 Issue 内容生成。

描述

needs-triage

When an MCPRemoteProxy has a spec.podTemplateSpec that adds a port to the proxy container without setting protocol, the operator likely sees a difference on every reconcile and keeps updating the Deployment.

remoteProxyContainerFieldsNeedUpdate in cmd/thv-operator/controllers/mcpremoteproxy_controller.go compares the live container with the expected one built by deploymentForMCPRemoteProxy:

!equality.Semantic.DeepEqual(current.Ports, expected.Ports) ||

The expected container comes from applying the raw podTemplateSpec patch, so a port written as

ports:
  - name: metrics
    containerPort: 9090

has Protocol: "" on the expected side. The API server fills in TCP on the stored Deployment, so DeepEqual never matches.

I found this by reading the code while reviewing the operator port changes for the auth server TLS listener. I haven't reproduced it on a cluster. VirtualMCPServer had the same issue in that work and now treats an empty protocol as TCP when comparing ports (ContainerPortsDiffer in cmd/thv-operator/pkg/controllerutil/authserver.go). The same approach, or comparing ports with that helper, should work here. The other DeepEqual checks in that function (env, probes, security context) may have similar API-server defaulting gaps and are worth a look at the same time.

主要语言
Go
星标
2.3k
派生
326
平均合并
1 天 53 分钟
30 天内合并 PR
155

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

stacklok/toolhive 的其他 Issue

查看 stacklok/toolhive 的全部 Issue

相似的 Issue

更多 Go Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。