如何将Minikube中的nginx对外暴露

How to expose nginx in Minikube to outside

我已经使用以下命令在 AWS EC2 实例的 minikube 中部署了 Nginx:

kubectl create deployment --image=nginx nginx-app
kubectl expose deployment nginx-app --port=80 --name=nginx-http --type=NodePort

在 NodePort 上可用:31568
我已经在安全组中添加了这个端口,并且能够在另一台笔记本电脑的浏览器上使用 http://EC2-PublicIP:31568

访问它

我有很多微服务要对外暴露。

有什么方法可以部署 API 网关(Nginx 或 Ingress)并在端口上公开并且应该能够访问其他微服务,例如

http://EC2-PublicIp:31568/helloworld          
http://EC2-PublicIp:31568/mainpage           
http://EC2-PublicIp:31568/editorspage  
       
etc

我试过添加metallb,相应地,一个IP被分配给ingress(负载均衡器类型)。我只能在 EC2 实例中访问 ingress.yaml 中指定的所有微服务。

这应该可以从外面访问。如果是,那么如何配置?

感谢任何帮助。

你应该可以这样做,因为你使用的是 Nginx。
配置应该像这样:

注释来帮忙

“技巧”是将 annotations 设置为支持 regexprewrite-target

  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    #
    # the value can be set to  `/` or `` or `` and so on
    nginx.ingress.kubernetes.io/rewrite-target: "/"

这是“重要”注释 - 重写

# Without a rewrite any request will return 404
nginx.ingress.kubernetes.io/rewrite-target: "/"

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  annotations:
    #
    # This is the expected line
    # 
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: "/"
spec:
  rules:
  - host: test.com # <- Set your host
    http:
      paths:
        #
        # List of desired paths
        # 
      - path: /path1
        backend:
          serviceName: nginx-http
          servicePort: 80
      - path: /path2/[A-Z0-9]{3}
        backend:
          serviceName: nginx-http
          servicePort: 80