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

时间:2019-06-04 12:59:24

标签: kubernetes nginx-ingress

我们希望使用Nginx Ingress Controller公开具有不同安全要求的Kubernetes服务的不同路径。

  1. /对公众开放

  2. /white-list仅允许来自特定IP地址的连接

  3. /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-Key来生活,因为我可以将其编码出来,但是理想情况下,我宁愿将其管理在容器之外。

有人用NGINX Ingress控制器做到了吗?

1 个答案:

答案 0 :(得分:1)

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

例如:

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
...