You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K3s单节点集群Pod连接外部站点SSL Socket/WebSocket被拒咨询

单节点K3s环境下恢复WebSocket/SSL Socket通信的操作步骤

前置问题澄清

当前你执行curl命令报connection refused,核心原因是请求流量没有到达应用服务层,和你“未配置网络策略、流量全放行”的预期没有冲突——全放行的网络策略只会在流量已经到达网络栈的前提下不拦截报文,不会主动帮你把流量引导到你的应用入口上。

具体操作排查与调整

  • 先修正请求的基础域名解析问题
    你命令里写的目标是example.com,这个域名是公网保留示例域名,默认解析到公共站点IP,流量根本不会走到你的K3s集群。执行curl的机器上需要先配置hosts映射,把example.com指向你K3s单节点的实际内网IP,确保域名解析指向集群入口。
  • 核对Helm部署的应用服务暴露配置
    单节点K3s所有工作负载都运行在Server节点上,外部连接被拒最常见的原因是服务没有对外暴露入口:
  • 检查Helm Release对应的Service配置,如果是默认的ClusterIP类型,集群外的流量没有路由可以打到Pod上,需要调整服务暴露方式:要么设置为NodePort类型直接映射节点端口,要么利用K3s内置的ServiceLB能力直接在节点上绑定对应端口,不要仅依赖集群内部DNS访问。
  • 核对端口映射的匹配关系:确认Service配置的targetPort和Pod内应用实际监听的容器端口完全一致,避免流量转发到Pod上没有进程监听的端口。
  • 避免端口冲突:K3s默认部署的Traefik Ingress控制器会占用节点的80/443端口,不要让应用服务直接绑定这两个端口造成端口抢占,需要通过Ingress规则配置域名路由,把对应域名的流量转发到后端Pod。
  • 适配SSL Socket的协议要求
    你提到需要建立SSL Socket加密连接,但当前curl用的是80端口的明文HTTP协议,和SSL加密链路的规范不匹配:
  • 针对需要走wss(加密WebSocket)的场景,需要在Ingress上为example.com配置对应的TLS证书,确保443端口的SSL握手流程正常。
  • 验证时调整curl的请求地址为HTTPS协议的443端口,再搭配WebSocket要求的Upgrade相关请求头,不要把加密连接的请求发到没有SSL配置的80端口上。
  • 网络规则的二次核对
    K3s默认通过Flannel组件实现Pod网络互通,无自定义网络策略的场景下跨Pod、节点到Pod的流量是全放行的,不存在策略拦截的问题。如果之前手动部署过全局隔离类型的NetworkPolicy,需要删除这类规则,确保未匹配自定义策略的流量不会被默认拦截。

连通性验证流程

  • 先在K3s Server节点本地验证:直接访问Pod的IP和对应监听端口,确认应用服务本身正常启动、端口处于LISTEN状态,排除应用启动失败的问题。
  • 再按链路顺序逐段验证:先测节点上服务暴露的端口连通性,再测Ingress的80/443端口连通性,最后携带所有WebSocket升级头发送请求,返回101 Switching Protocols即代表SSL Socket/WebSocket链路正常建立。

内容的提问来源于stack exchange,提问作者beast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 20:36:08