前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Serverless集群无法公网访问APIServer

Serverless集群无法公网访问APIServer

原创
作者头像
聂伟星
发布2024-08-22 00:08:36
190
发布2024-08-22 00:08:36
举报
文章被收录于专栏:腾讯云容器运维

1. 问题现象

Serverless集群开启了公网访问,客户端配置了kubeconfig,但是执行kubectl无法访问到集群,直接telnet公网访问clb的443端口也是不通,看clb的安全组是放通了443端口的。

公网访问Serverless集群的apiserver,链路是客户端--->clb--->Deployment:kubernetes-proxy(default)--->master(apiserver),这里clb配置没问题,那说明是kubernetes-proxy这里可能异常了,看pod是正常running的,但是日志一直报错

2. 问题原因

看报错是tls握手失败,抓包发现是因为https访问新的域名化clb(类似lb-xxxxx-zw9a273lycj6durt.clb.sh-tencentclb.com),tls的client hello会被reset,reset的ttl与正常报文的ttl不同

http访问新的域名化clb(类似lb-xxxxx-zw9a273lycj6durt.clb.sh-tencentclb.com),会通过http 302 localtion跳转到CLB的默认域名阻断提示页面,可以参考文档https://cloud.tencent.com/document/product/214/105270

这里原因就是clb默认域名阻断导致的。

3. 解决方案

因为现在账号默认都是开启clb域名化,创建的出来的clb都是域名化,在Serverless控制台开启公网访问,会自动创建kubernetes-proxy-public这个公网类型的service,并关联创建出一个公网clb,然后将clb的公网域名配置到kubernetes-proxy

这个deployment的domains启动参数,domains这个参数的含义就是会将配置域名签到apiserver的证书里面

因为clb默认域名不能使用,那就只能用业务自己的域名,如何更换apiserver为业务自定义域名,可以如下操作

1. 首先确定下集群的访问域名,建议可以用集群id+业务域名,比如我的业务域名是niewx.cn,集群id是cls-xxxx,那域名就可以配置为cls-xxxx.niewx.cn。

2. 然后修改yaml将cls-xxxx.niewx.cn加到kubernetes-proxy这个deployment的domains启动参数中,更新重建pod

3. 在dns解析配置cname记录

4. 修改kubeconfig的server地址,改成业务自定义的域名

5. 保存后就可以正常访问了集群apiserver了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 问题现象
  • 2. 问题原因
  • 3. 解决方案
相关产品与服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档