You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS EC2的Minikube中配置可对外访问的Ingress网关暴露多服务

完全可以实现,你此前配置MetalLB的LoadBalancer类型Ingress仅能内部访问,是因为MetalLB分配的是集群内部虚拟IP段,未和EC2公网网络打通,直接用Nginx Ingress控制器+NodePort暴露的方案即可满足单端口、路径路由多微服务的需求。

具体配置步骤

步骤1:启用Minikube内置的Ingress插件

Minikube默认集成了Nginx Ingress控制器,直接启用插件即可,无需手动部署:

minikube addons enable ingress

验证控制器正常运行:

kubectl get pods -n ingress-nginx

确认返回的pod状态为Running即可。

步骤2:部署微服务并创建ClusterIP类型Service

无需给每个微服务单独设置NodePort,只要保证微服务的Service在集群内部可访问即可,示例如下:

# 部署helloworld微服务示例
kubectl create deployment --image=你的helloworld镜像 helloworld-app
kubectl expose deployment helloworld-app --port=服务监听端口 --name=helloworld-svc
# 其他mainpage、editorspage微服务按照同样逻辑部署

步骤3:编写Ingress路由规则配置

新建ingress-route.yaml文件,按照你需要的路径规则配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: micro-service-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2 # 后端服务根路径为/时需要加该重写规则,避免路径参数透传导致404
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /helloworld(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: helloworld-svc # 替换为你实际的helloworld服务名
            port:
              number: 80 # 替换为你服务实际的监听端口
      - path: /mainpage(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: mainpage-svc # 替换为你实际的mainpage服务名
            port:
              number: 80
      - path: /editorspage(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: editorspage-svc # 替换为你实际的editorspage服务名
            port:
              number: 80

如果你的后端服务本身就通过子路径提供服务,可删除annotations中的rewrite-target配置,避免路径被错误重写

步骤4:应用Ingress配置

kubectl apply -f ingress-route.yaml

验证配置生效:

kubectl get ingress

步骤5:暴露Ingress控制器对外端口

默认Ingress控制器的Service已经是NodePort类型,执行以下命令查询对应端口:

kubectl get svc -n ingress-nginx

返回结果中80端口对应的NodePort值就是统一对外端口,你只需要在EC2安全组放行该端口,即可通过如下地址访问不同微服务:

  • http://EC2公网IP:对应NodePort/helloworld
  • http://EC2公网IP:对应NodePort/mainpage
  • http://EC2公网IP:对应NodePort/editorspage

如果你想固定使用之前的31568端口,可直接修改Ingress控制器的Service配置指定端口:

kubectl edit svc ingress-nginx-controller -n ingress-nginx

找到ports下http对应的nodePort字段,将值修改为31568,保存退出即可,注意提前确认31568端口未被其他服务占用。

常见问题排查
  • 访问返回404:优先检查rewrite-target配置是否和后端服务的路径逻辑匹配
  • 访问不通:先确认EC2安全组已放行对应NodePort端口,再确认EC2本地防火墙未拦截Minikube的端口流量

内容的提问来源于stack exchange,提问作者Sri Durga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:27:04