nodeport service 的外部端口是 kubernetes 在 30000–32767 范围内分配或用户手动指定的固定高位端口(如 30080),与容器内监听端口无关;targetport 必须严格匹配 frankenphp 实际监听地址(如 0.0.0.0:8080),且需确保安全组和节点防火墙放行该 nodeport。

NodePort Service 的端口怎么算出来的
FrankenPHP 在 Kubernetes 里用 NodePort 类型 Service,外部访问的端口不是你随便指定的,而是由 Kubernetes 分配或你显式声明的固定高位端口(30000–32767),和容器内监听端口是两回事。
关键点:Service 的 nodePort 字段决定宿主机上哪个端口可被访问;targetPort 才对应 FrankenPHP 容器实际监听的端口(默认 80 或自定义的 8080 等)。
- 如果你没写
nodePort,Kubernetes 会自动从 30000–32767 随机选一个空闲端口,得查kubectl get svc输出里的PORT(S)列(比如显示80:31234/TCP,那外部就该访问http://<node-ip>:31234</node-ip>) - 若手动指定了
nodePort: 30080,那就必须确保该端口在所有 Node 上未被占用,且云厂商安全组/本地防火墙放行30080/tcp -
targetPort必须严格匹配 FrankenPHP 进程监听地址——比如容器启动时用了-- -listen 0.0.0.0:8080,那么targetPort就得是8080,不能写成80或9001
为什么 curl http://node-ip:30080 返回 connection refused
常见原因是 targetPort 和 FrankenPHP 实际监听端口不一致,或者容器根本没在听 0.0.0.0 而只绑了 127.0.0.1。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- FrankenPHP 默认监听
127.0.0.1:8080,这在容器内等价于“只给自己听”,Kubernetes 的 kube-proxy 无法转发到这个地址 → 必须显式加-- -listen 0.0.0.0:8080启动参数 - 检查容器日志:
kubectl logs <pod-name></pod-name>,确认有类似Starting FrankenPHP server on http://0.0.0.0:8080的输出,而不是127.0.0.1:8080 - 进容器验证监听状态:
kubectl exec -it <pod-name> -- ss -tlnp | grep :8080</pod-name>,看到0.0.0.0:8080才算对
SERVER_NAME=:80 和 NodePort 能一起用吗
能,但容易搞混层级:SERVER_NAME 控制的是 FrankenPHP 内置 Caddy 的 HTTP 模式(是否启用 HTTPS、是否做域名路由),和 NodePort 的端口映射完全无关。
- 设
SERVER_NAME=:80只会让 Caddy 监听容器内:80并禁用 ACME,此时targetPort就得改成80,nodePort仍需在 30000–32767 范围内 - 不要以为
SERVER_NAME=:30080就能让它监听 30080——Caddy 不识别带端口的主机名,这种写法会被忽略,最终还是监听默认端口 - 如果想让外部通过
http://node-ip:30080访问,且容器内用:80,那配置就是:targetPort: 80+nodePort: 30080+ 启动参数不含-listen(靠默认行为)或显式写-- -listen 0.0.0.0:80
阿里云/腾讯云节点上访问不到 NodePort 的真正拦路虎
NodePort 端口(如 30080)在 Kubernetes 层面已暴露,但云服务器的「安全组」和节点系统的「firewalld/ufw」默认都会拦截,这点比 Docker host 模式更隐蔽。
- 必须在阿里云控制台的安全组规则里,手动添加入方向规则:协议类型
TCP,端口范围30080/30080,源 IP 可设为0.0.0.0/0(测试)或限定 CIDR(生产) - 登录任意一个 Node,执行
sudo firewall-cmd --list-ports,若没看到30080,就得加:sudo firewall-cmd --add-port=30080/tcp --permanent && sudo firewall-cmd --reload - Windows Node 上还要关掉 Windows Defender 防火墙的入站规则,或新建允许 TCP 30080 的规则
最常被跳过的其实是 targetPort 和容器内监听地址的匹配——写错一个数字,或者忘了加 0.0.0.0: 前缀,整个链路就断在 kube-proxy 到 Pod 这一跳,连日志都看不到请求进来。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










