如何在kubernetes nginx入口控制器中仅白名单一条路径

如何在kubernetes nginx入口控制器中仅白名单一条路径,kubernetes,nginx-ingress,Kubernetes,Nginx Ingress,使用Nginx入口控制器,我们希望公开具有不同安全要求的Kubernetes服务的不同路径 /对公众开放 /white list仅允许从特定IP地址进行连接 /need key需要API密钥 我穿着AWS EKS跑步。Kubernetes版本如下:v1.12.6-eks-d69f1b 如果我们使用注释,它们将应用于整个服务。理想情况下,我希望只对路径应用注释 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingres

使用Nginx入口控制器,我们希望公开具有不同安全要求的Kubernetes服务的不同路径

  • /
    对公众开放

  • /white list
    仅允许从特定IP地址进行连接

  • /need key
    需要API密钥

  • 我穿着AWS EKS跑步。Kubernetes版本如下:
    v1.12.6-eks-d69f1b

    如果我们使用注释,它们将应用于整个服务。理想情况下,我希望只对路径应用注释

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-myServiceA
      annotations:
        # use the shared ingress-nginx
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - host: myServiceA.foo.org
        http:
          paths:
          - path: /
            backend:
              serviceName: myServiceA
              servicePort: 80
          - path: /white-list
            backend:
              serviceName: myServiceA
              servicePort: 80
              **NEED SOMETHING HERE TO WHITELIST**
          - path: /need-key
            backend:
              serviceName: myServiceA
              servicePort: 80
              **NEED SOMETHING HERE TO USE API-KEY**
    
    我得到的结果最终适用于所有路径。 我可以在没有API密钥的情况下生存,因为我可以将其编码出来,但理想情况下,我宁愿在容器之外管理它


    是否有人使用NGINX Ingress controller实现了这一点?

    要为每个路径应用注释,可以为每个要应用的路径编写一条
    Ingress
    规则。Nginx入口控制器将自行收集这些
    入口
    规则并相应应用

    例如:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-myServiceA-root
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
      - host: myServiceA.foo.org
        http:
          paths:
          - path: /
            backend:
              serviceName: myServiceA
              servicePort: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-myServiceA-white-list
      annotations:
        kubernetes.io/ingress.class: "nginx"
        ingress.kubernetes.io/whitelist-source-range: X.X.X.X/32
    spec:
      rules:
      - host: myServiceA.foo.org
        http:
          paths:
          - path: /white-list
            backend:
              serviceName: myServiceA
              servicePort: 80
    ...