GKE集群预留静态IP绑定常规实例后80/443端口无法访问求助
让我帮你梳理几个GKE里很容易踩的坑,大概率是这些配置遗漏了:
常规实例所在节点池的HTTP/HTTPS权限没开启
你之前配置抢占式实例时可能默认开了相关权限,但新建的常规实例节点池说不定没勾选这个选项。去GKE控制台找到对应的节点池,查看「安全」或「访问权限」板块里是否允许HTTP(80)和HTTPS(443)流量;也可以用gcloud命令直接查配置:gcloud container node-pools describe [你的节点池名称] --cluster [你的集群名称]看输出里的
enableHttpLoadBalancing和enableHttpsLoadBalancing是不是true,要是false就修改开启。静态IP的类型和实例不匹配
GKE的静态IP分区域IP和全局IP两种:区域IP只能绑定同区域的实例,全局IP只能用于负载均衡服务,不能直接挂到单个节点上。你可以检查下抢占式和常规实例是否在同一区域,或者是不是误把全局IP直接绑定到了常规实例上——后者肯定会导致访问失败,得通过负载均衡转发流量才行。防火墙规则的目标标签没覆盖常规实例的节点标签
虽然你说配置了宽松的防火墙规则,但GKE会自动给不同节点池的节点添加专属标签,比如gke-[集群名]-[节点池名]-node这类格式。说不定你的防火墙规则只添加了抢占式实例的节点标签,没包含常规实例的?用命令查一下:gcloud compute firewall-rules describe [你的防火墙规则名]看
targetTags里有没有常规实例节点池的标签,没有的话补上就行。常规实例上的kube-proxy未正常运行
kube-proxy负责节点的端口转发工作,如果它的Pod挂了,外部流量就无法正常进入节点。用这条命令检查节点上的kube-proxy状态:kubectl get pods -n kube-system -o wide | grep kube-proxy | grep [常规实例节点名]要是状态不是Running,尝试重启kube-proxy或者直接重启节点试试。
另外,你可以先测试直接访问常规实例的内部IP能不能打开80/443端口:如果内部能通,那基本就是外部IP绑定或防火墙标签的问题;如果内部也不通,那就是节点本身的服务或组件出了问题。
内容的提问来源于stack exchange,提问作者nambrot

