我们希望使用Nginx Ingress Controller公开具有不同安全要求的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-Key来生活,因为我可以将其编码出来,但是理想情况下,我宁愿将其管理在容器之外。
有人用NGINX Ingress控制器做到了吗?
答案 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
...