如何在AKS集群中暴露非HTTP服务供同子网Apache访问
可行的Tomcat AJP服务暴露方案
以下方案均适配同子网VM访问AKS内部服务的场景,可直接满足你通过ajp://10.x.x.x:5009/dbp_webui发起请求的需求:
方案1:使用Internal LoadBalancer(ILB)类型的Service(最推荐)
ILB会分配一个和AKS集群同VNet的10段内网静态IP,和你的Apache VM网络完全互通,无需额外路由配置:
- 配置Service时添加ILB专属注解,直接映射AJP的5009端口到Tomcat Pod的对应端口即可,配置示例如下:
apiVersion: v1 kind: Service metadata: name: tomcat-ajp-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer ports: - port: 5009 targetPort: 5009 # 替换为你的Tomcat Pod实际开放的AJP端口 protocol: TCP selector: app: tomcat # 替换为你的Tomcat Pod对应的标签
- 配置完成后直接把Apache配置里的10.x.x.x替换为ILB分配的内网IP即可正常访问。
- 优点:自带负载均衡,支持多Tomcat Pod流量自动分发,IP固定可用性高,完全匹配你要求的端口格式。
- 注意:AJP协议默认无加密,不要开放公网访问权限,仅限内部VNet使用即可。
方案2:Azure CNI网络模式下直接使用Pod IP访问
如果你部署AKS时选择的是Azure CNI网络插件,所有Pod的IP会直接从VNet地址段分配,和Apache VM同属二层可通网络:
- 无需额外服务配置,直接在Apache侧填写Tomcat Pod的内网IP+5009端口即可访问。
- 优点:无额外配置成本,网络路径最短,性能损耗最低。
- 缺点:Pod重建后IP会自动变更,需要自行维护IP更新逻辑,不支持多Pod负载均衡,只适合单实例测试场景使用。
方案3:使用NodePort类型的Service
- 将Tomcat AJP端口配置为NodePort类型的服务,可手动指定30000-32767范围内的端口,之后通过AKS节点的内网IP+NodePort端口即可访问。如果必须使用5009端口,需要手动修改kube-apiserver的
--service-node-port-range参数放开端口限制。 - 配置示例如下:
apiVersion: v1 kind: Service metadata: name: tomcat-ajp-nodeport spec: type: NodePort ports: - port: 5009 targetPort: 5009 nodePort: 30009 # 可自定义,范围默认30000-32767 protocol: TCP selector: app: tomcat
- 优点:配置逻辑简单,不需要额外占用负载均衡资源。
- 缺点:端口范围受限,节点销毁或IP变更会影响访问,需要自行实现负载均衡逻辑。
方案4:ClusterIP Service + 自定义VNet路由
如果你使用的是Kubenet网络模式的AKS,Pod IP属于集群内部地址段,可在VNet路由表中添加指向AKS节点池的Pod CIDR路由,配置完成后Apache VM就可以直接访问ClusterIP或Pod IP。
- 优点:不需要额外的Service资源开销,可用端口不受限制。
- 缺点:需要手动维护VNet路由规则,配置复杂度高,网络问题排查难度大,不推荐生产环境使用。
内容的提问来源于stack exchange,提问作者Chetan Natekar
相关产品推荐
相关产品推荐

