Anthropic Helm chart 會將通道堆疊安裝為單一 Deployment,並將其連接到您的通道:可以是 chart 的 setup hook 為您建立的通道,或是您在 Console 中建立的現有通道。
您需要:
tnl_...)。手動佈建一律從 Console 建立的通道開始;您還需要其通道權杖和通道網域。workspace:manage_tunnels 的聯合規則。helm 和 kubectl 對其進行部署。不使用程式化存取分頁還會使用 openssl(1.1.1 或更新版本)。api.anthropic.com(443 TCP)和通道邊緣(7844 TCP 和 UDP)的對外網路連線。請參閱完整的網路需求。gateway.config.routes 下設定的位址存取。如果您還沒有,請使用範例伺服器。如果您沒有可用於測試的 MCP 伺服器,請使用這個最小範例:
kubectl create namespace mcp-tunnel --dry-run=client -o yaml | kubectl apply -f -
kubectl -n mcp-tunnel apply -f - <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
name: hello-mcp-src
data:
hello_server.py: |
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("hello-server", host="0.0.0.0", port=9000)
@mcp.tool()
def hello(name: str = "world") -> str:
"""Say hello to someone."""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run(transport="streamable-http")
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-mcp
spec:
replicas: 1
selector:
matchLabels: { app: hello-mcp }
template:
metadata:
labels: { app: hello-mcp }
spec:
containers:
- name: hello-mcp
image: python:3.13-slim
command: ["sh", "-c", "pip install --quiet mcp && python /app/hello_server.py"]
volumeMounts:
- { name: src, mountPath: /app }
ports:
- { containerPort: 9000 }
volumes:
- name: src
configMap: { name: hello-mcp-src }
---
apiVersion: v1
kind: Service
metadata:
name: hello-mcp
spec:
selector: { app: hello-mcp }
ports:
- { port: 9000, targetPort: 9000 }
EOF接下來的安裝步驟會說明在何處新增對應的路由。
setup 元件會透過您的聯合規則交換叢集的投影 ServiceAccount 權杖、擷取通道權杖、產生 CA 和伺服器憑證,並向 Anthropic 註冊 CA。每日 CronJob 會視需要更新伺服器憑證,因此您無需手動處理任何機密資料。
為叢集設定 Workload Identity Federation
依照搭配 Kubernetes 使用 WIF 的說明註冊叢集的 OIDC 簽發者並建立聯合規則。setup 元件會在 release 命名空間中以其自己的 ServiceAccount 執行;確切名稱遵循 Helm 的 fullname 慣例,因此若 release 名稱不是 mcp-tunnel,請在建立規則前執行 helm template <release> ... | grep -A2 'kind: ServiceAccount' 以確認名稱。本指南的其餘部分假設 release 名稱為 mcp-tunnel、命名空間為 mcp-tunnel,此時 ServiceAccount 為 mcp-tunnel-setup。
| 欄位 | 值 |
|---|---|
| Subject | system:serviceaccount:mcp-tunnel:mcp-tunnel-setup |
| Audience | api.anthropic.com(chart 的預設值;不含 scheme) |
| Scope | workspace:manage_tunnels |
如果通道位於組織預設工作區以外的工作區,請同時在 Settings > Workspaces 下將規則的服務帳戶新增為該工作區的成員(Tunnels API 會根據服務帳戶的工作區成員資格進行授權)。
記下規則的 ID(fdrl_...);您將把它設定為 api.wif.federationRuleId。
擷取預設值
helm show values \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 2.0.2 > values.yaml設定通道連接和路由
編輯 values.yaml 並設定 api.wif.* 鍵,填入聯合規則 ID 和組織 ID,並為每個上游 MCP 伺服器新增一個 routes 項目:
api:
wif:
federationRuleId: "fdrl_..."
organizationId: "00000000-0000-0000-0000-000000000000"
# Set when the tunnel is in a non-default workspace and the
# rule's service account is a member of that workspace.
# workspaceId: "wrkspc_..."
tunnel:
# Leave empty to have the setup hook create a tunnel during install.
# Set to attach to an existing tunnel from the Console.
id: ""
# Increment to rotate the tunnel token on the next upgrade.
# See the "Rotate the tunnel token" section.
tokenVersion: "1"
gateway:
config:
routes:
docs: http://docs-mcp.internal:8080
search: http://search-mcp.internal:8080使用這些路由,Claude 會透過 docs.<your-tunnel-domain> 和 search.<your-tunnel-domain> 存取伺服器。某些託管式 Kubernetes 發行版會將 Service CIDR 配置在標準私有範圍之外;如果您的路由指向叢集內的 Service,請依照上游 IP 驗證在此處新增 gateway.config.upstream.allowed_ips。
檢閱渲染後的 manifest
渲染 chart 並依照您組織的審查實務檢閱輸出:
helm template mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 2.0.2 \
-n mcp-tunnel \
-f values.yaml > rendered.yaml安裝
helm install mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 2.0.2 \
--namespace mcp-tunnel --create-namespace \
-f values.yamlsetup 元件會以 Helm pre-install hook Job 的形式執行,因此 helm install 會阻塞直到它完成。成功時 Helm 會自動刪除該 Job。如果 helm install 因 hook 錯誤而失敗,請參閱 setup 元件驗證失敗。
當 tunnel.id 為空時,setup 元件會在您的聯合規則所指向的工作區中建立通道(除非您設定了 api.wif.workspaceId,否則為組織的預設工作區),並將其 ID 和網域儲存在 mcp-tunnel Secret 中。您可以在 Console 的 Manage > MCP tunnels 下的通道詳細資料頁面找到驗證所需的網域,或從 Secret 讀取:
kubectl -n mcp-tunnel get secret mcp-tunnel \
-o jsonpath='{.data.tunnel-domain}' | base64 -d重新執行 setup 元件(在升級或權杖輪替期間)會重複使用儲存在此 Secret 中的通道 ID;它絕不會建立第二個通道。
從 Anthropic 端進行端對端驗證:在 Managed Agent 工作階段或 Messages API 請求中使用 https://<route>.<your-tunnel-domain>/<path>,其中 <route> 是 gateway.config.routes 中的鍵,<path> 是上游 MCP 伺服器提供服務的路徑。使用範例 MCP 伺服器時,即為 https://echo.<your-tunnel-domain>/mcp。請參閱使用通道化的 MCP 伺服器以了解請求格式。
如果失敗,請檢查 pod 日誌(kubectl -n mcp-tunnel logs deploy/mcp-tunnel -c mcp-proxy 和 -c cloudflared)並查閱疑難排解。
預設會拒絕對代理程式 pod 的 ingress(networkPolicy.ingress.enabled: true)。若要額外限制 pod 的 egress,請設定 networkPolicy.egress.enabled: true,並在 networkPolicy.egress.mcpServers 中填入涵蓋您上游 MCP 伺服器的 pod 標籤選擇器或 CIDR 範圍。從 cloudflared 到通道邊緣的 egress 會透過 networkPolicy.egress.cloudflaredEgressCIDRs 另外允許。
gateway.config.* 下的欄位會直接傳遞到代理程式設定檔。常見的調整包括 upstream.allowed_ips、log_level 和 upstream.tls。完整欄位清單請參閱代理程式設定參考。chart 一律會設定 listen_addr、tls.cert_file 和 tls.key_file;在 gateway.config 中設定它們不會有任何效果。
預設情況下,chart 會為 setup 元件投影 Kubernetes ServiceAccount 權杖。若要使用來自不同身分提供者的權杖(例如 SPIFFE、Vault 或 cloud-SDK sidecar),請使用 setup.extraVolumes 和 setup.extraVolumeMounts 掛載它。然後將 api.wif.tokenFile 指向掛載路徑。chart 會將 ANTHROPIC_IDENTITY_TOKEN_FILE 設定為該路徑,setup 元件會從那裡讀取權杖。
一律將 --version 傳遞給 helm upgrade,以免意外拉取較新的 chart。
Chart 2.0.0 將通道 ID 從 api.wif.tunnelId 移至 tunnel.id。升級前,請編輯您的 values.yaml:將 tnl_... 值移至 tunnel.id 並移除 api.wif.tunnelId。不設定 tunnel.id 是安全的(setup 元件在重新執行時會重複使用已儲存在 mcp-tunnel Secret 中的通道 ID),但明確移動可讓您的 values.yaml 保持準確。同時在 Console 中將聯合規則的範圍從 org:manage_tunnels 更新為 workspace:manage_tunnels。
對於路由、副本數或 NetworkPolicy 等例行變更:
helm upgrade mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 2.0.2 \
-n mcp-tunnel \
-f values.yaml使用程式化存取時,在 values.yaml 中遞增 tunnel.tokenVersion,並使用 --set setup.force=true 進行升級。setup 元件只有在強制時才會在升級期間重新執行:
helm upgrade mcp-tunnel \
oci://us-docker.pkg.dev/anthropic-public-registry/charts/mcp-tunnel \
--version 2.0.2 \
-n mcp-tunnel \
-f values.yaml \
--set setup.force=truesetup 元件使用 Workload Identity Federation 進行驗證;沒有需要撤銷的 API 權杖。
不使用程式化存取時,在 Console 的通道詳細資料頁面上點擊 Rotate token,然後更新 mcp-tunnel-token Secret:
kubectl -n mcp-tunnel create secret generic mcp-tunnel-token \
--from-literal=tunnel-token='eyJ...' --dry-run=client -o yaml | kubectl apply -f -
kubectl -n mcp-tunnel rollout restart deploy/mcp-tunnelchart 提供自動化功能,但您仍需負責監控到期時間並確認更新完成。
使用程式化存取時,憑證更新是自動的。chart 會部署一個 CronJob(以 Helm fullname 命名,後綴為 -cert-renew),每日執行 setup renew-cert(於 serverCert.cronSchedule,預設為 0 0 * * * UTC)。除非憑證距離到期時間在 serverCert.renewBefore 之內(預設 30 天),否則該 job 不會執行任何操作。更新是在本機進行:job 會使用已儲存在 Secret 中的 CA 簽署新憑證,不會進行任何 API 呼叫,只需要 chart 授予的 Kubernetes RBAC。代理程式會從 Secret 掛載熱重載憑證,因此不需要重新啟動 Deployment。
不使用程式化存取時,沒有 CronJob。在安裝後保留的 mcp-tunnel/ 目錄內,使用現有的 CA 簽署新的伺服器憑證(請勿重新產生 CA):
export TUNNEL_DOMAIN=YOUR_TUNNEL_DOMAIN_HERE
openssl req -new -key data/tls.key -out /tmp/server.csr \
-subj "/CN=${TUNNEL_DOMAIN}"
openssl x509 -req -in /tmp/server.csr \
-CA data/ca.crt -CAkey data/ca.key -CAcreateserial \
-out data/tls.crt -days 90 -extfile data/tls.ext
kubectl -n mcp-tunnel create secret generic mcp-tunnel-cert \
--from-file=tls.crt=data/tls.crt --from-file=tls.key=data/tls.key \
--dry-run=client -o yaml | kubectl apply -f -代理程式會從 Secret 掛載熱重載憑證。
Was this page helpful?