AKS中无需开启节点公网IP时,如何访问NodePort服务?
AKS官方文档提到“AKS nodes don't require their own public IP addresses for communication”,这里的通信指集群内部组件交互、节点与控制平面通信等场景,并非忽略NodePort服务的访问需求——官方不推荐给节点分配公网IP,主要是出于安全风险(节点暴露公网易受攻击)和管理复杂度的考虑。以下是几种无需开启节点公网IP即可访问NodePort服务的替代方案:
使用LoadBalancer类型服务:这是替代NodePort公网访问最直接的方案。定义Kubernetes服务时将
spec.type设为LoadBalancer,AKS会自动在Azure上创建公共负载均衡器并分配专属公网IP,流量会被转发到服务对应的NodePort端口,全程无需节点拥有公网IP。如果仅需内网访问,可添加注解service.beta.kubernetes.io/azure-load-balancer-internal: "true"创建内部负载均衡器。部署Ingress Controller:通过部署NGINX等Ingress控制器,将其暴露为LoadBalancer类型服务,然后配置Ingress资源将外部请求路由到后端的NodePort服务。这种方案支持域名路由、SSL证书管理、路径转发等高级功能,能统一集群的外部访问入口,比单独使用NodePort更灵活可控。
使用Azure Application Gateway Ingress Controller (AGIC):这是Azure原生的Ingress解决方案,将Application Gateway作为AKS的流量入口,与集群深度集成。AGIC会自动同步Ingress规则到Application Gateway,无需节点公网IP,还能利用Azure网关的WAF防护、SSL卸载、流量监控等企业级能力。
ClusterIP服务+端口转发(开发测试场景):在开发调试阶段,可将服务设为
ClusterIP类型,然后通过kubectl port-forward service/<服务名称> 本地端口:服务端口命令,将本地请求转发到集群内部的服务。这种方式仅适合本地开发使用,无需暴露公网。内网访问方案(Azure/VPN/企业内网):如果访问来源是Azure内网或企业内网,可通过Azure Bastion连接到集群所在的VNet,或者建立VPN/Express Route打通网络,直接通过节点内网IP或ClusterIP服务访问,完全不需要公网IP参与。
内容的提问来源于stack exchange,提问作者Yashasvi Raj Pant

