Products
GG网络技术分享 2026-04-17 02:25 1
哎,说起Serverless集群的API Server公网访问问题,我真是头疼!作为一个老程序员,踩过的坑比你们吃过的饭还多。最近有个项目,非要让咱们的API Server能从公网上直接访问, 一言难尽。 后来啊折腾了好几天才搞明白。一开始我以为是防火墙的问题,后来发现根本不是那么回事儿!这简直就是一场噩梦啊!
Serverless听起来很美好, 不用管服务器,自动伸缩… 但是当你真正用起来的时候,各种问题就冒出来了。特别是涉及到网络配置的时候,更是让人摸不着头脑。咱们都知道,传统的服务器部署模式下公网访问很简单,买个弹性IP、配置一下平安组就OK了。但是Serverless不一样啊!它背后有一堆复杂的组件在运作,你根本不知道发生了什么,太硬核了。。

这得从Serverless集群的架构说起。咱们的API Server通常运行在一个Kubernetes集群中,而这个集群通常是内网的。为了平安起见,默认情况下是不允许直接从公网上访问的。这就像你把家门锁上一样,不让陌生人随意进出。但是现在我们需要打开一扇窗户给外面的人看一看咱们的API Server了,蚌埠住了...。
实际上... 那天早上接到需求说API Server必须能公网访问, 我心想小菜一碟, 后来啊... 先检查了平安组, 发现443端口已经放通了. 然后用telnet测试, 后来啊连接超时. 接着用traceroute命令追踪路由, 发现请求根本到不了咱们的服务器. 简直要崩溃了!
查看系统日志文件/var/log/messages也没找到有用的信息. 我当时就感觉自己像个侦探, 在迷雾森林里寻找线索.
| 产品名称 | 功能 | 价格 |
|---|---|---|
| 阿里云Serverless应用引擎 | 提供Serverless计算服务 | 按量付费 |
| 腾讯云云函数 | 提供无服务器计算服务 | 按量付费 |
| 华为云函数工作流 | 提供事件驱动的Serverless服务 | 按量付费 |
经过一番折腾和请教大牛后我终于找到了问题的根源:CLB域名化导致的TLS握手失败!现在账号默认都是开启CLB域名化的, 创建出来的CLB都是域名化 一言难尽。 的. 在Serverless控制台开启公网访问, 会自动创建一个kubernetes-proxy-public类型的service和一个CLB。
先说说确定下集群的访问域名建议可以用集群id+业务域名比如我的业务域名是example.com 集群id是cls-xxxx 那域名就可以配置为cls-example.com ,不如...。
修改yaml 将cls-加到kubernetes-proxy这个deployment的domains启动参数中 更新重建pod,你看啊...。
修改kubeconfig 的server地址 改成业务自定义的域名。
在dns解析配置cname记录: 将自定义域名解析到clb提供的域名,不夸张地说...。
保存后就可以正常访问了集群apiserver了。
抓包发现是主要原因是https访问新的域名化clb, tls的client hello会被reset ,reset 的ttl与正常报文的ttl不同 。 主要原因是clb默认域名不能使用 ,那就只能用业务自己的域名 如何更换apiserver为业务自定义域名 可以如下操作,上手。。
弄一下... “程序员最大的乐趣就是解决难题” ——虽然有时候会让人崩溃!
Demand feedback